How Much MRR Is Your Stripe Account Losing to Failed Payments?
A walkthrough of the math behind involuntary churn for SaaS on Stripe, with sourced numbers, a working calculator, and the limits of those benchmarks for your specific account.
I'm Yarin. I'm the solo founder of RecoverStack, which means I have a vested interest in convincing operators that they're losing more MRR to failed payments than they realize. I want to be careful about that bias up front, because the cleanest version of this question doesn't need me to oversell it - the honest math is plenty.
This is one of a series I'm writing while building RecoverStack. Two companions are already up: the decline-codes guide is the technical deep-dive on what each Stripe failure code means and how I route them in the engine, and the Smart Retries comparison, on when Stripe's built-in retry is enough and when it isn't. This post is the financial framing that sits underneath both.
The number nobody likes to publish
Let me start with the headline number: The common SaaS estimate for what an average subscription business loses to involuntary churn is in the 5%-10% of MRR per month range.
The clearest public anchor for it is Baremetrics' involuntary-churn analysis, which puts average involuntary churn at around 9% of MRR. That sits toward the upper end of the 5% to 10% band, which is why I treat the band as a realistic spread rather than a worst case.
I want to be careful here: this is industry data, not my own measurements. I currently have zero customer recovery data of my own to compare these against. Once cohort customers are running RecoverStack in production, I'll publish the actual numbers I see at recoverstack.dev/metrics and we can decide how representative the 5% to 10% band turns out to be.
What "losing" actually means
There's a definitional question worth being precise about before we start running the numbers, because operators conflate three different things:
-
Failure rate is the percentage of charge attempts that fail. If you tried to charge 1,000 subscriptions this month and 70 of them failed, that's a 7% failure rate. This is the easy one to measure: it's in your Stripe dashboard under Billing → Revenue recovery, in the Recovery analytics view, which shows your subscription failure rate, recovery rate, and recent failed payments.
-
Recovery rate is the percentage of failed charges that are eventually collected. If 70 failed and 40 of them were recovered through retries, customer emails, or whatever else, that's 40 / 70 * 100 ≈ 57% recovery rate.
-
Net loss rate is the failure rate times one-minus-the-recovery-rate. With a 7% failure rate and a 57% recovery rate, you're losing 3% of MRR per month after recovery effort. This is the number that actually shows up as missed revenue in your books.
The 5% to 10% number I cited above is failure rate, not the net loss rate. Whether your actual revenue loss is 5% to 10% or much smaller depends entirely on what your recovery rate looks like. An operator with a 50% recovery rate is netting around 3% loss. An operator with a 0% recovery rate (no dunning, no Smart Retries) is netting close to the full 7%.
This matters a lot for the buy-vs-build calculation. Stripe's Billing page reports that, as of 2026, businesses using Stripe recover 55% of failed payments on average (with $8.2B in failed payments recovered in 2025). That's an all-Stripe-users average across its built-in recovery tools, not a per-decline-code figure. If a tool moves your recovery rate from around that 55% to a tuned 75%, you're reducing your net loss rate by 20 percentage points of your failure rate. On a 7% failure rate, that's a 1.4 percentage-point reduction in net MRR loss. On a $50K MRR account, that's about $700 a month, or $8,400 a year.
The math, with working examples
Here's the formula:
net_loss_rate = failure_rate x (1 - recovery_rate)
monthly_loss = MRR x net_loss_rate
annual_loss = monthly_loss x 12
And here are the numbers across a range of MRR levels, assuming a 7% failure rate (a conservative figure toward the middle of the band above) and two recovery rate anchors that come from publicly cited data.
| MRR | Stock Stripe toolkit (~55% recovery, Stripe's published aggregate) annual loss | Layered top-performer recovery (~75% recovery) annual loss | Annual gain from stock to top-performer |
|---|---|---|---|
| $25,000 | $9,450 | $5,250 | $4,200 |
| $50,000 | $18,900 | $10,500 | $8,400 |
| $100,000 | $37,800 | $21,000 | $16,800 |
| $250,000 | $94,500 | $52,500 | $42,000 |
| $500,000 | $189,000 | $105,000 | $84,000 |
The recovery rate anchors in this table:
- 55% (stock Stripe toolkit) is my approximation of the stock-toolkit baseline using Stripe's published all-users average. Stripe Billing reports 55% recovery across all its recovery tools combined (Smart Retries plus the automatic card updater plus the basic failed-payment email), but it publishes that as an average across all Stripe users, not as a specific "only the stock features on" figure, and it doesn't break it down by individual tool or by decline code. So I'm borrowing the all-users number as a stand-in for an operator who has the standard Stripe features turned on and not much else. Treat it as a reasonable approximation, not a measured stock-toolkit-only rate.
- 75% (layered top performer) sits toward the lower end of the 70 to 85% range that Baremetrics' analysis describes for accounts running decline-code-aware retries, multi-step email dunning, and the automatic card updater in coordination. I'm using the lower-end number deliberately because the upper-80s figures in that range come from tuned operators with years of iteration, which doesn't match most early-cohort accounts. The "your account will probably land somewhere in between" framing is the honest one here.
Want to plug in your own numbers? The ROI calculator on the homepage takes your MRR and gives you a per-account estimate based on similar industry benchmarks.
Why these numbers feel high
If you do try out the ROI calculator, your initial reaction might be that the numbers just couldn't be right. A $50K MRR business losing $25K a year? That's a 4% drag on revenue from one cause - a really meaningful chunk.
A few things that helped me make peace with the numbers being real:
Most of the loss is invisible: A failed payment doesn't make a noise in your dashboard the way a refund does. There's no email from a frustrated customer saying "my payment failed." It just quietly doesn't arrive, the customer's access gets revoked at some point, they don't reactivate, and the loss shows up as "churn" in your monthly report. The line between "voluntary churn" and "involuntary churn" gets blurred in the metrics most operators look at.
Retries succeed often enough to feel okay: Stripe's default retries do recover some payments, and operators see those recoveries in the dashboard. The failures that didn't recover are silent. That's the classic survivorship bias at play: you see the wins, not the losses.
The compounding effect is large: A customer who churns involuntarily at month 6 of what would have been a 24-month relationship represents 18 months of forfeited future revenue. That doesn't appear in the "loss" column above at all, which only counts the immediate missed payment. The LTV impact is on top, and it's usually pretty big.
You already paid to acquire that customer: Every dollar of CAC spent on a customer who churns involuntarily is partially wasted. If your blended CAC is $200 and your involuntary churn rate is 2% per month, then for every 50 customers, about one churns involuntarily each month, and that customer's $200 of CAC is partly wasted on top of the missed MRR.
Add all that up and the "feels high" number probably understates it.
What the recovery rate depends on
A fair question is whether the 70 to 85% top-performer range is realistic for your specific business. The honest answer is "the upper half of that range usually isn't, and the lower half might be, depending on a few things." Here's what those things are:
Decline-code mix: An account that's heavy on expired_card failures will have a different recovery profile than one that's heavy on card_declined. A quick precision note, since a technical reader will catch it: card_declined is the top-level error code Stripe returns, the parent that wraps the granular decline_code reasons like insufficient_funds and expired_card, so it sits a level up from those rather than being a sibling of them. The card-update codes (expired or reissued cards) are hard declines Stripe won't retry at all, so an email-first flow that sends the customer a card-update link is the only path that recovers them, not a stylistic choice to skip retries. I expect those to recover well once the card-update email lands, since the fix is just getting the customer to update their card, but I don't have my own measured number to put on it yet. The bank-block codes recover with a small number of carefully timed retries + dunning. Per-decline-code retry routing like that is RecoverStack's layer on top of Stripe, not something Stripe lets you configure per code natively.
Geography: US customer bases recover better than the global average because Stripe's retry timing is well-calibrated for US payment patterns. International customer bases (especially Indian and Brazilian) have specific recovery patterns that need different handling.
Customer tenure: Customers who have been on your account for 12+ months recover at noticeably higher rates than month-1 customers, because they're more invested in the product. A B2B SaaS with long average tenure will see a higher recovery rate than a B2C tool with rapid churn.
Whether you have an automatic card updater: Stripe's card updater catches not just card reissues but also expirations and account changes across Visa, Mastercard, Amex, and Discover, pulling the new card details from participating banks. Keep it on. Operators who don't have it enabled are leaving easy recovery on the table, and since Stripe doesn't expose its status over the API, it's on you to make sure it's switched on in your Stripe settings.
Email deliverability: Dunning emails with poor deliverability recover nothing. Today RecoverStack sends them with your branding but from its own verified domain, so that side of deliverability is on me to keep healthy. The roadmap includes sending from your own domain as a verified sender, and once that ships your DKIM and SPF records start to matter, so RecoverStack checks that your sending domain is configured when you connect. It's a real input to your recovery rate either way.
If you want to know what your specific account looks like on these dimensions, the free Stripe audit gives you a one-page report on your decline-code mix, geography, and recoverable-revenue estimate.
What I'm still figuring out
A few things I'm uncertain about and that the cohort will teach me.
Whether the upper-half top-performer range is realistic for the small-MRR end of the cohort: Most of the public top-end benchmarks come from operators with $250K-plus MRR who have invested in fine-tuning. A $25K MRR operator who turns RecoverStack on and walks away might land near the stock-toolkit 55% anchor rather than the layered 70%-85% range. I'll publish actual recovery rates by tier as the data accumulates.
Whether the LTV impact actually compounds the way I think it does: I've been assuming that customers who churn involuntarily would have stayed roughly as long as customers who don't, but that might be wrong. It's possible that customers whose payments fail are also customers who are, emotionally, already on their way out, and the failed payment is a triggering event rather than a structural cause. If cohort data suggests that, the LTV-impact framing in this post is overblown and I'll update it.
Whether the "stock Stripe toolkit = 55% recovery" anchor is right for accounts that have only some of the stock features enabled: Stripe's published 55% is an average across all its users, so using it as a stock-toolkit baseline already involves some approximation. An account with only Smart Retries on and the card updater off probably lands below that 55%. I'll see what the cohort numbers say.
I'll keep this post updated as I learn more.
How to use this post
Three concrete things you can do with the math above:
1. Plug your MRR into the ROI calculator: It uses similar industry-anchored estimates to give you a per-account projection. If the numbers it shows you feel high, that's exactly the point. The 5%-10% failure rate band is real and the typical recovery rate gap is real.
2. Run the free Stripe audit: This gives you account-specific numbers instead of industry benchmarks. The report covers your actual failed-payment rate, your actual top decline codes, and a conservative estimate of what's recoverable. Free, read-only Stripe access, audits are emailed in about 10 minutes from submitting the form.
3. Read the decline-codes guide to understand what's driving the loss: The financial framing in this post is the "why bother", the decline-codes guide is the "here's what to do about it."
If you want to argue with my numbers, please do! I would much rather be corrected on a public post than discover the error after launch. Reply to any RecoverStack email or hit me at [email protected].
About the author. I'm Yarin Goldstein. 24, based in Israel, building RecoverStack solo as my first real business after 5 years of professional dev. RecoverStack is flat-fee dunning for bootstrapped Stripe SaaS, and the founding cohort is free through June 2026. The full story is at /about. The waitlist (40% off for life) is at /early-access.