How to reduce SaaS churn.
Where churn comes from, which customers to save first, the moves that work, and how to tell what actually worked.
Where churn comes from
Churn in a SaaS that bills through Stripe comes from two places: customers who decide to leave, and customers whose payment fails and is never recovered. They need different fixes, so split them before you do anything else. Our guide to voluntary vs involuntary churn shows how to measure each from your own Stripe data.
Voluntary churn rarely arrives as a surprise. It builds in steps: logins fall, seats come off the plan, a downgrade, then the cancel. When customers cancel in Stripe's customer portal with reasons turned on, they pick from a fixed list that includes too expensive, unused, switched service and missing features. Those reasons, totaled in dollars, tell you more than the churn rate does.
Involuntary churn comes from cards that expire, run out of funds or get declined by the bank. The customer often meant to stay. Stripe retries the payment, and when the retries run out the subscription is canceled, marked unpaid, left past due or paused, depending on your settings.
There is a third, quieter source: contraction. A customer who drops from 20 seats to 8 hasn't churned by count, but most of their revenue has. Track revenue churn next to customer churn, or contraction stays invisible.
The common thread is timing. Stripe records churn after it happens. It shows who left, not who is likely to leave next or what to do about it. Reducing churn means working from earlier signals.
Which customers to save first
Save the customers with the most money at risk first: what they pay each month multiplied by how likely they are to leave. Ranking by risk alone fills your week with small accounts. Ranking by revenue alone ignores who is actually slipping.
Example: a $2,400/mo account whose seat count fell two months in a row matters more this week than a $49/mo account that just scheduled a cancel, even though the second is more certain to go.
Within that ranking, the reason sets the urgency. A practical order:
- A cancel is scheduled. The subscription runs until the period ends, so there is a window, and it is closing.
- A payment failed, and Stripe's retries are running or have ended.
- Usage dropped, or the customer is barely using the product.
- Seats or plan were cut, or an annual renewal is 60 or 30 days out with low usage.
Not every at-risk customer deserves the same effort. A valuable customer at risk gets a personal move. A low-value customer on an old price or a forever discount may need repricing more than saving. A low-value customer who is leaving anyway may need nothing more than a light check-in.
See which of your Stripe customers carry the most money at risk right now.
Moves that work
The move that works depends on why the customer is at risk. Match the move to the reason instead of reaching for a discount by reflex.
| Why they're at risk | The move | Avoid |
|---|---|---|
| Usage dropped | A short personal note with one question, then help, or a pause (not on usage-only plans) | A discount on a product they aren't using |
| Price complaint, valuable customer | A pause, a downgrade or a time-limited discount | A discount with no end date |
| Cancel scheduled | A save email the same day, with a pause or plan option | Hiding or delaying the cancel |
| Payment failed, retries ended | A personal card-update note from you | One more automated reminder |
| Hard decline or no card on file | Ask for a new card right away | Waiting on retries that won't run |
| Canceled in the last 90 days | A win-back note, for customers worth keeping | Win-back for every account |
Three habits make these moves work better:
- Write as yourself. A plain note from the founder, with one question, reads like a person rather than a campaign, and the reply tells you the real reason.
- Keep canceling to one step. A save offer can sit next to the cancel, never in front of it.
- Put an end date on every discount. Forever discounts turn into old prices nobody revisits. When you end one, give 30 days' notice.
For failed payments, let Stripe do the first pass. Smart Retries picks the timing of each retry, and Stripe's recommended default is 8 tries within 2 weeks (Stripe docs, checked Oct 18, 2026). By Stripe's own figures, businesses using Stripe recover 55% of failed payments on average, and $8.2B in failed payments was recovered in 2025 (Stripe Billing page, checked Oct 18, 2026). Your job starts where that ends: hard declines that Stripe can't retry without a new card, and valuable customers still unpaid when the retries stop.
For customers who already left, a short note within 90 days is the simplest way to win back churned customers. Send it only to accounts you'd want back, and make restarting easy.
Measure what actually worked
To know whether a save worked, compare the customers you acted on with similar at-risk customers you deliberately left alone. Without that comparison you only know who stayed after your move, not who stayed because of it.
The gap is bigger than it looks. Example: you send check-ins to 20 customers who look at risk, and 17 are still paying 60 days later. Many of them would have stayed with no note at all, so counting all 17 as saves overstates what the notes did.
A fair measure has four parts:
- A comparison group. Before any move is drafted, hold back a share of at-risk customers (10% is a sensible default) and leave them alone. They still get Stripe's own retries and emails.
- A fixed window. Compare churn in both groups over the same 90 days.
- Money tied to invoices. Count what a kept customer pays now, at the discounted price if you gave a discount, and only while they still pay.
- Honest credit. Payments Stripe recovered during its retries were Stripe's work, not yours. Leave them out.
Small companies won't get a precise answer quickly. With a few dozen at-risk customers, show the result as a range and treat it as early until both groups are big enough. A clear "no difference yet" is more useful than a confident number that isn't real.
Churn reduction without a CS team
Without a CS team, churn reduction has to fit into a few hours a week. That means one ranked list, one drafted move per customer, and rules for the moves you would approve every time.
A weekly routine that holds up:
- Check who became at risk since last week, highest money at risk first.
- Approve, edit or skip one move per customer. Skip with a reason, so the next decision is easier.
- Turn repeat moves into rules with limits, such as a card-update note when Stripe's retries end. Keep price changes and large discounts as moves that always ask.
- Once a month, compare the customers you kept with the comparison group.
This is the churn management process North Metric runs for founders on Stripe. Every paying customer gets a 0–100 risk score with up to three reasons, ranked by money at risk. Each one at risk gets a drafted move in your name that you approve, or that runs under rules you set once. The money kept shows as Kept MRR, measured against customers held back, and Stripe's own recoveries are never counted.
Start with the free churn report. It reads your Stripe, changes nothing, and shows money at risk, money leaking to old prices and forever discounts, and the first 5 customers to act on.
Fair questions.Straight answers.
Start with involuntary churn: turn on Stripe's Smart Retries, failed-payment emails and automatic card updates, which run on their own once set. Then spend your own hours on voluntary churn, where a personal move before the cancel is what changes the outcome.