MRR churn calculator: how to actually compute involuntary churn
Most MRR churn calculators give you a single number that hides the metric that actually matters: how much of that churn was preventable. A SaaS doing $200,000 MRR with 7% gross churn is not the same as one doing $200,000 MRR with 4% voluntary churn and 3% involuntary churn — the second has roughly $6,000/month of recoverable revenue sitting in failed-card declines that the first does not. Most calculators do not split this. Most spreadsheets people copy from Twitter do not split it either.
What an MRR churn calculator actually needs to measure
The job of an MRR churn calculator is to answer four questions in order: how much MRR did I lose this month, why was it lost, how much of that was recoverable, and how does the trend compare to last quarter. Most tools answer the first question and stop. ChartMogul gets to the second. Baremetrics attempts the third but caps out at a coarse "delinquent vs cancelled" split. ProfitWell's calculator does better on the recoverable cut but bundles voluntary downgrades with cancellations in a way that distorts comparison.
The base formula every calculator should start from:
Gross MRR Churn % = (Lost MRR in period / Starting MRR) × 100
That gives you a slide number. It does not give you anything you can act on. The 800+ Stripe accounts we audit at Omesta show roughly the same pattern: when teams compute a single gross-churn percentage, the conversation goes nowhere. When they split it into the four buckets below, a roadmap appears almost on its own.
The four-bucket split that matters
To get from the slide number to the roadmap, lost MRR has to break down four ways:
1. Voluntary cancellations. The customer logged in and clicked cancel. Sometimes they downgraded a plan. Either way, the intent is clear. 2. Involuntary failures, recoverable. A renewal charge declined — insufficient_funds, expired_card, transient processor errors — and the customer would happily keep paying if the charge eventually goes through. 3. Involuntary failures, dead. The card was cancelled, the account was closed, or the customer's bank fraud-blocked the merchant and refused to whitelist. Recovery rate on this bucket is near zero. 4. Refunds and chargebacks. Money that came in and then went back out, often in a different period from the original charge. Most calculators put this in voluntary churn, which is wrong.
The two involuntary buckets together are what most spreadsheets call "delinquent" or "past due." That label is not granular enough. Inside the involuntary bucket, the recoverable slice and the dead slice behave completely differently — and the ratio between them depends on your customer mix, your billing platform's retry schedule, and your industry vertical.
We see the recoverable-to-dead ratio sit between 60:40 and 85:15 across the customer base. A B2B SaaS with corporate cards skews toward the high end (cards rarely get fully cancelled, just reissued). A consumer membership product skews lower because cancellations and chargebacks happen more freely.
The five gotchas most MRR churn calculators get wrong
1. Counting first-month failures as churn
A new customer signs up, the first charge fails on day one, the calculator counts it as churned MRR even though that MRR never landed in the account. Stripe's own dashboard does this. ChartMogul handles it correctly. If your calculator inflates churn by 0.5-1% in months where signups are heavy, this is usually why.
The fix is to define lost MRR as *revenue that was previously recognised and has now stopped*. If the first charge ever fails, the customer was never active — that is a failed acquisition, not churn.
2. Using the wrong period denominator
Starting MRR vs average MRR vs ending MRR all give different churn percentages on the same data. Most public calculators do not say which they use. The convention worth standardising on is starting MRR — measured on the first day of the period. It is the clearest, the simplest to audit, and it is what most investors expect.
3. Ignoring the retry window
A charge declines on March 28th. The retry succeeds on April 3rd. Did that customer churn in March? Most calculators say yes. The honest answer is no — the MRR was paused, not lost, and counting it as churn inflates March's number while making April look artificially low.
The fix is to lag the churn calculation by your full retry window plus one or two days. If your billing platform retries for 14 days, you cannot accurately compute March's churn until April 15th. This is annoying. It is also the only way to avoid swinging churn metrics that look noisy when they are really just measurement artifacts.
4. Bundling refunds with cancellations
A customer paid in February and got a partial refund in March. The refund hits March's MRR. Most calculators treat it as March churn. Whether that is right depends on what question you are answering — if you want to know how many active customers cancelled in March, refunds are a different category and should not be in the churn bucket at all. If you want to know how much MRR you actually retained, then yes, refunds count.
A defensible approach is to track both: churn excluding refunds (customer-intent metric) and net retention including refunds (revenue-intent metric). Most calculators force you into one or the other.
5. Not separating involuntary by [decline code](/glossary/decline-codes)
This is the gotcha that costs the most money. Inside the involuntary bucket, an insufficient_funds decline is a completely different problem from a do_not_honor decline, which is different again from expired_card. They have different recovery rates, different retry-timing solutions, and different communication patterns. A single "involuntary churn" line item gives you no purchase on the actual fix.
A useful MRR churn calculator should at minimum split involuntary into:
insufficient_funds(timing fix — retry on payday)expired_card(card-update fix — pre-emptive account updater)do_not_honor/generic_decline(retry-pattern fix — wait longer, change retry day-of-week)- Other decline codes (catch-all, usually small)
If you have those numbers, you have a roadmap. If you have a single involuntary number, you have a metric.
A worked example
Take a SaaS at $200,000 MRR with 800 customers and 7% gross monthly churn. That is $14,000 of MRR lost every month.
Without splitting, the slide says "we have a 7% churn problem."
Split into the four buckets, a typical mix looks like:
- Voluntary cancellations: 3.2% ($6,400)
- Involuntary recoverable: 2.4% ($4,800)
- Involuntary dead: 0.7% ($1,400)
- Refunds and chargebacks: 0.7% ($1,400)
Now the conversation is different. The $4,800/month recoverable involuntary slice is what can actually be moved with better retry timing, customer email cadence, and account-updater coverage. Stripe Smart Retries on its baseline 22% recovery would catch about $1,056 of that. A tuned full-stack recovery system — what Omesta runs across 800+ Stripe accounts — gets to 72%, or roughly $3,456 a month.
The difference, $2,400/month, compounds. $28,800 ARR recovered on a $5K/year tool investment is not the kind of math anyone walks away from once they can see the numbers in the right buckets. The reason most teams do not see it is the MRR churn calculator they are using does not show them.
What the popular calculators actually report
A quick honest read on the four most-used MRR churn calculators in the SaaS and DTC space:
ChartMogul. Best in class on the bucketing. Splits delinquent from cancelled, handles refunds separately, supports a custom retry window. The gap: it does not split delinquent by decline code. You see "5 customers are delinquent" but not which ones are insufficient_funds vs expired_card. To get that, you have to cross-reference Stripe's dashboard manually.
Baremetrics. Strong UX, weaker on the recovery split. The "Failed Charges" view groups everything into a single bucket. Good for owners who want a dashboard, less good for finance teams trying to build a recovery roadmap.
ProfitWell. Free to use, includes a dedicated "Recoverable MRR" view that gets the bucketing roughly right. The catch: it is a marketing front-end for Retain, ProfitWell's own recovery product, and the recovery-rate numbers it cites in-product are heavily flattered. We have audited customer accounts where ProfitWell reported 65% recovery while the underlying Stripe data showed closer to 30%. The methodology counts retries that would have succeeded anyway as Retain wins.
Stripe's own dashboard. Stripe gives you raw decline data but no MRR-level rollup. You can build the calculator from Stripe's CSV export and a pivot table — and most finance teams do — but the manual reconciliation is where mistakes creep in.
If you want a deeper read on where the involuntary churn slice actually comes from, our complete Stripe failed payment recovery playbook breaks down the decline-code distribution we see across the customer base and what each code recovers against.
How to compute it from scratch (10 minutes, pivot table)
If you do not want to pay for ChartMogul or Baremetrics yet, you can build a defensible MRR churn calculator from a Stripe CSV export in about ten minutes:
1. Export Charges, Subscriptions, and Refunds for the period. Date range should cover one full month plus the retry window — so for March, export through April 15th. 2. In a pivot, group by subscription ID and compute last_charge_status. Any subscription that was active on March 1st and has last_charge_status = cancelled or unpaid after the retry window is churned MRR. 3. Cross-reference cancelled subscriptions against the cancel_reason field. cancellation_requested is voluntary. payment_failed is involuntary. 4. For the involuntary slice, look up the most recent failure_code on the subscription's last invoice. Group by failure_code to get the decline-code split. 5. Subtract refunds from the period for net retention.
It is not pretty. It works. The two hours a finance lead will spend doing this once and building a Google Sheet template they can rerun monthly is the cheapest path to numbers that actually tell you what to fix.
What to do once you have the number
A clean MRR churn calculator gives you three actions, ranked by the leverage in the underlying number:
If involuntary recoverable is the biggest slice (>50% of total churn): the highest-return fix is retry timing and customer-email copy. This is where Omesta's 72% recovery rate vs Stripe Smart Retries' 22% baseline shows up — 3.2× on the bucket that is silently the largest source of preventable loss for most subscription businesses.
If voluntary cancellations are the biggest slice: the fix is product-side. No amount of recovery automation moves a churn number that is dominated by customers actively choosing to leave. The MRR churn calculator's job here is to flag the situation honestly, not pretend a tool will fix it.
If involuntary dead is unusually high (>20% of involuntary): the fix is upstream. Customer base is skewing toward cards that are getting cancelled outright, which usually means an acquisition-channel quality problem — paid social audiences too cold, free-trial-to-paid conversions on disposable cards, or a vertical where chargebacks run hot.
The point of building the calculator right is not to produce a more accurate number for its own sake. It is to make the lever obvious. A finance lead who sees "$4,800 of $14,000 monthly churn is recoverable" makes a different decision than the one looking at "7% gross churn." Both numbers are true. Only one drives action.
Run a leak scan on your own stack
If you want the bucketed MRR churn calculator without the spreadsheet weekend, Omesta connects to Stripe read-only in 2 minutes and computes the four-bucket split, the decline-code distribution, and the recoverable-revenue projection — free until we recover $1,000 for you. Most teams see an extra $2,000-$8,000/month of recoverable involuntary churn they did not realise was on the table. The scan is honest about which slice is preventable and which is not.
Start the leak scan — free until we recover $1,000 for you.