Super Sale WeekClaude Skills — 20% OFF
Tips

How to Analyze Net Revenue Retention: Step by Step

Powerdrill Team·
How to Analyze Net Revenue Retention: Step by Step

A company can post 130% on this metric and still be shrinking. Another can post 95% and be the healthier business.

That sounds like a contradiction. It is just what happens when a ratio deliberately ignores new customers.

Net revenue retention is the most quoted number in subscription reporting and the most misread. The formula takes a minute. Understanding what it excludes is the part that changes decisions.

This guide covers the formula and why the denominator carries all the meaning. It then covers how to read the result, the three manual routes, and where each one breaks.

What net revenue retention measures

It measures one thing: what happened to the revenue you already had.

Workday's guide to calculating it puts the scope plainly. The metric tracks "the percentage change in recurring revenue from your existing customers."

New customers are excluded. Not downweighted, not adjusted for. Excluded.

That single design choice is why the number is useful and why it misleads. It isolates whether your existing base is expanding or eroding, and it says nothing at all about growth.

The formula and its four moving parts

Workday gives it as follows.

NRR = (Starting RR + Expansion RR – Contraction RR – Churn RR) / Starting RR × 100

Component What it is
Starting RR Recurring revenue at the period's beginning
Expansion RR Revenue from upsells and cross-sells
Contraction RR Revenue lost from downgrades
Churn RR Revenue lost from cancellations or non-renewals

Three of those four are movements within the same customer cohort. Getting the cohort wrong is the most common error, and it is invisible in the output.

Before any of this, you need a clean recurring revenue base. Our guide to turning a subscription export into an MRR and ARR report covers that step, and the definitions there feed straight into this one.

Why the denominator is the whole story

The denominator is starting recurring revenue, and nothing else ever goes into it.

So the metric answers "of the money we had, how much do we still have, plus what did we grow it by." It cannot answer "are we bigger than last quarter."

Two companies illustrate the gap. One holds a flat base with heavy upsell and posts 130%, while acquiring nobody. Another posts 95% on its base while tripling new business.

Both figures are accurate. Only one of those companies is growing, and this metric will not tell you which.

The practical rule follows directly. Never present this number alone. Pair it with new revenue, or with the base itself, so the reader can see what it is a percentage of.

One more denominator trap worth naming. Billing platform definitions of recurring revenue are narrower than most people assume. Stripe's billing analytics documentation excludes tax, free tiers, usage-based products, and trials. If your denominator comes from a platform export, you have inherited those exclusions.

What the number means

Workday's reading of the ranges is unusually direct, which makes it quotable.

Result Workday's interpretation
Above 100% "Net expansion; your existing customers generate more revenue than you lose."
90–100% Flat to slight contraction
Below 90% "Warning sign; churn and downgrades outpace expansion."

The period is your choice. The same page notes you "can choose to calculate NRR on a monthly, quarterly, or yearly basis to align with your reporting cadence."

That flexibility is a trap if you are careless. A monthly figure and an annual figure from the same business are different numbers, and neither converts to the other by multiplication.

Fix the cadence once, write it on the report, and never compare across cadences. Amplitude's explainer on the metric covers the same ground from a product analytics angle.

How to do it manually

Option 1: Build the four totals, then divide once

Start with the cohort. List every customer with recurring revenue at the period start, and freeze that list.

Then total each movement for that frozen list only, using SUMIFS with a customer filter and date bounds. That gives four visible totals.

Divide once at the end. Keeping the four totals in separate cells is what lets you answer "which part moved," which is the only question that leads to an action.

The ceiling is that this gives you one number for one period. You know 104% and nothing about who drove it.

Option 2: Build a customer-level movement table

One row per customer in the cohort, one column per movement. Starting revenue, ending revenue, and the delta split into expansion, contraction, and churn.

Now the report can be sliced. By plan, by segment, by tenure band, by acquisition cohort.

That slicing is where the finding lives. A healthy blended figure often hides one segment expanding hard while another quietly downgrades. Our explainer on cohort analysis covers why the blended view moves on its own.

The limit is volume and joins. Matching a subscription export against an account table is past the point where formulas stay pleasant.

Option 3: Keep a definitions tab

Record the cohort rule and the cadence. Then record what counts as expansion versus a new sale, how mid-period changes net out, and which revenue definition your export uses.

The expansion boundary is the one that causes arguments. A customer who buys a second product might be expansion or might be new business, and both readings are defensible.

The limitation is that documenting a rule does not apply it. Somebody still rebuilds the same filters every cycle.

The shared ceiling. All three assume you can reconstruct the cohort as it stood on day one of the period. If your export only shows current state, that reconstruction is the real work.

Where the manual route slows down

The first calculation takes a morning. The fourth takes longer, because the definitions drifted while nobody was looking.

Plan changes break the expansion and contraction split. A repackaging that moves customers onto a new price list produces movement that is neither growth nor loss. It lands in whichever bucket your filters happen to catch.

A hundred-percent discount is the edge case that catches everyone. Stripe's documentation notes that revenue dropping to zero registers as churn for the period. So a fully discounted account can show as lost while the customer has not left.

Configuration changes lag too. Stripe notes that adjustments to its analytics settings take 24 to 48 hours to take effect. A recalculation on the same day will not reflect the change you just made.

Then there is the cost that only shows up in a board meeting. When someone asks why the figure differs from last quarter's deck, the answer is usually a definition. That definition lives in a tab you did not bring.

How to build it with Powerdrill Bloom

Step 1: Upload your subscription export

Upload the subscription file, or the subscription and account files together. Powerdrill Bloom profiles the columns on arrival, so duplicate customer IDs, missing plan values, and inconsistent currency fields surface before any ratio is computed.

Upload your subscription export to analyze net revenue retention in Powerdrill Bloom

Step 2: Describe the definition in natural language

State the rules rather than building them. Name the cohort date, the cadence, what counts as expansion, and how mid-period changes should net out.

Then ask the questions that expose the traps. Ask which customers in the starting cohort dropped to zero revenue. Ask which movements came from plan repackaging rather than customer decisions. Then ask how the figure splits by segment and by tenure band.

Step 3: Export the chart, report, or deck

Take out the movement table, a waterfall of the four components, or slides that carry the cohort rule alongside the result.

Export the retention movement table

Common mistakes

Presenting the figure without the base. A percentage of an unstated number is decoration. Show starting recurring revenue beside it.

Letting new customers into the denominator. The metric is defined on the existing cohort only. Including new business turns it into a different, less useful ratio.

Comparing a monthly figure to an annual one. They are separate measurements and do not convert. Fix one cadence and label it.

Counting a second product purchase as expansion without a rule. It might be expansion or new business. Decide once, write it down, and apply it consistently.

Reading a discounted-to-zero account as churn. Platform definitions treat zero revenue as churn for the period. Check whether the customer actually left.

Ignoring plan repackaging. Migrating customers to a new price list creates movement that is not a customer decision. Flag those rows separately.

Recalculating immediately after changing a billing configuration. Platform settings can take 24 to 48 hours to take effect, so the number you get is the old one.

Conclusion

Freeze the cohort, total the four movements, divide by starting recurring revenue only, fix the cadence, and always show the base beside the percentage. That is what makes this figure survive a board review.

The number itself is not the deliverable. The split between expansion, contraction, and churn is what tells you what to do next.

If reconstructing that split eats your quarter, try Powerdrill Bloom on your subscription export. See also the roundup of AI tools for SaaS metrics tracking and the AI report generator page.

Frequently asked questions

What is the net revenue retention formula?

Workday gives it as starting recurring revenue plus expansion, minus contraction, minus churn, all divided by starting recurring revenue, multiplied by 100.

Does it include new customers?

No. The metric measures the percentage change in recurring revenue from existing customers only. That is exactly why it cannot tell you whether the business is growing.

What is a good result?

Workday reads above 100% as net expansion and below 90% as a warning sign, with 90 to 100% being flat to slight contraction. Benchmarks vary by segment, so compare against your own trend first.

Should I calculate it monthly or annually?

Either, as long as you fix it. The two are separate measurements and cannot be converted into each other, so pick one cadence and label every report with it.

Why does my figure differ from my billing platform's?

Usually the revenue definition. Platform figures often exclude tax, free tiers, usage-based products, and trials, so a spreadsheet built on gross invoiced amounts will not match.