Blog · Board and management reporting · Software
Rank recorded SaaS cancellation reasons by lost ARR, tenure and product usage. Build a reproducible spreadsheet breakdown, reconcile the losses and separate recorded explanations from evidence of a cause.
SaaS churn reasons become useful when recorded cancellation explanations are tied to lost ARR, customer tenure and usage before departure. Rank the revenue exposure and the number of customers separately, keep missing reasons visible, and use the result to choose what to investigate. A cancellation code records an explanation; it does not prove a cause.
Use subscriptions that actually ended during the reporting month. A request submitted in July for an August termination belongs in August's realized loss table. Keep requests for future cancellations in a separate follow-up list.
Agree on a short dictionary before grouping the records: Price, Features, No need, Service, Payment and Unknown, for example. Preserve the original response alongside the mapped code. A comment about a missing integration should remain available for review even when its reporting group is Features.
There is a practical reason to inspect the collection method. Stripe's cancellation documentation lists selectable explanations including expense, features and reduced need, with optional text for Other. A menu choice is different evidence from a documented customer interview. Preserve the evidence type and collection date so they can be compared honestly.
Give each loss one primary reason. Keep secondary tags separately; otherwise one departed customer can contribute its whole ARR to several reasons. For the overall loss definition, use the churn glossary; this workflow concerns the evidence behind the losses.
For a fictional US SaaS company, all eight subscriptions below ended in July 2026. Each belongs to a different customer. MRR is the contracted recurring amount immediately before termination; exclude one-time services, taxes and variable usage charges from this example.
Tenure is completed months at termination. Active and contracted seats cover the last complete month before the cancellation request, using the same definition of active for every account.
| Account | Primary reason | MRR (USD) | Tenure (months) | Active seats | Contracted seats | Lost ARR (USD) |
|---|---|---|---|---|---|---|
| A101 | Price | 1,000 | 3 | 10 | 50 | 12,000 |
| A102 | Price | 500 | 4 | 5 | 25 | 6,000 |
| A103 | Features | 3,000 | 18 | 70 | 100 | 36,000 |
| A104 | Features | 2,000 | 12 | 40 | 80 | 24,000 |
| A105 | No need | 1,500 | 24 | 15 | 30 | 18,000 |
| A106 | Unknown | 1,000 | 2 | 8 | 20 | 12,000 |
| A107 | Payment | 500 | 10 | 12 | 20 | 6,000 |
| A108 | Price | 500 | 9 | 15 | 25 | 6,000 |
| Total | 10,000 | 120,000 |
The column order is A through G. In G2, annualize the recurring monthly amount:
=C2*12
Fill down through G9. Add a tenure helper in H2 and a seat-utilization helper in I2, then fill both down:
=IF(D2<6,"Early","Established")
=IF(F2=0,"",E2/F2)
Early means fewer than six completed months; Established means six or more. Format I as a percentage and retain a blank for an invalid zero-seat denominator. These are supplied business rules, not inferred explanations for leaving.
Put each reason in K2:K6. Use L for customer count, M for lost ARR and N for its share of total lost ARR:
=COUNTIF($B$2:$B$9,K2)
=SUMIFS($G$2:$G$9,$B$2:$B$9,K2)
=M2/SUM($G$2:$G$9)
Fill down, then sort by M descending. The Google Sheets SUMIFS documentation describes summing a range against multiple criteria; the same approach also supports the tenure split below. Covirage is not affiliated with Stripe or Google.
| Recorded reason | Customers | Lost ARR (USD) | Share of lost ARR |
|---|---|---|---|
| Features | 2 | 60,000 | 50.0% |
| Price | 3 | 24,000 | 20.0% |
| No need | 1 | 18,000 | 15.0% |
| Unknown | 1 | 12,000 | 10.0% |
| Payment | 1 | 6,000 | 5.0% |
| Total | 8 | 120,000 | 100.0% |
Price leads by customer count, but Features accounts for half the lost ARR: 60,000 / 120,000 = 50.0%. That makes feature-related evidence the larger revenue investigation, without establishing that building a feature would have saved those contracts. Percentages are rounded to one decimal place.
The denominator includes Unknown. Coding coverage is seven known reasons out of eight losses, or 87.5% of customers. By ARR it is (120,000 - 12,000) / 120,000 = 90.0%. Those are different checks, and both should accompany the ranking.
To calculate Early lost ARR for the reason in K2:
=SUMIFS($G$2:$G$9,$B$2:$B$9,K2,$H$2:$H$9,"Early")
Repeat with Established for the other column.
| Reason | Early lost ARR (USD) | Established lost ARR (USD) |
|---|---|---|
| Features | 0 | 60,000 |
| Price | 18,000 | 6,000 |
| No need | 0 | 18,000 |
| Unknown | 12,000 | 0 |
| Payment | 0 | 6,000 |
| Total | 30,000 | 90,000 |
The two early Price accounts each used 20.0% of contracted seats: 10 / 50 and 5 / 25. The established Price account used 15 / 25 = 60.0%. That suggests different interview questions about adoption and value, even though all selected Price.
The seat-utilization workflow explains how to establish a consistent activity window. Do not expand this cancellation-only table into a claim that low usage predicts churn: that would also require comparable retained accounts. Likewise, a tenure group's share of losses is not its churn rate without that group's starting customer or ARR exposure. Use average SaaS churn for the separate benchmark question.
The reason totals must equal the cancellation register: eight lost subscriptions and $120,000 of annualized recurring revenue. The tenure totals must also equal $120,000: $30,000 plus $90,000. Finally, $10,000 of lost MRR multiplied by 12 must equal the same ARR total.
Finance owns that reconciliation and the recurring-revenue policy. Customer success owns reason completeness and supporting notes. Product reviews the Features records; sales and customer success review Price with tenure and usage attached; billing operations reviews Payment. Assign an evidence-gathering action and an owner before proposing a remedy.
Bring your cancellation register, recurring-revenue export and prior usage file with stable subscription IDs and supplied reason codes. Covirage maps the columns, its tools compute and check the breakdowns, and the external AI model explains the results with every figure traced to its rows. Create a free Covirage account, which takes about a minute, then set up your business and bring a sample of your own data.
See Covirage for SaaS teams for the supporting industry context.
Voluntary churn follows a customer's decision to stop subscribing. Involuntary churn follows an unsuccessful payment or another administrative failure without an explicit cancellation decision. Keep these separate in the reason table so payment recovery work does not become a product or pricing recommendation.
Use both. Customer counts show how widespread a recorded issue is, while lost ARR shows its recurring revenue exposure. A reason mentioned by many smaller customers can rank below one reported by a few larger accounts. Neither ranking establishes the reason's underlying cause.
Retain them as Unknown and include their lost ARR in the denominator. Report coding coverage by customer count and revenue. Do not redistribute unknown losses across known reasons, because that assumes customers who did not answer resemble those who did.
No. Low usage can support a question about adoption, but it can also follow an earlier decision to leave or a seasonal business change. Use a fixed period before cancellation and compare similar accounts before deciding what additional customer evidence to collect.