Ask why they are leaving, then offer the one thing that might keep them
Someone who cancels because the price stings needs a different answer than someone who has not opened the product in a month. Cancel Flow puts a short exit survey between your "Cancel subscription" button and Stripe, offers a discount, a pause, or a human matched to the reason, cancels cleanly at period end if they still want out, and shows you the save rate for each reason. Try the customer's view below, then run the open-source server with your own Stripe key. No account with us, no monthly fee.
What your customer would see
Decision:
What is a save worth to you?
Your numbers only: this page does not know your save rate and does not promise one. Measure it with the server's /v1/summary.
Subscribers kept per month: - · recurring revenue kept: -
Run it yourself
git clone https://github.com/Duncan-Haywood/fp-monorepo && cd fp-monorepo/ventures/cancel-flow
STRIPE_SECRET_KEY=rk_live_... STRIPE_WEBHOOK_SECRET=whsec_... \
ADMIN_KEY=$(openssl rand -hex 16) LINK_SECRET=$(openssl rand -hex 16) \
PUBLIC_URL=https://cancel.example.com COMPANY_NAME=Acme \
node server.mjs # DRY_RUN=true until you set DRY_RUN=false
# from your app, when a signed-in customer clicks "Cancel subscription":
curl -s -X POST $PUBLIC_URL/v1/links -H "authorization: Bearer $ADMIN_KEY" \
-d '{"subscription":"sub_..."}' # {"url": ".../c/<signed link>"} -> redirect them
Point a Stripe webhook at /webhook/stripe for customer.subscription.deleted so true churn is recorded. One-click Render deploy and Docker are in the README.
Related tools
Lose customers to failed cards instead? Dunning Engine recovers them, and MRR Pulse shows what churn costs you each month. To see who has already left, run your export through the Stripe Churn Cohort Analyzer; to see who is about to, Churn Radar scores accounts from your own usage events.
Questions
Why not use the Stripe customer portal's cancellation survey?
Stripe's portal can collect a cancellation reason and offer a retention coupon, and for many businesses that is enough. Cancel Flow is for teams that want a different offer per reason (a pause for people who are not using the product, a discount for price objections), a cooldown so nobody farms discounts, and reasons plus save rate in one place you control.
Does it work with annual plans?
Yes. Annual subscribers get a one-time discount on the next renewal instead of a months-long coupon, and monthly equivalents are used for the revenue estimates.
Is it safe to try?
It starts in dry-run mode: the whole flow works and every answer is recorded, but no subscription is changed until you set DRY_RUN=false. Try it with a Stripe test-mode key first.
Can a customer cancel someone else's subscription?
Not through this service. Each link is signed by your server for one subscription, expires (default one hour), and the server checks with Stripe that the subscription belongs to the customer named in the link before changing anything.
Where does my Stripe key live?
In the environment of the server you deploy in your own account. The author runs nothing in between and never sees your key or your customers.