Subscriptions & retention14 min readUpdated October 14, 2026

Gross vs Net Retention: How to Calculate GRR and NRR

GRR and NRR formulas, what counts in each (upgrades, downgrades, pauses, reactivations), cohort vs period methods, and the rules for subscription brands.

Article summary

TL;DR

Gross revenue retention (GRR) is the share of starting recurring revenue you keep after cancellations and downgrades, with no credit for upgrades, so it can't pass 100%. Net revenue retention (NRR) adds upgrades and add-ons from the same customers, so it can. Both leave new customers out.

  • GRR = (starting MRR − churned MRR − contraction MRR) ÷ starting MRR. NRR adds expansion MRR to the top line. Same customers, same period, one extra term.
  • Both metrics only follow customers who were paying at the start. New sign-ups, and former customers who come back, are growth, not retention.
  • GRR is capped customer by customer: one subscriber's upgrade can't cancel another one's downgrade. Chargebee does this by keeping the lower of each subscription's start and end MRR.
  • Subscription brands need rules for pauses, skips, delivery intervals and one-off upsells before the numbers mean anything. One-time add-ons don't count in MRR-based NRR.
  • Public companies each define NRR their own way in their filings. Read the definition before comparing any two numbers, including your own month to month.
Want to go further? AskChatGPTClaudePerplexityGrok
On this page

Gross and net retention measure the same thing, the recurring revenue you keep from customers you already had, with one difference: whether upgrades count. Gross revenue retention (GRR) ignores them. Net revenue retention (NRR) adds them. This guide gives both formulas, shows what goes in each term with worked numbers, compares the period and cohort methods, and covers the cases most guides skip: pauses, skips, delivery intervals and one-off upsells in subscription ecommerce.

Gross vs net retention at a glance

Gross revenue retention (GRR)Net revenue retention (NRR)
Question it answersHow much of our starting revenue did we keep?Did our existing customers end up paying us more or less?
Starting baseRecurring revenue of customers active at the startSame
Cancellations (churn)SubtractedSubtracted
Downgrades (contraction)SubtractedSubtracted
Upgrades and add-ons (expansion)Left outAdded
New customersLeft outLeft out
Maximum100%NoCeiling
Also calledGross dollar retentionNet dollar retention (NDR)3Chargebee Docs, What is NRR (Net Revenue Retention) and where to check this metric in RevenueStory

Chargebee's definitions put the difference in one line each: GRR is "the percentage of recurring revenue retained from existing customers, excluding expansion revenue"; NRR is the same percentage "including expansion revenue and accounting for churn."4Chargebee Docs, Recurring revenue (MRR movement summary)

Verdict

Report both, side by side. GRR tells you how well you hold on to revenue. NRR tells you whether the customers who stay grow enough to cover the ones who leave. A good NRR with a falling GRR means a few customers are spending more while the base erodes.

The GRR and NRR formulas

Both formulas run on monthly recurring revenue (MRR), or on annual recurring revenue for annual contracts. Pick a period, usually a month, and take only the customers who were paying on its first day.

GRR = (starting MRR − churned MRR − contraction MRR) ÷ starting MRR × 100

NRR = (starting MRR + expansion MRR − churned MRR − contraction MRR) ÷ starting MRR × 100

The four inputs, with Stripe Billing's names, since its MRR movements are defined in its documentation:1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts)

TermWhat it isTypical events in subscription ecommerce
Starting MRRMonthly-normalized value of subscriptions active on day oneAll running subscriptions; a 600 USD yearly plan counts as 50 USD a month in Stripe's example
Churned MRRMRR of subscriptions canceled or ended unpaidCancellations; renewals that failed and were never recovered
Contraction MRRMRR lost by customers who stay, on a cheaper planSmaller box, cheaper product, longer delivery interval, new recurring discount
Expansion MRRMRR gained from customers who stayBigger box, extra product on the recurring order, shorter interval, price increase

Stripe's own "churned revenue" metric is churned MRR plus contraction MRR, which is exactly what GRR subtracts.1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts) Stripe also counts a subscription as churn only when it is canceled or marked unpaid; while a renewal is past_due, it stays in MRR.1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts) How churn is counted, and why the denominator matters, is covered in detail in how to calculate churn rate.

  1. Freeze the base. On October 1, 1,000 subscribers pay a total of $40,000 a month. That is starting MRR.
  2. Add up losses from those subscribers. 60 cancel or end unpaid: $2,400 churned MRR. Others move to smaller boxes or longer intervals: $1,000 contraction MRR. 15 pause: $600 (more on pauses below).
  3. Add up gains from those subscribers. Add-ons and bigger boxes: $1,800 expansion MRR.
  4. Set aside everything else. 150 new subscribers ($6,000) and 12 former subscribers who came back ($500) weren't in the base. They stay out of both formulas.
  5. Calculate. GRR = (40,000 − 2,400 − 1,000 − 600) ÷ 40,000 = 90.0%. NRR = (40,000 + 1,800 − 2,400 − 1,000 − 600) ÷ 40,000 = 94.5%.

Illustrative example. The numbers are invented to show the method.

Total MRR on October 31 is $44,300. Divide it by $40,000 and you get 110.75%, a number that looks like great retention and is mostly acquisition. That is the most common way NRR gets inflated.

90.0%

GRR: kept after losses, no upgrades (illustrative)

94.5%

NRR: losses and upgrades from the same base

4.5 pts

Gap between the two: expansion ÷ starting MRR

110.75%

Wrong: total end MRR ÷ start MRR, new customers included

The gap between NRR and GRR is always expansion MRR divided by starting MRR: here $1,800 ÷ $40,000 = 4.5 points. That makes the pair easy to read. GRR is your loss rate, the gap is your expansion rate, and NRR is the sum.

What goes in each: expansion, contraction, churn, reactivation

Most disagreements about retention come from events that don't fit neatly in one bucket. Here is how each one counts, using the rule that the base is the set of customers paying on day one.

Event during the periodIn GRRIn NRRWhy
Customer from the base cancelsSubtractedSubtractedChurn
Renewal fails, still in retries at period endKeptKeptStripe keeps past_due in MRR until canceled or unpaid1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts)
Customer downgrades or moves to a longer intervalSubtractedSubtractedContraction
Customer upgrades, adds a product, shortens the intervalLeft outAddedExpansion
Price increase on existing subscribersLeft outAddedExpansion; Instructure lists pricing changes among the drivers of its NRR6Instructure Holdings, Form 10-K for fiscal year 2022 (SEC), Key business metrics
Customer pausesSubtracted, if you treat it as contractionSubtracted, same ruleChargebee subtracts paused MRR in its MRR movement and adds resume MRR back4Chargebee Docs, Recurring revenue (MRR movement summary)
Former customer (not in the base) comes backLeft outLeft outReactivation is new revenue for this period
Base customer cancels and comes back in the same periodEnds at their final MRREnds at their final MRRCompare start and end per customer
New customerLeft outLeft outAcquisition
Currency moves on a foreign-currency planYour choice: report it apartSameStripe shows an FX adjustment as its own line in MRR growth1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts)

Reactivation is the one that trips people up. Chargebee's NRR includes only MRR from customers active at the start of the period and excludes customers who activated or joined during it.3Chargebee Docs, What is NRR (Net Revenue Retention) and where to check this metric in RevenueStory A subscriber who canceled in August and returned in October wasn't in the October base, so their return can't raise October retention. Stripe and Chargebee both report reactivation MRR as its own movement, next to new MRR.1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts)4Chargebee Docs, Recurring revenue (MRR movement summary) The churn guide applies the same rule to customer counts: a return is a reactivation, not a correction of an earlier month.

GRR is capped customer by customer

Chargebee's GRR uses, for each subscription active in the previous period, the lower of its MRR at the start and at the end of the period, so expansion can't creep in.2Chargebee Docs, Retention (Gross and Net Revenue Retention Rate) In practice: a customer who downgrades counts at the lower amount, a customer who upgrades counts at their starting amount. One subscriber's upgrade never offsets another subscriber's downgrade in GRR.

Here is why that matters, with four subscribers:

Fig. 1GRR and NRR from customer-level data

SubscriberStart MRREnd MRRWhat happenedCounts in GRRCounts in NRR
A$40$0Canceled$0$0
B$40$30Smaller box$30$30
C$40$60Added a product$40$60
D$40$40Skipped one delivery, no plan change$40$40
Total$160$130$110 → GRR 68.75%$130 → NRR 81.25%

GRR sums the lower of start and end

Illustrative example: four subscribers at $40 a month on October 1.

If you netted all changes at the total level instead, C's $20 upgrade would hide most of B's $10 downgrade and GRR would look better than it is. The customer-level method needs one row per customer with start and end MRR, which most billing tools can export. Stripe's prebuilt reports include MRR per subscriber per month and a log of every customer MRR change.1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts)

Period method vs cohort method

There are two ways to choose the customers you follow, and they answer different questions.

Period method

  1. BaseEveryone paying on day one of the period
  2. MeasureTheir MRR on the last day, or start minus losses

One retention rate per month or year

Cohort method

  1. BaseEveryone who started paying in the same month
  2. MeasureTheir MRR at month 1, 2, 3… after start

A retention curve per starting month

The period method gives one number per period for the whole base. It's what Chargebee's retention metrics compute: MRR from subscriptions active in the previous period, compared with what they paid then.2Chargebee Docs, Retention (Gross and Net Revenue Retention Rate) It mixes subscribers in their first month with subscribers in their third year, so a change in your acquisition mix moves it even if nothing changed for existing customers.

The cohort method follows one starting group over time. Stripe assigns subscribers to cohorts by the month they first generated positive MRR, and its revenue retention table shows the MRR remaining from that cohort at the end of each following month. Stripe notes it can exceed 100% because it counts upgrades, downgrades and cancellations, so it is a net figure.1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts) Recurly's subscriber retention dashboard is also built by cohort of sign-up month, but it counts subscribers, not revenue.5Recurly Docs, Subscriber retention

A cohort table with both lines shows the shape a single rate hides:

Fig. 2One cohort, followed for a year

NRRGRR

  1. 92%90.5%Month 1
  2. 84%80%Month 3
  3. 78.5%72%Month 6
  4. 74%64.5%Month 12

NRR stays above GRR by the expansion it collects

Illustrative example: January cohort, $10,000 starting MRR. GRR here sums each subscriber's lowest MRR since the start.

Use the period method for a monthly dashboard and the cohort method to see where the losses happen. If a newer cohort falls faster in its first three months than older ones did, look at what changed for it: the offer, the channel, the first-box experience or the first renewal. How to build cohort tables is covered in what is cohort analysis.

Monthly vs annual retention

Retention compounds like churn does. Measured on the same cohort, twelve months at 98% GRR leave you with about 78.5% of starting revenue, not 76%. Twelve months at 99.5% NRR give about 94.2%.

Monthly rate, same cohort12 × the monthly loss (wrong)Compounded over 12 months
99.5%94.0%94.2%
99%88.0%88.6%
98%76.0%78.5%
97%64.0%69.4%
95%40.0%54.0%

Compounding only holds when every month is measured on the same cohort. A period-method rate resets its base every month and includes customers who joined since, so twelve of them chained together don't equal the annual retention of the customers you had in January. For an annual figure, measure it directly: revenue this month from customers who were paying twelve months ago, divided by what they paid then. That is how public companies do it, as the next section shows.

How public companies define NRR and GRR

Public software companies report NRR in their annual filings, and each one writes its own definition. Two examples from SEC filings show how far apart they can be:

Instructure (10-K, fiscal 2022)Snowflake (10-K, fiscal year ended January 31, 2022)
Revenue baseARRProduct revenue
Customers followedEvery customer with ARR in a given month of the prior yearCustomers under capacity contracts who used the platform in the first month of the measurement period
WindowSame month, one year laterTrailing two years: second year's revenue ÷ first year's revenue
Churned customersIncluded through terminations and non-renewalsStay in the calculation at zero revenue
GRR disclosedYesDowngrades and cancellations over 12 months subtracted from starting ARRNot as a separate metric
Reported valuesNRR 106%, GRR 94% at December 31, 2022NRR 178% as of January 31, 2022

Sources: Instructure 10-K6Instructure Holdings, Form 10-K for fiscal year 2022 (SEC), Key business metrics; Snowflake 10-K.7Snowflake Inc., Form 10-K for fiscal year ended January 31, 2022 (SEC), Net revenue retention rate

Two things stand out. Snowflake measures recognized revenue from usage over two years, so its NRR captures consumption growth that an MRR-based metric wouldn't see. Instructure's NRR counts "changes in quantities of users, changes in pricing, additional applications purchased or applications no longer used," and it publishes GRR next to it.6Instructure Holdings, Form 10-K for fiscal year 2022 (SEC), Key business metrics These figures describe enterprise software sold on contracts. They are examples of disclosure, not targets for a subscription brand.

Any customer in the cohort that did not use our platform in the second year remains in the calculation and contributes zero product revenue in the second year.

Snowflake Inc., Form 10-K, fiscal year ended January 31, 2022

That sentence is the safeguard to copy: a customer who left stays in the denominator. Drop churned customers from the base and NRR goes up for the wrong reason.

Inside Tagada

Build the funnel once, route every customer to the right offer

Checkout, upsells and subscriptions on one flow, with conditions per country, order or customer.

Start free

GRR and NRR in subscription ecommerce vs B2B SaaS

The formulas come from software, where expansion means more seats or a higher tier. A subscription brand shipping products every month has other levers, and other traps.

B2B SaaSSubscription ecommerce
Main expansionMore seats, higher tier, more usageExtra product on the recurring order, bigger box, shorter interval, price increase
Main contractionFewer seats, lower tierSmaller box, cheaper product, longer interval, recurring discount
Billing cycleOften annual contractsMostly monthly or per delivery
Pauses and skipsRareCommon, and built into most subscription apps
One-off purchasesRareFrequent: one-click upsells, add-on items, reorders outside the subscription
Involuntary churnInvoices, slower to churnCard renewals that fail and end when dunning stops
Typical reporting periodAnnual (ARR)Monthly (MRR), with cohorts

The rules that keep subscription ecommerce numbers honest:

  1. Delivery interval changes are revenue changes

    A subscriber who moves from every 4 weeks to every 8 weeks halves their monthly-normalized revenue. Count it as contraction, and the reverse as expansion. MRR is a monthly normalization in Stripe's definition, so interval changes flow through it.

  2. One-off upsells aren't expansion MRR

    A one-click upsell after checkout or a single add-on item is revenue, but not recurring revenue. It doesn't belong in MRR-based NRR. If one-off spend matters to you, track a separate revenue-based cohort retention on everything the cohort buys.

  3. Skips depend on the metric

    On MRR, a skipped delivery changes nothing if the plan is unchanged. On billed revenue, the skipped month shows as a drop and the next month as a recovery. Say which one you report, and track skip rate on its own.

  4. Pauses need one rule, kept

    Chargebee doesn't count paused subscriptions as churn, but subtracts paused MRR from its MRR movement.8Chargebee Docs, What is Pause MRR and Cancellation/Churn MRR4Chargebee Docs, Recurring revenue (MRR movement summary) Count a pause as contraction while it lasts, resume as recovery, and show paused MRR on its own line.

Two more points specific to brands that bill cards every month. First, a renewal that fails isn't lost yet: in Stripe it stays in MRR while past_due, and drops out as churn when the subscription is canceled or marked unpaid.1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts) Your most recent month will look better than it will once retries finish, so compare closed periods. Why renewals fail and how retries work are covered in subscription payment failures and what is dunning. Second, discounts change MRR. Stripe lets you choose whether recurring and one-time discounts are subtracted from MRR, and always subtracts permanent recurring discounts.1Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts) If a "save" offer gives 30% off to stop a cancellation, that's contraction in GRR. When the discount ends, the price going back up is expansion in NRR. Keep the setting fixed, or your retention moves when you change a toggle.

Repeat buyers without a subscription

Many ecommerce customers reorder without subscribing. They have no MRR, so GRR and NRR don't apply as such. The closest equivalent is revenue cohort retention: what a group of first-time buyers spends in months 7 to 12, divided by what it spent in months 1 to 6, or year 2 over year 1. It works like Snowflake's revenue-based method, with customers who stopped buying kept at zero.

How to read GRR and NRR together

The pair says more than either number. Without a benchmark from your own history, read the direction and the gap.

  1. GRR falls, NRR holdsUpgrades from a minority hide growing losses in the baseSplit losses into cancellations, failed payments and downgrades, and fix the biggest
  2. GRR holds, NRR fallsCustomers stay but buy less extraLook at add-on offers, box sizes and price changes
  3. The latest month always looks best, then gets revised downRenewals still in retries are counted as keptCompare closed periods, after dunning ends
  4. NRR jumps after a price increaseExpansion from pricing, not from behaviorShow price-driven expansion separately and watch GRR the next months
  5. GRR above 100%Expansion or new customers are in the numeratorRecompute with start minus losses, or the lower of start and end per customer
  6. Both stable while paused MRR risesPauses absorb cancellationsReport paused MRR next to retention and cap pause length

Customer churn and revenue retention also tell different stories. If the customers who leave are cheap and the ones who stay upgrade, subscriber churn can be high while NRR is above 100%. Report subscriber retention, GRR and NRR together. Revenue retention also feeds lifetime value: more on that in what is CLTV.

Common mistakes

  • Dividing total ending MRR by starting MRR. It includes new and returning customers. Use start minus losses for GRR, and the ending MRR of starting customers only for NRR.
  • Dropping churned customers from the base. They have to stay in the denominator at zero, as in Snowflake's definition.7Snowflake Inc., Form 10-K for fiscal year ended January 31, 2022 (SEC), Net revenue retention rate
  • Netting expansion against contraction across customers in GRR. Cap each customer at their starting MRR, as Chargebee does.2Chargebee Docs, Retention (Gross and Net Revenue Retention Rate)
  • Counting reactivations as retention. A customer who wasn't paying on day one belongs with reactivation MRR.
  • Mixing one-off revenue into MRR-based NRR. One-click upsells and single add-ons are real revenue, measured elsewhere.
  • Chaining monthly period rates into an annual one. Measure the year on the cohort that was paying twelve months ago.
  • Changing definitions silently. Discount settings, pause rules and FX treatment all move the number. Write the definition next to it, the way public companies do in their filings.
  • Comparing with a published benchmark. Benchmarks come from someone else's customer base and definitions, mostly B2B software on annual contracts. Compare your own cohorts over time instead.

How to calculate GRR and NRR in a spreadsheet

One row per customer, one tab per period. This is the customer-level method from the table above.

ColumnContentFormula (row 2)
ACustomer ID
BMRR on the first day of the periodExported from billing
CMRR on the last day of the periodExported from billing
DIn the starting base?=B2>0
ECounts in GRR=IF(D2,MIN(B2,C2),0)
FCounts in NRR=IF(D2,C2,0)
GChurned MRR=IF(AND(D2,C2=0),B2,0)
HContraction MRR=IF(AND(D2,C2>0,C2<B2),B2-C2,0)
IExpansion MRR=IF(AND(D2,C2>B2),C2-B2,0)

Then: GRR =SUM(E:E)/SUMIF(D:D,TRUE,B:B) and NRR =SUM(F:F)/SUMIF(D:D,TRUE,B:B). Check that starting MRR minus G, minus H, plus I equals the sum of column F. If it doesn't, some customers changed status in a way you haven't classified yet, such as a pause or a currency change. Customers with B = 0 and C > 0 are new or reactivated: they stay out of both rates, and their total should match new plus reactivation MRR in your billing tool.

Where Tagada fits

How Tagada helps

Protect the revenue you already have

Tagada runs subscriptions with trials, billing cycles, dunning and automatic retries, in the same system as the checkout, which offers one-click upsells and order bumps. Payments can be routed across Stripe, Adyen and Tagada's own processor, TagadaPay, with one set of rules and a cascade on decline, and the card vault moves customers between merchant accounts without collecting their cards again, so running subscriptions keep charging. That works on the failed-payment part of your churned MRR. Pricing is on the pricing page.

Whatever tool computes your numbers, the method doesn't change: freeze the base on day one, subtract churn and contraction for GRR, add expansion for NRR, keep new and returning customers out, cap GRR customer by customer, and write down how pauses, skips, intervals and discounts count.

Nick Bonnassies

CMO at Tagada

CMO at Tagada. Before Tagada, Nick built direct-to-consumer brands that generated over $115M in sales, raised over $25M in crowdfunding and sold two of them. He also works as a fractional CMO on marketing operations and AI systems.

Frequently asked questions

What is the difference between gross and net retention?

Both start from the recurring revenue of customers you had at the beginning of a period. Gross retention subtracts what those customers canceled or downgraded and stops there. Net retention also adds what the same customers upgraded or added. Gross shows how much revenue you protect; net shows whether the existing base grows or shrinks once upgrades are counted.

Can gross revenue retention be over 100%?

No. GRR only subtracts losses from the starting revenue and never adds anything back, so its maximum is 100%, reached when no customer canceled or downgraded. If your GRR comes out above 100%, expansion or new customers slipped into the numerator, usually because ending MRR was used instead of starting MRR minus losses.

Is net revenue retention the same as net dollar retention?

Yes, the names are interchangeable. Chargebee's documentation says NRR is also known as NDR, net dollar retention, and Snowflake calls its metric a dollar-based net revenue retention rate. The name doesn't tell you the method, though: each company picks its own revenue base, cohort and period, so read the definition next to the number.

What does NRR above 100% mean?

It means the customers you had at the start of the period now pay you more in total than they did then, even after cancellations and downgrades. Upgrades, add-ons and price increases outweighed the losses. It says nothing about new customers. A business can have NRR above 100% and still be losing subscribers, if the ones who stay spend more.

Do new customers count in net revenue retention?

No. NRR follows only the customers who were paying at the start of the period. Chargebee's definition says customers who activated or newly joined in the current month are excluded. Former customers who return during the period are also left out of a period calculation: they weren't in the starting base, so their revenue is reactivation, not retention.

How do you calculate annual NRR from monthly NRR?

Measure it directly when you can: revenue now from the customers you had twelve months ago, divided by what they paid then. Multiplying monthly NRR twelve times only works if every month is measured on that same cohort. 99.5% a month compounds to about 94.2% a year, not 94%; 98% a month is about 78.5%.

Sources

Checked October 14, 2026
  1. Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts)
  2. Chargebee Docs, Retention (Gross and Net Revenue Retention Rate)
  3. Chargebee Docs, What is NRR (Net Revenue Retention) and where to check this metric in RevenueStory
  4. Chargebee Docs, Recurring revenue (MRR movement summary)
  5. Recurly Docs, Subscriber retention
  6. Instructure Holdings, Form 10-K for fiscal year 2022 (SEC), Key business metrics
  7. Snowflake Inc., Form 10-K for fiscal year ended January 31, 2022 (SEC), Net revenue retention rate
  8. Chargebee Docs, What is Pause MRR and Cancellation/Churn MRR

Tagada

Keep more of the revenue you already have

Funnels, one-click upsells, subscription billing and payment routing, on one customer record.

  1. 01Create your free account
  2. 02Connect your store or build a checkout
  3. 03Launch funnels, upsells and subscriptions