Guide
What failed payments cost a small SaaS at ten MRR levels, from published benchmarks
Involuntary churn is often quoted as 20 to 40% of all churn. This table converts that into dollars at ten revenue levels, with the assumptions listed.
The assumptions
- Failed payments run about 9% of MRR each month. Baremetrics' recovery benchmarks give a range of 4% to 9%; this table takes the top of it, so halve the numbers if your customers are mostly businesses on corporate cards.
- Stripe's Smart Retries alone recover about 51% of the failed amount. Retries plus a three-to-four email sequence recover about 70%, from Churnkey's involuntary-churn data.
- So the sequence is worth about 19 points of the failed amount, every month.
The table
| MRR | Fails each month (~9%) | Recovered by retries only (51%) | Recovered with a sequence (70%) | Left on the table without a sequence |
|---|---|---|---|---|
| $2,000 | $180 | $92 | $126 | $34 / mo |
| $5,000 | $450 | $230 | $315 | $86 / mo |
| $10,000 | $900 | $459 | $630 | $171 / mo |
| $20,000 | $1,800 | $918 | $1,260 | $342 / mo |
| $35,000 | $3,150 | $1,607 | $2,205 | $599 / mo |
| $50,000 | $4,500 | $2,295 | $3,150 | $855 / mo |
| $75,000 | $6,750 | $3,443 | $4,725 | $1,283 / mo |
| $100,000 | $9,000 | $4,590 | $6,300 | $1,710 / mo |
| $150,000 | $13,500 | $6,885 | $9,450 | $2,565 / mo |
| $200,000 | $18,000 | $9,180 | $12,600 | $3,420 / mo |
Three things the table hides
- At $10k MRR the sequence is worth about $2,000 a year. At $50k it is over $10,000. That is the budget for whatever you use to do it, and it is why a $179 one-time kit and a $150-a-month tool are both rational at different sizes.
- Annual plans are worse than they look. Recurly's data puts recovery on failed annual invoices at 23% against 53% for monthly, because one failure is a whole year of revenue and the window to fix it is the same. If a third of your revenue is annual, weight the table accordingly, and get an expiring-card warning in place before anything else.
- For some cards, Stripe never retries at all. Depending on the issuing bank and country,
next_payment_attemptcomes backnullon the first failure. For those customers the "retries only" column is zero.
What moves the number
From everything in the sources and everything we built: retries branched by decline code, an email sequence with a fresh card-update link in every message, a re-check before every send so nobody who paid gets chased, and one record per case so you can see why customers slip. That is what RevGuard is, as a one-time purchase that runs on your machine. The decline-code part is free on GitHub, so you can start with the piece that costs nothing.
Sources: Baremetrics recovery benchmarks, Churnkey involuntary churn benchmarks, Recurly churn benchmarks, Stripe Smart Retries documentation.