Cancellation survey best practices
A good cancellation survey, sometimes called a churn survey, asks one required question about why the customer is leaving, offers four to six scannable reasons with room to say more, and is shown at whichever moment matches what you plan to do with the answer.
Five rules that matter
Ask one required question, not five
A single required multiple-choice question, "What is your main reason for cancelling?", plus one optional open-text field, captures almost all of the signal. Every extra required question is another chance for someone to abandon the flow, and the person answering it has already decided to leave.
Keep the reason list short and scannable
Start with four to six options and cap it around eight to ten. Refine the list from what people actually type into the open field, rather than from what you imagine they might pick.
Ask for more only where the detail matters
A short, optional text box straight after the answers you can act on gets sharper replies than one generic box at the end. After "Too expensive", ask what they would pay. After "Missing a feature", ask which one. Leave the box off answers where you would do nothing with the reply.
Time the survey to its purpose, and be honest that the two conflict
If the answer selects a retention offer, ask at cancel intent, because you cannot branch an offer on an answer you do not have yet. If you want pure exit research with no offer attached, ask after the cancellation is confirmed, where people answer more freely because nothing is riding on it. Both are correct for their own purpose. There is no single right moment, so pick the one that matches what you will do with the answer.
Act on the results, or do not collect them
Branch the offer on the reason: price gets a discount, too busy or temporary gets a pause, wrong plan gets a plan change, and a missing feature gets a roadmap note and a way to reach you. Then report save rate by reason, so the survey drives a decision instead of filling a dashboard.
A survey you can copy
This is the whole thing. One required question, six options, a short follow-up on the three answers where the detail is worth having, and one optional field at the end. If you are not sure where to start, start here and let the written answers tell you which option is missing.
Required: What is your main reason for cancelling?
- Too expensive
Optional: What would you pay?
- Not using it enough
- Missing a feature I need
Optional: Which feature?
- Only needed it temporarily
- Switching to another tool
- Something else
Optional: Tell us more
Optional: Anything else you would want us to know?Why one question
Every question you add costs you completions, and the person answering has already decided to leave. There is no goodwill left to spend on a second page of questions, and nothing you learn from question four will be worth the saves you lost getting there. One required question, optional text where it helps, and nothing more.
Building one
Any tool that can show a question at the cancel button will do the job. If you bill on Stripe, this is how it works in AcornRetain.
Write it
Write one multiple-choice question and its answers in the dashboard. Each answer picks its own offers, so a price answer can get a discount from a coupon you already made in Stripe, a break can get a pause, and someone who needs less can get a plan change. Add a text box after any answer, and a free-text step at the end if you want one. With our snippet, the survey opens in place when a subscriber clicks cancel in your app. With no code, your cancel links go to a cancel page we host, where the subscriber confirms their email first. Either way, an accepted offer is applied to their Stripe subscription for you.
Read it back
Every answer is kept, with anything the subscriber typed. The dashboard shows your top cancel reasons, the session list has a Reason column you can filter by, and each session opens to the answer and the text. The Answers page lists every written answer in a date range, which is the quickest way to do the weekly read. Every session exports to CSV with its answer and text, Slack alerts carry the answer as each session ends, and a documented webhook sends every answer to your own tools.
With a cancel button in your own app, it needs a server that signs the Stripe customer id. With no server, point your cancel links at a cancel page we host instead. The setup guide covers the whole path, and Test mode is free and unlimited, so you can run the survey end to end before a live subscriber sees it.
This is one tactic among several. The guide to reducing churn covers the rest.
Questions people ask
- What questions should a cancellation survey ask?
- One required question is enough: "What is your main reason for cancelling?" with four to six scannable options, plus optional text for whatever the options miss, either a short box after the answers where detail matters or one open field at the end. Every extra required question costs you completions and saves, and the written text will tell you which options to add next, so start narrow and let the real answers widen it.
- When should you show a cancellation survey?
- It depends on what the survey is for. If the answer selects a retention offer, ask at the moment of cancel intent, because you cannot branch an offer on an answer you do not have yet. If you only want honest exit research and no offer is attached, ask after the cancellation is confirmed, where people answer more freely. The two goals point to different moments and there is no single right one.
- How do you read cancellation survey results?
- Count the answers by reason every month, and read the written text every week. The counts tell you which reason is growing; the text tells you what to change, because "too expensive" means something different from one customer to the next. Act on the biggest reason, then check next month whether its share went down. A survey nobody reads costs you completions and changes nothing.