Back to Blog

Involuntary churn on Stripe: how much you're losing and how to recover it

20–40% of SaaS churn on Stripe is a card that failed, not a decision. How to size it, and the recovery playbook: retry windows, three emails, an in-app banner.

Posted by

A life ring thrown to a credit card sinking in waves

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.

To size yours on Stripe: count the subscriptions that ended in the last 90 days because the final retry failed (Stripe marks these with a cancellation reason of payment_failed), and multiply by their MRR. At $4k MRR, one or two of every six losses is usually a card — $600–1,200 a year that nobody decided to spend elsewhere.

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.

Involuntary churn on Stripe: how much you're losing and how to recover it