Churn Reasons


The Churn Reasons report shows a timeline of why customers canceled their subscriptions, broken down by the specific reason recorded at cancellation. This helps you identify the most common drivers of churn and prioritize retention strategies accordingly.


Overview

The Churn Reasons report is part of the Churn tab group, alongside Logo Churn, MRR Churn, Net MRR Churn, and Scheduled Churn.

The report includes five main sections:

  1. Cancellation insights - AI-generated synthesis of customer freetext comments for the selected period
  2. Timeline chart - MRR lost per reason over time
  3. Pie chart - Proportional breakdown of churn reasons
  4. Breakdown table - Period-by-period detail per reason
  5. Movement detail table - Individual customer churn records, with hover tooltips for freetext comments

Cancellation insights

When customers cancel and leave a freetext comment explaining why, the Cancellation insights panel appears at the top of the report. It reads every comment for the selected period and gives you one founder-friendly paragraph describing what's actually going on.

The summary separates:

  • Cancellations you can't fix (business closed, sold, seasonal, mis-clicked) from the ones you can — so the headline churn number isn't dragged down by reasons unrelated to your product.
  • Product, pricing, and competitor patterns with concrete quoted examples. If three customers all mention switching to an integrated alternative, you'll see that as a named pattern, not buried under "switched service".
  • Specific feature gaps and bugs that customers wrote out in their own words — often things that would have been a one-day fix.
  • Self-inflicted churn ("I would have stayed if you offered an annual plan") that signals a hole in your signup or pricing flow.

Each pattern in the summary has hover-and-click links pointing to the exact customers behind it, so you can drill from "people are leaving for bundled competitors" straight to the five customers who said so.

How it works:

  • The summary covers the same date range you have selected for the report.
  • It only appears if there are at least 3 cancellations with freetext comments in that range.
  • Results are cached for 24 hours per date range. Use the Regenerate button to refresh on demand.
  • The model only sees the comments — not your customer list, MRR, or any other context. Output is a markdown paragraph, never structured PII.

If the summary box doesn't appear, no comments have been collected yet for this period. See Collecting Cancellation Comments for the 5-minute setup.


Timeline chart

The timeline chart shows MRR lost to churn, broken down by cancellation reason as stacked lines. Each reason is assigned a consistent color across the report.

  • Y-axis - MRR lost (in your base currency)
  • X-axis - Time periods (based on interval selection)
  • Lines - Each line represents a specific churn reason

This helps you spot trends, such as a spike in "Too expensive" cancellations after a price increase, or a rise in "Missing features" that signals a product gap.


Pie chart

The pie chart shows the proportional share of each churn reason across the selected period. It displays the top 5 reasons, grouping the rest under "Other".

Use this chart for a quick visual answer to: "What's the #1 reason customers leave?"


Breakdown table

The breakdown table shows MRR lost per reason for each period, with customer counts displayed as superscript numbers.

ColumnDescription
ReasonThe cancellation reason label
Period columnsMRR lost and customer count for each period

Click any cell to reveal the movement detail table showing the individual customers who churned for that reason in that period.

Hovering over a row highlights the corresponding line in the timeline chart.


Movement detail table

When you click a cell in the breakdown table, the detail table appears showing individual churn events:

ColumnDescription
DateWhen the churn occurred
CustomerCustomer name and email (click to view detail page)
ReasonThe cancellation reason
MRR lostAmount of MRR lost from this customer

The table is sorted by date (newest first) by default. Click any customer to view their detail page with full subscription history.

Customers who left a freetext comment when cancelling have a small speech-bubble icon next to their reason. Hover the icon to read the full comment without leaving the table. The same comment also appears as a hover tooltip on the cancellation reason label on the customer detail page.


Supported churn reasons

GrowPanel recognizes the following cancellation reasons:

ReasonDescription
Too expensiveCustomer cited price or cost concerns
Too complexProduct was too difficult to use or learn
Switched serviceCustomer moved to a competitor
UnusedCustomer was not using the product
Missing featuresProduct lacked required functionality
Low qualityCustomer was unsatisfied with product quality
Customer serviceIssues with support or service
Payment failedInvoluntary churn — auto-detected when a subscription dies from failed payment recovery (see detection logic below)
Payment disputedCancellation due to a payment dispute or chargeback
OtherUnspecified or custom reasons

Setup requirements

To populate churn reasons data, your billing source must capture cancellation reasons:

  • Stripe - Enable Stripe's built-in cancellation reason collection. See Collecting Cancellation Comments for a step-by-step walkthrough, including how to capture the freetext comments that power Cancellation insights.
  • Chargebee / Recurly - Cancellation reasons (structured enum only) from these providers are imported when available. Freetext comments are not exposed by their APIs today.

How GrowPanel classifies involuntary (delinquent) churn

The "Payment failed" reason is special: it marks involuntary churn — a subscription that died because payment failed, not because the customer chose to leave. GrowPanel assigns it automatically (regardless of billing source) using three signals, in order:

  1. The billing source says so. Stripe stamps the cancellation with payment_failed / payment_disputed when it gives up on payment recovery itself.
  2. The subscription was unpaid or past_due at cancellation — the last invoice failed and the account's grace period expired with the customer still in arrears.
  3. Exhausted-dunning arrears. Even when the cancellation carries no payment signal, GrowPanel still detects involuntary churn if, at cancellation, the customer had an outstanding invoice with all payment retries exhausted (Stripe stops retrying / marks the invoice uncollectible). This covers billing setups configured to mark a failed subscription unpaid instead of cancelling it, where the actual cancellation is issued later — manually or by a script — so it looks "customer-requested" even though it's really a non-payment death.

Importantly, a customer who missed a single payment and is still mid-retry, or who paid and then canceled, is treated as voluntary — GrowPanel only classifies involuntary churn once payment recovery has genuinely failed. Every reason other than "Payment failed" / "Payment disputed" is voluntary.

Because this reads from a subscription's payment history, historical churn is re-classified the next time a customer is synced — so after this logic is introduced, involuntary numbers for past periods update as accounts re-import.

Note: If your billing source does not capture cancellation reasons, this report will show all churn under "Other" or with no reason specified, and Cancellation insights will be hidden.


Filters

The Churn Reasons report supports all standard filters:

  • Date range - Select a custom range or preset period
  • Interval - Aggregate by day, week, month, quarter, or year
  • Churn reason - Filter to specific reasons (e.g., only show "Too expensive" and "Missing features")
  • Additional filters - Plan, region, currency, billing frequency, payment method, pricing model, industry, customer age, size, channel, data source (see all filters)

Filters apply to all sections (chart, pie, table, detail) simultaneously.


Exporting the data

Click the Export icon next to the date picker to download the data as a CSV file.


Practical tips

  • Prioritize the top reason. Focus retention efforts on the most common reason first. If "Too expensive" is #1, consider introducing a lower-cost tier or offering discounts to at-risk customers.
  • Track reasons over time. A sudden increase in a specific reason often correlates with a recent change: pricing updates, feature removals, or support quality shifts.
  • Separate voluntary from involuntary. Use the "Payment failed" reason to understand how much of your churn is involuntary. Involuntary churn can be reduced with dunning and payment recovery rather than product changes.
  • Combine with segments. Filter by plan or customer size to see if churn reasons differ across segments. Enterprise customers may churn for "Missing features" while small accounts churn for "Too expensive".
  • Use for product roadmap input. If "Missing features" is a top reason, dig into the detail table to identify which customer segments are affected and reach out to understand what's missing.