Collecting Cancellation Comments


GrowPanel reads two things from each cancellation: the structured reason (an enum like "too expensive" or "switched service") and the freetext comment the customer wrote in their own words. The freetext is where the real signal lives — it's what feeds the Cancellation insights panel on the Churn Reasons report.

This article shows how to make sure those comments are actually being collected on the Stripe side, so they flow through to GrowPanel automatically.


What's the difference between a reason and a comment?

When a Stripe subscription is cancelled, two related fields can be attached to the cancellation:

FieldTypeExample
Cancellation reasonPredefined enumtoo_expensive, missing_features, other
Cancellation commentFreetext"After adding all the add-ons, it's becoming too expensive; other sites don't normally charge for things like Stripe."

The reason gives you a chart. The comment gives you the actual quote — the one you can paste into a product discussion or a board update. GrowPanel captures both, but you only get the freetext if Stripe is collecting it in the first place.


Option 1: Stripe Customer Portal (no-code)

The fastest path. Stripe's hosted Customer Portal can ask for both a reason and a comment whenever a customer cancels — you just need to enable it.

  1. Open your Stripe Customer Portal settings.
  2. Find the Cancellations section.
  3. Enable Cancel subscriptions.
  4. Under Cancellation reason, enable Ask for a cancellation reason.
  5. Make sure Allow customers to provide additional details (the freetext box) is enabled.
  6. Save.

That's it. From this point forward, every cancellation through the Customer Portal will carry both fields, and GrowPanel will pick them up at the next sync.

💡 Already cancelled customers: the freetext is stored permanently on the Stripe subscription object, so once you enable this and run a full GrowPanel resync, you'll get comments for all historical cancellations that had them.


Option 2: Cancelling via the Stripe API (custom flows)

If you cancel subscriptions programmatically — for example, from your own in-app cancellation flow — you control both fields directly.

curl https://api.stripe.com/v1/subscriptions/sub_xxx \
-u sk_live_xxx: \
-X DELETE \
-d "cancellation_details[feedback]=missing_features" \
-d "cancellation_details[comment]=We needed multi-language support for our Thai customers"

The cancellation_details.feedback field accepts one of Stripe's predefined values. The cancellation_details.comment field accepts up to 500 characters of freetext.

If you're already capturing this information in your own database (e.g. from a custom exit-survey form), make sure to also pass it to Stripe when you cancel the subscription — that's how it reaches GrowPanel.


Option 3: Updating an already-cancelled subscription

If a subscription has already been cancelled without a comment, you can still attach one retroactively:

curl https://api.stripe.com/v1/subscriptions/sub_xxx \
-u sk_live_xxx: \
-d "cancellation_details[comment]=Customer emailed us their reason after cancelling"

This is useful if your support team records the real reason after the fact — you can push it back to Stripe so it ends up in GrowPanel's reporting.


What about Chargebee, Recurly, and Alunta?

These providers don't expose a dedicated freetext cancellation comment field through their public APIs today, so the comment column will be empty for cancellations imported from them. The structured reason enum still works.

If you need freetext capture for non-Stripe billing, the workaround is to store the comment in a custom field on the customer in your billing source — GrowPanel imports custom fields and you can filter and break down by them directly.


Verifying it's working

After enabling collection and running a sync:

  1. Open any customer detail page in GrowPanel for someone who cancelled with a comment. The comment will appear as a tooltip when you hover over the cancellation reason label.
  2. Open the Churn Reasons report. Customers with comments will have a small speech-bubble icon next to their reason in the detail table.
  3. If you have at least 3 cancellations with comments in the selected period, the Cancellation insights panel will appear above the breakdown table.