Short answer: net revenue retention (NRR, also called net dollar retention) is (Starting ARR + Expansion − Contraction − Churn) ÷ Starting ARR × 100, counted only for customers who were already paying a year ago. If those customers paid 1,000,000 a year ago and pay 1,120,000 today, after upgrades, downgrades and cancellations, NRR is 112%.
What goes into NRR?
| Part | What it is |
|---|---|
| Starting ARR | The annual recurring revenue of every customer active 12 months ago |
| Expansion | What those customers added since: more seats, a higher plan, add-ons |
| Contraction | What they cut back: fewer seats, a lower plan, discounts |
| Churn | The ARR of those who cancelled |
New customers who signed in the last 12 months are not in it, neither in the start nor in today's number. NRR answers one question: does the revenue you already have grow or shrink by itself?
What does a worked example look like?
A software company looks at the customers it had on 1 October last year:
| ARR | |
|---|---|
| Starting ARR of those customers | 1,000,000 |
| Expansion (upgrades and added seats) | + 210,000 |
| Contraction (downgrades) | − 30,000 |
| Churn (cancelled) | − 60,000 |
| The same customers today | 1,120,000 |
NRR = 1,120,000 ÷ 1,000,000 = 112%.
Gross revenue retention (GRR) uses the same customers but leaves expansion out: (1,000,000 − 30,000 − 60,000) ÷ 1,000,000 = 91%. GRR can never be above 100%. It shows how much revenue leaks; NRR shows whether growth inside the base covers the leak.
What is a good NRR?
Above 100% the business grows even if it signs no new customer at all. Around 100 to 110% is good for companies selling to small businesses, where customers churn more and expand less. 120% or more is common among strong enterprise software companies, whose customers add seats as they grow.
Read NRR next to GRR. An NRR of 115% with a GRR of 80% means a few big accounts are expanding fast while many small ones leave: a growth story with a churn problem underneath.
Which mistakes inflate it?
- New customers in the cohort. Counting customers who joined during the year adds their whole ARR as "expansion". Fix the cohort a year ago and follow only them.
- Mixed time windows. One month of expansion multiplied by twelve is not the same as a trailing twelve months, and seasonal deals make the first look much better or worse. Say which window you use, and keep it.
- Price rises hidden in expansion. A general price increase lifts NRR without any customer buying more. Show it separately if it is large.
How do you calculate it in SQL?
With monthly recurring revenue per customer and month:
WITH base AS (SELECT customer_id, SUM(mrr) * 12 AS arr_then FROM subscriptions WHERE month = DATE '2025-09-01' GROUP BY 1),
now AS (SELECT customer_id, SUM(mrr) * 12 AS arr_now FROM subscriptions WHERE month = DATE '2026-09-01' GROUP BY 1)
SELECT SUM(COALESCE(n.arr_now, 0)) * 100.0 / SUM(b.arr_then) AS nrr_pct
FROM base b LEFT JOIN now n USING (customer_id);The LEFT JOIN from last year's customers is what keeps new customers out, and COALESCE counts a customer who left as zero.
Which chart shows it best?
A line of trailing twelve-month NRR each quarter, with a line at 100%, shows the trend and the threshold that matters. A waterfall from starting ARR through expansion, contraction and churn to today's ARR explains a single number. A bar chart of NRR by segment shows where expansion comes from.
KPI Atlas has net revenue retention with its DAX measure, the SQL above and an Excel formula ready to copy, next to gross revenue retention, customer churn rate, MRR and the rest of the SaaS KPIs.

