Skip to content
Brightkeel
Sign in Start a trial

Net revenue retention, one table at a time

The formula is one line. Getting the rows right takes the rest of this post: which accounts count, what to do with annual prepayments, and the cohort table we review every month.

Net revenue retention answers one question: of the money your customers paid you a year ago, how much are the same customers paying you now? Boards ask for it first, and most teams calculate it three different ways.

The formula

Take every account that was paying 12 months ago. Their combined MRR on that date is the starting point. Add what those same accounts added since (expansion), subtract what they cut (contraction) and what left with the accounts that cancelled (churn). Divide by the starting point.

nrr = (start_mrr + expansion - contraction - churn) / start_mrr

Here is Fernhill's November 2026 calculation, the workspace our demo data comes from:

Fernhill net revenue retention, November 2026
LineMRR (USD)
Starting MRR, accounts paying on Nov 1, 2025138,600
Expansion since then+21,940
Contraction−3,180
Churn−7,140
Ending MRR, same accounts150,220
Net revenue retention108.4%

A result of 108.4% means Fernhill would grow 8.4% over the next year with zero new customers, if the same pattern held.

Which accounts count

The cohort is fixed on the start date. Everything else follows from that one rule:

  • Accounts that started paying after the start date are excluded, even if they signed up the next morning.
  • An account in the cohort that cancelled and came back counts its current MRR. The return shows up as expansion.
  • Free and trialing accounts are not in the cohort; their starting MRR is zero, and dividing by it tells you nothing.

Annual prepayments

An annual plan paid in one invoice is still one twelfth of that invoice in each month. If your billing source books it as one lump, spread it before you calculate, or January looks like a miracle and February like a disaster.

Currencies and credits

Convert each invoice at the exchange rate on its own date, not today's. Credits and refunds reduce MRR in the month they're issued, which is why a generous support team can show up as contraction.

Building the cohort table

A single NRR figure hides when the expansion happened. The table we review each month puts one cohort per row (the month the accounts started paying) and one column per quarter since.

Revenue retention by cohort
CohortAccountsMonth 3Month 6Month 9Month 12
Nov 2025214101.2%103.9%106.1%108.4%
Dec 2025188100.8%104.4%106.7%Pending
Jan 202620399.6%102.1%104.8%Pending
Feb 2026176101.9%105.0%PendingPending

Read across a row to see one cohort mature. Read down a column to see whether newer cohorts expand faster than older ones did at the same age. Here, the January cohort dipped below 100% at month 3 and recovered: two of its larger accounts paused for a quarter and came back on bigger plans.

Net revenue retention by monthTrailing 12 months at each month end; the axis starts at 100%
View as table
Net revenue retention by month
MonthNRR
Jun106.2%
Jul106.9%
Aug107.1%
Sep107.3%
Oct107.3%
Nov108.4%
Figure 1. Trailing 12-month NRR at each month end. Upgrades from Growth to Scale in October and November did most of the lift.

Three mistakes we see every month

  1. Counting new customers. If an account wasn't paying on the start date, it isn't retention. Track it under new MRR instead.
  2. Using bookings instead of MRR. A signed two-year contract is a booking. Only the monthly amount belongs in the calculation.
  3. Letting one big upgrade hide many small losses. A single account moving to Enterprise can lift NRR while ten small accounts leave. Read logo churn beside it.

Doing it in Brightkeel

Press G then D for the overview. Focus the NRR tile and press Enter to open the cohort's accounts, sorted by how much each one moved. The same numbers are available from the API:

GET /v1/metrics/nrr?window=12m&group=plan
{ "nrr": 1.084, "start_mrr": 138600, "expansion": 21940, "contraction": 3180, "churn": 7140 }

If NRR is above 100%, you'd grow with zero new customers. If it's below, every new customer is refilling a leak first.


Keep reading

Get the next post

One operations post a month, plus the release notes. No other email.

No results for "". Try an account, a page or a command.
Move Open Esc Close Brightkeel

    Part of the Design Systems Library