Absolute zero over a meaningful period is rare enough that the first hypothesis should always be a data artifact rather than an achievement. Six mechanisms produce it, only one of them is good news, and each leaves a distinctive trace in the export.
TL;DR: Zero churn over a period is usually a data artifact rather than a retention achievement. Here are the six mechanisms that produce it, and how to check each from the raw export.
This claim is often made in complete sincerity by someone reading a dashboard filter that excludes exactly the rows they need. Cancelled subscriptions are frequently hidden by default; failed payments sit in a dunning state that is neither active nor cancelled; and a book that is mostly annual genuinely has very few cancellation opportunities in any six-month window. The seller is describing what their screen shows.
Four mechanisms account for most of the gap between this claim and what the raw rows show. They are not mutually exclusive and they compound.
The most common cause by far. If the export was generated with an active-only filter, churn is definitionally zero. Check whether any row has a cancellation date at all; if none do across a two-year file, the filter is the finding.
An account that has not paid for four months but has not been formally cancelled is churn in every economic sense and is not cancelled in any data sense. Count subscriptions whose last successful payment is more than two cycles old.
An annual-heavy book has few opportunities to churn in any given six months. Zero churn in a window with no renewals in it is arithmetic, not retention.
Accounts still billing with no meaningful usage are revenue that will disappear at the next review, price change or expense audit. They are indistinguishable from healthy revenue in a billing export and are the reason usage data is worth asking for.
Internal accounts, lifetime deals and friends-and-family comps never churn and never generate cash. They inflate the base and suppress every rate computed against it.
Where a product offers a pause or a free tier, departures land as a status change rather than a cancellation. Economically they are gone; in the export they are still there.
Every step below runs on a subscription-level export in a spreadsheet. None of it needs access to the seller's live billing account, which matters, because as a buyer you will not get one.
These are the thresholds we use in our own reports. They are working thresholds rather than industry standards, and the right line for a given deal depends on contract length, tenure and how transferable the customer relationships are.
| What you find | Verdict | What to do about it |
|---|---|---|
| Export contains cancellations, dunning under 2% of MRR, renewals did occur in the window | Green | Remarkable and apparently real. Verify with usage data if any exists, then credit it. |
| No cancelled rows anywhere in a 24-month export | Red | This is a filtered export, not a retention record. Request a complete one before doing any further analysis. |
| Dunning and past-due above 5% of reported MRR | Price it in | Churn that has happened and not been recorded. Deduct it from MRR before you value anything. |
| Fewer than 10% of subscriptions had a renewal in the window | Investigate | Zero churn is a property of the calendar. Reassess after the next renewal cohort. |
| Paying accounts with no 90-day activity above 10% | Price it in | Zombie MRR. It will not survive a price change, a card expiry or the customer's next expense review. |
Ask for these before the LOI. After the LOI you are renegotiating rather than negotiating, and a seller who will not produce subscription-level rows has told you something useful either way.
Illustrative. The export shows 412 active subscriptions and no cancellations in six months. It also contains no cancellation dates at all across twenty-six months, which resolves the whole question: the file was generated active-only. A complete re-export shows 2.9% monthly churn. Separately, 31 of the 412 subscriptions last paid more than three months ago and sit in dunning, which is 7% of reported MRR that has economically churned and is still being counted. And 44 accounts have not logged in for ninety days. The true starting MRR is roughly 12% below the reported figure before a single churn calculation is run.
This claim is worth taking seriously precisely because it is usually a filter rather than a fiction, which means it is fixable in one email. What is not fixable by re-export is the second half: dunning revenue and zombie accounts have to be deducted from MRR before you apply any multiple, because they will not be there in ninety days. That deduction is often larger than the entire churn adjustment.
The relevant tool on this site is the free zombie MRR detector, which runs the arithmetic above on a file you paste in. The full method is documented in the 5-risk buyer-side method and the due-diligence checklist.
Every check on this page can be run by hand in a spreadsheet, and if you have the time you should. If you would rather not: send us the target's subscription export and we run the full human-reviewed analysis — logo churn, revenue churn, customer concentration, annual-plan decay, zombie MRR and an A–F revenue-quality grade. The free Starter tier covers one CSV per month, which is enough to check a single deal.
See a sample report → · Get the free 23-point checklist →
Over a short window with a small, annual, high-touch customer base, yes. Over six months with a monthly book, it is nearly always a data artifact — most often an export filtered to active subscriptions only, or failed payments sitting in dunning rather than being recorded as cancellations.
Revenue from accounts that are still being billed but no longer use the product. It looks identical to healthy revenue in a billing export, and it disappears at the next price change, card expiry or expense review. Detecting it needs a usage or login signal alongside the billing data, which is why that signal is worth asking for.
Count rows with a cancellation date. A genuine multi-year export from any real business contains many. Zero cancellation dates across two years means the export was generated with an active-only filter, and no analysis you run on it will be meaningful until you have a complete file.