Stripe
- Customer
- Example account
- MRR lost
- $1,290 / month
- Status
- Cancelled
- Cancellation reason
- Not captured
For SaaS that bills on Stripe
ChurnIntel is a Stripe cancellation flow that captures why customers leave, offers a pause, discount, or plan switch to keep them, and ranks each reason by the revenue behind it.
Stripe records who left, and the MRR that left with them. Not why. A missing feature, a price objection, and a bad onboarding are three different fixes.
Stripe
With ChurnIntel
Illustration with sample values, not a real customer record.
They pick a reason. You offer something that matches it. The revenue shows up in the report. Try a reason below.
Capture their reason
We are sad to see you go.
Please tell us why.
Pause, discount, or plan switch
Special offer for you 🎉
We've unlocked an exclusive discount for you.
20% off for 2 months
Applied automatically to upcoming invoices when you accept.
Revenue behind every reason
Top cancellation reason
Too expensive
Revenue impact
$2,940MRR
Sample figures. Your reasons, offers, and who sees each flow are yours to set.
Shipping today. Nothing here is a roadmap item. See the cancellation flow overview.
Ask in the cancel flow, while they are still there.
Answer the reason they gave. Do not discount everyone.
Rank reasons by the MRR behind them.
We change the subscription in Stripe. Your app does not.
One flow for a trial. Another for a $2,000 account. Anyone who matches no rule sees the default.
Two parts. The second needs an engineer. This is a widget in your app, not a hosted cancel page.
About 10 minutes, no engineer
One engineer task, usually under an hour
Add the script once. Call it from the cancel button you already have.
<script src="https://churnintel.io/widget.js"
data-api-key="YOUR_WIDGET_API_KEY" async></script>window.ChurnIntel.showCancelFlow({
subscriptionId: subscription.id,
customerId: subscription.customer,
})We cancel in Stripe and apply the offer. Your old cancel handler can stop.
The work, side by side. No invented hours or dollars.
| Area | Build it in-house | ChurnIntel |
|---|---|---|
| Reason capture | Build the survey, store answers, and redeploy when reasons change | Reasons and free text, edited without a deploy |
| Save offers | Write Stripe logic for coupons, pauses, and plan switches | Four offer types, mapped per reason, applied for you |
| Targeting | A rules engine so a trial and an enterprise account do not see the same offer | Priority flows, with rules on Stripe data and your own |
| Discount abuse | Stop the same customer claiming a coupon on every visit | Offer-once and cooldown rules |
| Revenue reporting | Join survey answers to Stripe MRR, and keep those queries alive | Reasons by lost MRR, accept rate, and CSV export |
| Stripe API changes | Yours to watch and fix | Ours to watch and fix |
Write access to billing, through Stripe Connect OAuth. Here is what that covers.
Ask in your access request. We answer in the reply.
About 10 minutes in ChurnIntel: connect Stripe with OAuth, sync, edit reasons and offers, and publish. An engineer then adds a script tag and calls window.ChurnIntel.showCancelFlow() from your cancel button. Usually under an hour.
Stripe Connect OAuth, with read and write. Write access applies the coupon, pauses collection, switches the price, or cancels. We read products, prices, coupons, subscriptions, and customers. We never request or store card numbers or payment methods.
Yes. In the Stripe dashboard, go to Settings → Authorized applications. That cuts access immediately. There is no disconnect button inside ChurnIntel yet.
Four options, each mapped to a reason: a Stripe coupon, a billing pause, a plan switch, or a handoff to your team. Offer-once caps stop the same customer claiming a discount on every visit.
A customer paying $1,000 a month is not the same loss as one paying $20. Cancellation reasons are ranked by the recurring revenue behind them, not by how often they were picked.
Yes. On confirm, ChurnIntel cancels the subscription in Stripe, immediately or at period end. No retention loop. Your own cancel handler does not have to do it.
Yes. Run several flows with audience rules and priority, matched on plan, billing interval, trial status, subscription age, or price. You can also pass your own attributes. No match uses the default flow.
A person reads it. If it is a fit, we email a sign-in link. No password. If it is not a fit yet, we say why.
Founding partner pilot
A small group of Stripe SaaS teams. You help decide what we build next.
You see the price before it applies.
On your real plans. Not a link to docs.
The people who write the code. Not a queue.
Export responses and comments as CSV.
A fit if you bill on Stripe, see regular cancellations, and can add a script tag this month.
A person reads it
Every request is reviewed by hand.
You get a sign-in link
If it is a fit, we email a link. No password.