ProductComparePricingSecurityBlogAbout Book a 30 min demo
All articles
Metrics21 August 2026·7 min read

How to calculate NRR properly in Salesforce

Most NRR numbers are wrong in the same way — they let new customers into a calculation that is supposed to exclude them. Here is the arithmetic, with a worked example.

Net revenue retention is the metric investors ask about first and the one most often calculated incorrectly. The error is almost always the same, and it flatters the number.

What NRR is actually asking

One question: are the customers we already had getting bigger or smaller on their own?

That is why new customers must be excluded. A strong sales quarter can hide a leaking bucket for a long time. Taking new business off the table is the entire purpose of the metric.

The four steps

Freeze the customer list on day one. Every account paying you anything at the start of the period joins the cohort. Nobody joins later, however large they grow.

Add up what that cohort was paying. That is your denominator.

Track only what happened to those accounts during the period — expansion, renewal uplift, contraction, churn.

Divide the end by the beginning.

A worked example

Five customers were paying you on 1 February, totalling €305,000. During the year:

  • One expanded, adding 30,000 in a new product
  • Another added seats worth 8,000
  • Contracted price increases added 7,000
  • One customer reduced their seats by 15,000
  • One left entirely, taking 80,000

A sixth customer signed in June for 60,000. They are not in the calculation.

(305,000 + 30,000 + 8,000 + 7,000 − 15,000 − 80,000) ÷ 305,000 = 255,000 ÷ 305,000 = 83.6%

Below one hundred percent, which tells you the existing base shrank. Note that total ARR still went up that year, because of the new customer. Both facts are true, and reporting only the first one hides the problem.

The check that catches errors

NRR is simply what the cohort pays at the end divided by what it paid at the start. Compute it both ways — by summing the movements, and by comparing the two balances. If they disagree, an event has been categorised wrongly or a new customer has leaked in.

Gross retention, and why you need both

Gross retention is the same calculation with the additions removed:

(305,000 − 15,000 − 80,000) ÷ 305,000 = 68.9%

It can never exceed one hundred percent. If yours does, a positive movement has found its way into the formula.

The gap between the two — here, about fifteen points — is your expansion engine. NRR alone cannot tell you whether you are growing because customers love you or shrinking slowly while two big upsells paper over it.

Count logos as well as euros

In the example, four of five customers stayed: eighty percent logo retention against sixty-nine percent gross revenue retention.

That gap is the alarm. You kept most of your customers but lost a disproportionate share of the money, which means the account that left was a large one. If the numbers were reversed — many small losses, little revenue — that is a far less urgent problem. The two are indistinguishable if you only track euros.

Four things that quietly corrupt the number

New business leaking in. The most common error. Structurally impossible if you build the cohort correctly, because a new logo had a zero balance before the period.

Currency movement. If a customer pays in sterling and the rate moves, your reported ARR changes while nothing commercial happened. Calculate in constant currency, or exchange-rate noise appears as expansion.

Account versus customer. If one company has three subsidiaries as separate accounts, roll them up first. Otherwise a customer consolidating contracts looks like two churns and an expansion.

One-off revenue. Onboarding fees and services are not recurring. If they sit in the base, NRR swings for reasons that have nothing to do with retention.

Why this is hard to do in a CRM report

The cohort is the problem. Reporting tools can sum values by category; they cannot easily freeze a list of accounts at a point in time and then measure only those accounts across a later window. That is a self-join across two periods.

It becomes straightforward when every ARR change is recorded as a dated, permanent event — because then the cohort is one query and the movements are another. That is the approach Revligent takes, and it is why the number can always show its working.

GM
Gagan Madaan
Founder, Revsolut GmbH — about the team

See it run on one of your own deals

Thirty minutes in your Salesforce sandbox. We install it, configure your pricing, and quote a real opportunity end to end.

Book a demo