Failed payments are your quietest churn
Up to 40% of SaaS churn is a card that expired, not a decision. The dunning playbook: retry windows, three emails, and an in-app banner.
Posted by
Related reading
Cancel flows without dark patterns
Click-to-cancel rules are coming for retention flows that trap people. Here's how to save customers and stay honest — they're the same thing.
What's a good save rate? Benchmarks for cancel flows
25–40% is the honest range. Here's how that breaks down by reason, what drags it down, and which number you should actually optimise.
Win-back emails that actually bring people back
One well-timed email beats a drip campaign. When to send it, what to offer, and when to leave cancelled customers alone.
Nobody decided to leave
Depending on your customer base, 20–40% of your churn is involuntary: an expired card, a bank's fraud filter, an insufficient balance on billing day. The customer didn't choose to cancel — they often don't know anything happened until your product stops working. This is the easiest churn to fix, because there's no mind to change.
Let the retries run before you email
Stripe's smart retries recover a large share of failures on their own — many declines are transient. Your dunning emails should complement the retry schedule, not race it. A schedule that works:
- Day 0 — a light heads-up: "your payment didn't go through, we'll retry — or fix it now". Helpful, not alarmed.
- Day 3 — retries have likely failed; be direct about what stops working and when.
- Day 7 — final notice with a specific date. Follow through on it: fake deadlines train customers to ignore you.
The link matters more than the copy
The single biggest recovery-rate lever is what the button does. A link to your login page loses half the clickers at the password reset. The button must open a hosted payment-update page directly — no login, no navigation. When Stripe is connected, Churntide's tracked links open a fresh billing-portal session automatically; every click is recorded so you know who tried.
Email is not enough — catch them in-app
Dunning emails go to the address that signed up three years ago; the person using the product every day often never sees them. An in-app banner — "your payment of $49 didn't go through" with an update link — reaches the user at the moment they care, and recovers payments email never could. This is exactly what Churntide's dunning banner does in one script tag: it shows only when that customer genuinely has an open failed payment.
Done properly — retries, three emails, in-app banner, one-click update — recovering 50–70% of failed payments is a realistic target. On most SaaS P&Ls that's several points of ARR for an afternoon of setup.