Stayput / Guides

Guide · facts checked 4 Nov 2026

How to read cancel reasons and match an offer to each

Stripe's customer portal can ask a cancelling customer to pick from 8 preset reasons and type their own if they pick Other. You find the answers on the subscription's page in the Dashboard, in Stripe Sigma, and in the customer.subscription.updated webhook. The useful step is the one after: map each reason to one offer, and to no offer where an offer would be the wrong answer.

Where the reasons come from

Stripe's cancellation page in the customer portal can collect a reason when a customer cancels. You choose which of the standard reasons your customers see, and a customer who picks Other reason can type their own words.

Reason the customer picksWhat it usually means
It’s too expensiveThe price is the problem, or the value does not feel like the price.
I need more featuresThey needed something the product does not do.
I found an alternativeThey found another tool and are leaving for it.
I no longer need itThey no longer need it, or never got into the habit.
Customer service was less than expectedA support experience went badly.
Ease of use was less than expectedThey could not get the value out of it.
Quality was less than expectedIt did not work the way they expected.
Other reasonAnything else; the free-text box opens.

The middle column is interpretation, not Stripe's wording. Treat it as the thing to check in the free text, not as a fact about any one customer.

Where to read them in Stripe

  • The subscription page. Billing → Subscriptions → open the subscription. Good for one customer at a time.
  • Stripe Sigma. Query the billing data when you want counts by reason. Stripe has templates for Billing queries.
  • The webhook. The reason arrives in the customer.subscription.updated event, so your own code can react the moment someone cancels. The Stripe cancel flow guide shows a handler.

Stripe's performance reporting also groups free-text cancellation comments with AI, which saves reading every comment when you have a few hundred.

From reason to offer: a starting point

A retention offer is only worth showing if it answers the reason the person gave. A discount for someone who says they no longer use the product is a discount for a customer who still will not use it. The table is a place to start from; your own numbers should overrule it.

ReasonOffer to tryOffer to avoid
It’s too expensiveA time-limited discount, or a cheaper planAn open-ended discount that becomes the new price
I need more featuresAsk which feature; a pause if it is on your list to buildA discount; the price was not the problem
I found an alternativeAsk which one; a plan change if price is the gapChasing someone who has already moved
I no longer need itA pause for a set number of weeksA discount on something they do not open
Customer service was less than expectedA personal reply from youA coupon in place of an answer
Ease of use was less than expectedA short help offer, or a simpler planA pause that ends with the same confusion
Quality was less than expectedAsk what went wrongAny offer; fix the product and say so
Other reasonRead the free text firstA generic offer

The Quality row ends in no offer on purpose, and Customer service in a reply instead of a coupon. A cancel flow that always offers something teaches you nothing, and it trains customers to cancel for the coupon. The pause, discount and downgrade guide covers what each offer costs.

How to apply a reason in Stripe retention rules

Stripe's retention rules can use the cancellation reason as a condition. A rule can say: show an offer only when the reason is “It’s too expensive” and the subscription is older than 6 months. Conditions can also use the subscription's age in months, total billing spend, subscription status and metadata on the subscription or the customer. A customer must meet every condition in a branch to get its offer; Stripe tries branches in the order you set them and uses the first that matches.

That covers the case where one reason maps to one fixed offer. It does not read the free-text box. If “Other” carries most of your cancellations, the words are where the signal is.

A weekly routine for a small SaaS

  1. Once a week, list the cancellations and their reasons. At 20 to 50 a month, ten minutes in a spreadsheet is enough.
  2. Read every free-text comment. If a phrase appears three times, it is a roadmap item or a pricing question, not noise.
  3. Count by reason. If one reason is over a third of the cancellations, that is the offer to build first.
  4. Write the one offer for that reason and the one reason you will not make an offer for.
  5. Check the result against a holdout, not just the accepted offers: what counts as a save.

Watch one reason turn into an offer

Run a sample cancel session: play a subscriber, pick a reason, type a sentence, and see the offer, the wording and the Stripe change that come back.

90 seconds, no sign-up. You play the subscriber; the AI answers, and “Cancel anyway” is always one click away.

Related

Sources, read 4 Nov 2026