- Blog
- Cancel flows
What to ask when a customer clicks cancel
One question, one honest offer, and a cancel button that always works. How to build a cancel flow customers don’t resent.
The short version
Ask one question: why are you leaving? Give a short list of real reasons, then show a single offer that fits the reason they picked. Keep “Continue cancelling” visible on every screen, so the customers who stay are the ones who chose to.
The cancel button is the most honest page in your product. Nobody clicks it by accident, and nobody clicks it to browse. It’s the one moment a customer tells you, without being asked, that something isn’t working.
Most teams treat that moment as a door to slam or a door to block. Both waste it. A good cancel flow does something simpler: it listens, and then it answers.
Start with one question#
Ask why they’re leaving, and give them a short list to pick from. Five or six reasons is plenty. Every extra option makes the answer less useful and the screen more tiring.
- Too expensive: the price no longer matches the value they get.
- Not using it enough: the product is fine, their season isn’t.
- Missing a feature: they need something you don’t have yet.
- Switching to another tool: worth knowing which one.
- Technical problems: something broke and nobody fixed it.
- Something else: with a free-text box, and actually read it.
Match the offer to the reason#
The reason is the whole point. A discount answers “too expensive”. It does nothing for “we’re not using it this quarter”, where a pause fits much better. And it’s faintly insulting to someone who hit a bug.
Offers that usually fit
- Too expensive → a time-limited discount, or a smaller plan.
- Not using it enough → a smaller plan, or a short pause if your billing setup supports one.
- Missing a feature → tell them if it’s planned, and offer to email when it ships.
- Technical problems → a direct line to a person, not a coupon.
Never hide the exit#
“Continue cancelling” belongs on every screen of the flow, in plain words. If the flow can’t load, your normal cancel path should still work. Customers forgive an offer. They don’t forgive a maze.
The customers you keep by making leaving hard are the ones who leave loudest later.
Count only what actually happened#
A customer clicking “Accept offer” is not a save. A save is the discount applied in Stripe, or the pause actually scheduled. Measure the confirmed change, or your retention numbers will drift away from your revenue.
If you’d like to see this flow in action, the demo on the homepage runs the whole thing on sample data.
Common questions
How many questions should a cancel flow ask?
One. Ask why the customer is leaving, then respond to the answer. Extra survey screens lower completion and rarely change what you would offer.
Should every cancelling customer get a discount?
No. Discounts suit customers leaving over price. For low usage a pause usually fits better, and for bugs or missing features a person or a roadmap answer helps more than money.