Stayput / Guides

Guide · facts checked 4 Nov 2026

How to reduce SaaS churn with a cancel flow

A cancel flow is the page between a customer clicking Cancel and the cancellation going through. It asks why, makes at most one offer that fits the reason, and always lets the customer leave. It reduces churn only for the customers who would have left over something you can change, and you can only tell how many by comparing against a holdout.

What a cancel flow does, in order

  1. The customer clicks Cancel. In Stripe, that is the customer portal's cancel button or your own page.
  2. You ask why. A short list of reasons plus a free-text box. Stripe's portal has 8 preset reasons and a free-text field for Other.
  3. You make one offer that fits the reason, or none.
  4. The customer decides. Accept, or press Cancel anyway.
  5. You record what happened, so next month's decisions have data behind them.

That is the whole mechanism. Everything else in this guide is how to make each step honest and measurable.

Part 1: ask for the reason

Every offer depends on the reason. Without it you are guessing what to offer. Keep the list short, read the free text, and track both weekly. The cancel reasons guide shows where to find them in Stripe and how to count them.

Part 2: make one fitting offer

A pause for someone who is not using the product. A time-limited discount or a cheaper plan for someone who says the price is too high. Nothing for someone leaving over a bug. The pause, discount and downgrade guide lays out what each offer costs and how Stripe applies it.

Set the limits before you ship: the deepest discount, the longest pause, who gets no offer. The offer is yours, so the limits are too.

Part 3: let them leave

A “Cancel anyway” button on every screen, and cancellation that works in a click or two. A flow that hides the exit costs you trust and may break consumer rules in your market; a flow that offers a fair alternative and then respects the answer does neither.

Part 4: apply the outcome in Stripe

An accepted discount is a coupon. An accepted downgrade is a plan change scheduled at period end. An accepted pause is a pause or pause_collection. A refused offer is cancel_at_period_end, so the customer keeps what they paid for. Your handler for those events is covered, with tested code, in the Stripe cancel flow guide.

Part 5: measure honestly

Stripe counts a save when a customer accepts an offer and is still subscribed 7 days later. That figure includes customers who would have stayed anyway. A holdout group that sees no offer shows the difference. The holdout guide has the arithmetic and a calculator that runs in your browser.

Do it yourself, use Stripe, or buy

Stripe's retention rules cover fixed offers by reason, tenure and spend. A flow you build covers anything you want to write. A vendor covers the work for a fee. The build or buy guide has the dated prices and a break-even table.

Where Stayput fits

Stayput is a cancel flow for Stripe SaaS that decides each subscriber's offer, wording and timing from the reason they give and the words they type, inside the limits you set. You pay a share of the first renewal a save produces, and nothing in a month with no saves. You can watch it decide in a 90-second sample session before you connect anything.

Where to start this week

  1. Turn on the cancellation reasons in the Stripe customer portal if you have not.
  2. Read the last 30 cancellations and their reasons.
  3. Pick the biggest reason and write one offer and one limit.
  4. Hold out one in ten attempts from seeing it, and compare after a quarter.

See a cancel flow decide in 90 seconds

Run a sample cancel session: play the subscriber, give a reason, and watch the offer, the wording and the Stripe change 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