Your board asks for "retention" and you hand over one number, but NRR and GRR tell very different stories. This guide shows how to calculate net revenue retention (NRR) and gross revenue retention (GRR) correctly, how to read the gap between them, and how to report both without hiding a churn problem behind expansion.

NRR vs GRR: what each one measures

Both metrics look at a fixed group of customers (a cohort) and ask how much recurring revenue that group produces now compared with the start of the period.

  • GRR counts only losses: cancellations (churn) and downgrades (contraction). Expansion is ignored, so GRR can never exceed 100%.
  • NRR counts losses and also adds expansion from upsells, cross-sells and price increases, so it can go above 100%.

As Orb's guide puts it, the two can diverge: high NRR with low GRR means expansion is masking churn. That is the situation these metrics exist to expose.

The formulas

Use ARR or MRR consistently. Do not mix in one-time fees, services or usage overages unless they are contractually recurring.

GRR = (Starting ARR - Churned ARR - Contraction ARR) / Starting ARR x 100

NRR = (Starting ARR + Expansion ARR - Churned ARR - Contraction ARR) / Starting ARR x 100

Definitions:

  • Starting ARR: ARR of every customer that was active on day one of the period.
  • Churned ARR: ARR of customers from that group who cancelled or did not renew.
  • Contraction ARR: ARR lost from customers in that group who stayed but downgraded.
  • Expansion ARR: extra ARR from customers in that group who bought more.

The most common mistake is the cohort: customers who signed during the period are not in the starting base, so their ARR must be left out of every term.

A worked example

This is an illustrative example, not real data. Imagine a company with $4,000,000 ARR on January 1. Over the next 12 months, among those same customers:

  • Churned ARR: $320,000
  • Contraction ARR: $80,000
  • Expansion ARR: $520,000
GRR = (4,000,000 - 320,000 - 80,000) / 4,000,000 = 90.0%
NRR = (4,000,000 + 520,000 - 320,000 - 80,000) / 4,000,000 = 103.0%

The company looks healthy at 103% NRR, and 90% GRR is respectable. Now change one thing: churn is $720,000 and expansion is $920,000. NRR is still 103%, but GRR drops to 80%. The headline is identical, yet the second company is losing a fifth of its base every year and relies on a few big upsells to cover it. This is why you should always report both.

How to calculate them step by step

  1. Pick the period and cohort. Annual is standard for reporting; monthly or quarterly cohorts help you spot trends sooner. Keep the period the same across every figure you compare.
  2. Snapshot starting ARR per customer. Export the customer list with ARR as of the first day of the period.
  3. Classify each customer's change. For each customer in the snapshot, compare ARR now with ARR at the start: zero means churn, lower means contraction, higher means expansion.
  4. Sum each bucket. You need four totals: starting, churned, contraction, expansion.
  5. Apply the formulas. Calculate GRR first, then NRR.
  6. Segment. Repeat by plan, customer size, industry, CSM or onboarding cohort. Orb recommends calculating both metrics per segment because blended figures can hide segment-level problems.

Edge cases to decide once and document

  • Late renewals: a customer who lapses for two weeks and renews is not churn if you define a grace window. Write the window down.
  • Price increases: include them in expansion, but note them separately so a one-off uplift does not look like CS-driven growth.
  • Downgrade then upgrade within the period: compare start and end ARR only, so net movement per customer is what counts.
  • Mid-term upgrades from new logos: exclude them. They are not in the starting cohort.
  • Currency: convert at a fixed rate for the period so FX does not look like expansion or contraction.

What good looks like

Benchmarks vary by source, company size and pricing model, so treat them as context, not targets.

  • The 2026 SaaS & AI Performance Benchmarks from Aleph and Benchmarkit report full-year 2025 medians of 102% NRR and 84% GRR. GRR was down from 88% a year earlier, with a top quartile of 91% and a bottom quartile of 76%. The sample was 342 B2B SaaS and AI-native software companies, of which 226 reported GRR.
  • SaaS Capital's 2025 retention benchmarks for private B2B companies found a median NRR of 102% for companies with ACV of $25,000 to $50,000, with a top quartile of 111% and a bottom quartile of 97%. They also report that companies with NRR of at least 110% grew faster than the 24% median growth rate of surveyed companies above $1 million ARR, while companies below 100% grew slower.

Two takeaways. First, compare yourself with companies of a similar contract size and pricing model, because the highest-ACV companies show the highest gross retention in SaaS Capital's data. Second, whenever NRR is well above GRR, check how concentrated your expansion is.

How to use the numbers in customer success

Diagnose with the gap

PatternWhat it usually meansFirst move
High GRR, NRR near 100%Sticky product, little growthBuild an expansion motion
Low GRR, high NRRExpansion masking churnReview churned accounts by segment
Low GRR, low NRRRetention problem across the baseAudit onboarding and early-life health
High GRR, high NRRHealthy base and growthProtect it; document what works

Tie them to team goals

GRR is the metric your renewals and risk work moves most directly. NRR depends also on pricing, product and sales. Set CSM targets on GRR for the book of business and share NRR goals with account management and sales. For the renewal motion behind GRR, see our 120-day renewal checklist.

Explain movement, not just the number

A good report answers "why did it change?" Break churn and contraction into reasons (price, product gaps, champion left, company shut down, competitor) so leadership sees what to fix.

A board-ready reporting template

Copy this into your next leadership update:

Retention report - [Period]

Cohort: customers active on [start date] (starting ARR: $X)

GRR: X%  (prior period: X%)   NRR: X%  (prior period: X%)
Churned ARR: $X   Contraction ARR: $X   Expansion ARR: $X

By segment:
- [Segment A]  GRR X%  NRR X%
- [Segment B]  GRR X%  NRR X%

Top 3 reasons for churn/contraction:
1. [Reason] - $X
2. [Reason] - $X
3. [Reason] - $X

Largest expansions: [Account], [Account] (share of total expansion: X%)

At-risk ARR for next period: $X
Actions: [owner - action - date]

Monthly checklist

  • Starting-cohort snapshot saved at the start of the period
  • Churn, contraction and expansion tagged per account
  • Churn and downgrade reasons recorded
  • GRR and NRR calculated for the total and each segment
  • Expansion concentration checked (top 3 accounts' share)
  • ARR at risk for the next 90 days listed
  • Definitions (grace window, FX, price increases) unchanged, or changes noted

Try it in XPI CRM

XPI CRM's dashboard shows total ARR, ARR at risk, GRR and NRR, and the ARR movement and ARR-over-time reports break down changes. When a renewal is marked Won, client ARR updates, and a Lost renewal can mark the client as churned, so the numbers stay tied to the work your team does. See the help guides for setup.

Start free — every feature included, no credit card.