Hiring guide
SaaS retention cohorts: which customers explain the change?
By CFO Index · Published
Recurring revenue can grow while a group of customers gets smaller. Before calling retention healthy, ask your CFO to identify the customers in the comparison and separate expansion from losses. A cohort report should let you trace the movement back to accounts, not just present a percentage.
Freeze the group before calculating retention
Choose a customer cohort and its starting point. For example, track customers that first became paying subscribers in a particular month, then compare their position at the same elapsed age. Store the original customer IDs, start date and starting recurring revenue. Do not admit later new customers into that cohort. Decide how merged accounts, reactivations and multiple subscriptions will be handled before reviewing results. A count of subscriptions is not automatically a count of customers.
Record the billing system's definition
Stripe's subscription analytics assigns cohorts by when subscribers first generate positive MRR. Its revenue-retention view includes expansion and can exceed 100%. Those are product definitions, not a universal reporting policy. Retain your export settings and explain any differences in the management report. In particular, check discounts, unpaid subscriptions, currencies and usage-based charges. Keep a definition change separate from customer behaviour; otherwise two identically labelled charts may not measure the same thing.
Build a bridge for the original customers only
Hypothetical illustration: a fixed cohort starts with 20 customers and €20,000 of monthly recurring revenue. During the next comparison interval, two customers leave, other customers downgrade and some expand. All figures below use one currency, unchanged definitions and no reactivations. They are invented inputs, not SaaS benchmarks.
| Movement | MRR effect | What to trace |
|---|---|---|
| Starting cohort | 20,000 | 20 original customer IDs |
| Expansion | 4,000 | Upgrades within those original IDs |
| Contraction | -1,000 | Downgrades within those original IDs |
| Churn | -2,000 | Two original customers leave |
| Closing cohort | 21,000 | 18 remaining original customers |
| New customers outside the cohort | 3,000 | Exclude from cohort retention |
Read three results rather than one attractive number
For this example, net revenue retention is €21,000 / €20,000 = 105%. Gross revenue retention, defined here without expansion, is (€20,000 − €1,000 − €2,000) / €20,000 = 85%. Customer retention is 18 / 20 = 90%. The cohort generated more recurring revenue overall but lost customers and recurring revenue before expansion. Adding the separate €3,000 of new business would produce 120%, not the cohort's 105%; that calculation answers a different question. These are recurring-revenue measures, not cash collection or recognised accounting revenue.
Compare cohorts at the same age
Compare month three with month three, not a twelve-month-old cohort with one that started last month. Leave future cells blank; an unobserved period is not zero retention. Show the starting customer count and recurring revenue beside each percentage. A small cohort can move sharply when one account changes. For a combined retention figure across disjoint cohorts over a common comparable interval, divide the summed closing amount by the summed starting amount; do not take an unweighted average of their percentages.
Separate the explanation from the proposed remedy
Ask which accounts explain most of the loss and expansion. Then request evidence from the commercial or customer-success owner: cancellation reason, product change, discount expiry or contract amendment. Revenue movement alone does not establish why a customer left. If expansion is concentrated in one account, show the result without that expansion as a sensitivity, not as a revised actual. Give any proposed intervention an owner and a review date rather than promising a retention improvement from the chart.
Use this as a bounded CFO assignment
Request a definition note, fixed membership file, customer-level movement bridge and same-age cohort table for the agreed periods. Test a new customer, a downgrade, a cancellation and a reactivation against the written rules. Have another person reproduce one cohort from the source export and reconcile population totals. Accept the report only when missing links and definition limitations are visible. The useful outcome is an explainable customer pattern that supports a decision, not another dashboard tile.