-
1
Pick the cohort of customers in scope
Start by defining who is in the base. The cohort is every customer that existed at the start of the measurement window and is held constant for the entire calculation. Do not add new logos closed inside the window; new business belongs in gross new ARR, not in retention. Lock the customer list in writing before pulling any numbers so finance and GTM are literally working from the same roster. For most SaaS companies the default window is trailing twelve months, which smooths out seasonality and renewal cycles. If the business has quarterly contracts and faster motion, a trailing six-month cohort can work, but keep the window stable quarter over quarter so trend analysis is comparable.
- Freeze the customer list as of the first day of the measurement window
- Exclude any logo signed after the start date, even if they are already generating revenue
- Include customers that churned inside the window at their starting ARR amount
- Document the cohort rules in writing so finance, GTM, and the board use the same definition
Tip: If a customer merged, spun off, or renegotiated under a new entity inside the window, decide the treatment once and document it. Edge cases silently rebased mid-quarter are how two teams end up quoting two different NRR numbers.
-
2
Measure starting ARR for the cohort
Pull the recurring revenue that cohort was contributing on day one of the window. This is the denominator for both NRR and GRR, and it must stay fixed for the full calculation. Use ARR, not billings, because billings reflect invoicing cadence and will distort the ratio for annual-paid-monthly customers. Strip out one-time services, implementation fees, and anything that is not recurring. If the business sells usage-based or hybrid contracts, pick the normalized ARR convention finance already uses in the P&L and apply it consistently. The starting ARR number is the baseline every subsequent movement is measured against, so it has to be defensible under audit.
- Pull recurring revenue only; exclude services, implementation, and one-time fees
- Normalize monthly contracts to annual to produce a single ARR figure per customer
- Reconcile the cohort ARR total to the finance P&L for the same date to validate the pull
- Lock the starting ARR snapshot in a versioned file so later recalculations are reproducible
-
3
Add expansion revenue from the cohort
Expansion is every recurring dollar the cohort added inside the window: seat upsell, tier upgrades, cross-sell of new products or modules, and usage-driven increases on committed plans. The rule is simple: the dollar has to be recurring, and the customer has to already have been in the cohort. New logos never count as expansion. Pull expansion from the subscription or billing system so each dollar is sourced from a specific change event, not an aggregate. Tagging matters here. If upsell and cross-sell are both lumped as expansion with no sub-category, the team loses the ability to answer whether growth is coming from existing products going deeper or from new products landing.
- Pull every recurring upsell, cross-sell, and tier upgrade inside the window from the cohort
- Exclude one-time charges, overage credits, and any dollar that is not recurring
- Tag each expansion event as upsell, cross-sell, or usage so segmentation works later
- Reconcile the expansion total back to the billing system change log to catch missed events
Tip: Usage-based expansion is the trickiest bucket. Decide whether a usage spike that is likely to normalize counts as expansion today or waits for the next renewal, and apply the rule to every customer, not case by case.
-
4
Subtract contraction revenue
Contraction is every recurring dollar the cohort lost inside the window without the logo churning entirely: downgrades, seat reductions, module removals, and plan step-downs. Treat it as its own bucket, separate from churn, because the diagnostic is different. Contraction usually points to a product value or pricing-fit problem inside otherwise healthy accounts, whereas churn points to a relationship or outcome problem. Pull it from the same subscription change log as expansion so the numbers tie. Sign discipline matters; contraction is a negative movement against the starting ARR, so lock the convention early and keep it consistent across every dashboard that reads from this calculation.
- Pull every recurring downgrade, seat reduction, and plan step-down inside the window
- Exclude customers that fully churned; those belong in the churn bucket, not contraction
- Tag each contraction event as seats, tier, or module so root-cause analysis is possible
- Reconcile contraction to the billing change log and confirm the sign convention
-
5
Subtract churned ARR
Churn is every logo in the cohort that fully stopped paying inside the window. The dollars that come out are the full starting ARR of each churned account, not the amount at the churn date. This is where teams quietly inflate retention: if you measure churn at the point the account exits, a customer that was already contracting for six months looks smaller on the way out and the retention number looks healthier than reality. Hold churn at starting-cohort ARR. Then separately report the contraction those accounts experienced before churn as a leading indicator. Non-renewal, cancellation, and complete down-sell to zero all count as churn.
- Identify every logo that stopped paying inside the window, including non-renewals
- Use each churned account starting ARR, not the final ARR before exit
- Flag accounts that spent months contracting before churning as pre-churn signals
- Reconcile churn count and dollars to the logo-level finance churn report
Tip: A customer that paused and resumed inside the same window is still inside the cohort; a customer that paused into the next window is churned. Pick a rule and apply it everywhere.
-
6
Divide to compute NRR, then strip expansion for GRR
With the four buckets locked, the math is one line each. NRR equals starting ARR plus expansion minus contraction minus churn, divided by starting ARR, expressed as a percentage. GRR is the same math minus the expansion term: starting ARR minus contraction minus churn, divided by starting ARR. NRR can exceed 100 percent because expansion can outweigh contraction and churn; GRR is capped at 100 percent by definition because it ignores upside. The gap between NRR and GRR is the expansion engine. A healthy business shows a wide gap, because expansion is doing real work against the retention drag. A narrow gap flags a product or motion that is holding on but not growing inside the base.
- Compute NRR = (starting ARR + expansion - contraction - churn) / starting ARR
- Compute GRR = (starting ARR - contraction - churn) / starting ARR
- Verify the four bucket totals reconcile to the delta between starting and ending cohort ARR
- Record both numbers with the cohort window and the pull date in a versioned retention file
-
7
Segment by cohort, segment, and plan
A single company-level NRR number tells you nothing you can act on. Immediately cut it by segment, plan, and signup cohort so the pattern underneath becomes visible. SMB cohorts typically churn more and expand less; mid-market and enterprise cohorts typically churn less and expand more. If the SMB segment is dragging NRR down twenty points, the fix is a different motion, not a pricing tweak. Cut by product or plan to see whether a specific plan tier is retaining badly. Cut by signup cohort to see whether a particular launch quarter is aging better or worse than the ones around it. Segmentation is where NRR goes from a board slide to an operating lever.
- Cut NRR and GRR by SMB, mid-market, and enterprise segment
- Cut by plan or product tier to isolate retention problems to a specific SKU
- Cut by signup cohort quarter to spot aging patterns and launch-era effects
- Flag any segment more than ten points off the company average for a focused review
-
8
Benchmark, review monthly, feed into finance and the board
A retention ratio in isolation is just a number. Benchmark it against external SaaS retention research before you draw conclusions. The commonly cited bands put NRR in the 100 to 110 percent range for healthy SaaS, 110 to 120 percent for strong, and 120 percent and up for world-class. GRR tends to run 85 to 90 percent for healthy mid-market and above 90 percent for enterprise. Rebuild the calculation every month on a trailing twelve-month window so the number refreshes as the cohort ages. Push both numbers into the finance review, the board deck, and the CS and sales dashboards from the same source so nobody is quoting a different value in a different meeting. One number, one source, every month.
- Pull OpenView, SaaS Capital, KeyBanc, and Bessemer research to anchor the benchmark bands
- Rebuild NRR and GRR on a trailing twelve-month cohort every month, same formulas
- Push the refreshed numbers into finance, board, CS, and sales dashboards from the same source
- Record a short monthly note explaining any movement greater than two points in either direction
Tip: The board will ask about NRR before they ask about anything else. Walk in with the segmented view, not just the headline, and a one-line explanation for every segment that moved more than two points. That is what separates a credible retention story from a slide.