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.
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 answers | How much of our starting revenue did we keep? | Did our existing customers end up paying us more or less? |
| Starting base | Recurring revenue of customers active at the start | Same |
| Cancellations (churn) | Subtracted | Subtracted |
| Downgrades (contraction) | Subtracted | Subtracted |
| Upgrades and add-ons (expansion) | Left out | Added |
| New customers | Left out | Left out |
| Maximum | 100% | NoCeiling |
| Also called | Gross dollar retention | Net 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)
| Term | What it is | Typical events in subscription ecommerce |
|---|---|---|
| Starting MRR | Monthly-normalized value of subscriptions active on day one | All running subscriptions; a 600 USD yearly plan counts as 50 USD a month in Stripe's example |
| Churned MRR | MRR of subscriptions canceled or ended unpaid | Cancellations; renewals that failed and were never recovered |
| Contraction MRR | MRR lost by customers who stay, on a cheaper plan | Smaller box, cheaper product, longer delivery interval, new recurring discount |
| Expansion MRR | MRR gained from customers who stay | Bigger 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.
- Freeze the base. On October 1, 1,000 subscribers pay a total of $40,000 a month. That is starting MRR.
- 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).
- Add up gains from those subscribers. Add-ons and bigger boxes: $1,800 expansion MRR.
- 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.
- 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 period | In GRR | In NRR | Why |
|---|---|---|---|
| Customer from the base cancels | Subtracted | Subtracted | Churn |
| Renewal fails, still in retries at period end | Kept | Kept | Stripe 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 interval | Subtracted | Subtracted | Contraction |
| Customer upgrades, adds a product, shortens the interval | Left out | Added | Expansion |
| Price increase on existing subscribers | Left out | Added | Expansion; Instructure lists pricing changes among the drivers of its NRR6Instructure Holdings, Form 10-K for fiscal year 2022 (SEC), Key business metrics |
| Customer pauses | Subtracted, if you treat it as contraction | Subtracted, same rule | Chargebee 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 back | Left out | Left out | Reactivation is new revenue for this period |
| Base customer cancels and comes back in the same period | Ends at their final MRR | Ends at their final MRR | Compare start and end per customer |
| New customer | Left out | Left out | Acquisition |
| Currency moves on a foreign-currency plan | Your choice: report it apart | Same | Stripe 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
| Subscriber | Start MRR | End MRR | What happened | Counts in GRR | Counts in NRR |
|---|---|---|---|---|---|
| A | $40 | $0 | Canceled | $0 | $0 |
| B | $40 | $30 | Smaller box | $30 | $30 |
| C | $40 | $60 | Added a product | $40 | $60 |
| D | $40 | $40 | Skipped 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
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
- BaseEveryone paying on day one of the period
- MeasureTheir MRR on the last day, or start minus losses
One retention rate per month or year
Cohort method
- BaseEveryone who started paying in the same month
- 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
- Month 1
- Month 3
- Month 6
- Month 12
NRR stays above GRR by the expansion it collects
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 cohort | 12 × 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 base | ARR | Product revenue |
| Customers followed | Every customer with ARR in a given month of the prior year | Customers under capacity contracts who used the platform in the first month of the measurement period |
| Window | Same month, one year later | Trailing two years: second year's revenue ÷ first year's revenue |
| Churned customers | Included through terminations and non-renewals | Stay in the calculation at zero revenue |
| GRR disclosed | YesDowngrades and cancellations over 12 months subtracted from starting ARR | Not as a separate metric |
| Reported values | NRR 106%, GRR 94% at December 31, 2022 | NRR 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.
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.

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 SaaS | Subscription ecommerce | |
|---|---|---|
| Main expansion | More seats, higher tier, more usage | Extra product on the recurring order, bigger box, shorter interval, price increase |
| Main contraction | Fewer seats, lower tier | Smaller box, cheaper product, longer interval, recurring discount |
| Billing cycle | Often annual contracts | Mostly monthly or per delivery |
| Pauses and skips | Rare | Common, and built into most subscription apps |
| One-off purchases | Rare | Frequent: one-click upsells, add-on items, reorders outside the subscription |
| Involuntary churn | Invoices, slower to churn | Card renewals that fail and end when dunning stops |
| Typical reporting period | Annual (ARR) | Monthly (MRR), with cohorts |
The rules that keep subscription ecommerce numbers honest:
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.
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.
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.
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.
- GRR falls, NRR holdsUpgrades from a minority hide growing losses in the baseSplit losses into cancellations, failed payments and downgrades, and fix the biggest
- GRR holds, NRR fallsCustomers stay but buy less extraLook at add-on offers, box sizes and price changes
- The latest month always looks best, then gets revised downRenewals still in retries are counted as keptCompare closed periods, after dunning ends
- NRR jumps after a price increaseExpansion from pricing, not from behaviorShow price-driven expansion separately and watch GRR the next months
- GRR above 100%Expansion or new customers are in the numeratorRecompute with start minus losses, or the lower of start and end per customer
- 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.
| Column | Content | Formula (row 2) |
|---|---|---|
| A | Customer ID | |
| B | MRR on the first day of the period | Exported from billing |
| C | MRR on the last day of the period | Exported from billing |
| D | In the starting base? | =B2>0 |
| E | Counts in GRR | =IF(D2,MIN(B2,C2),0) |
| F | Counts in NRR | =IF(D2,C2,0) |
| G | Churned MRR | =IF(AND(D2,C2=0),B2,0) |
| H | Contraction MRR | =IF(AND(D2,C2>0,C2<B2),B2-C2,0) |
| I | Expansion 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.
Frequently asked questions
What is the difference between gross and net retention?
Can gross revenue retention be over 100%?
Is net revenue retention the same as net dollar retention?
What does NRR above 100% mean?
Do new customers count in net revenue retention?
How do you calculate annual NRR from monthly NRR?
Sources
Checked October 14, 2026- Stripe Docs, Billing analytics: metric definitions (MRR, MRR growth, churned revenue, retention by cohort, discounts)
- Chargebee Docs, Retention (Gross and Net Revenue Retention Rate)
- Chargebee Docs, What is NRR (Net Revenue Retention) and where to check this metric in RevenueStory
- Chargebee Docs, Recurring revenue (MRR movement summary)
- Recurly Docs, Subscriber retention
- Instructure Holdings, Form 10-K for fiscal year 2022 (SEC), Key business metrics
- Snowflake Inc., Form 10-K for fiscal year ended January 31, 2022 (SEC), Net revenue retention rate
- 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.
- 01Create your free account
- 02Connect your store or build a checkout
- 03Launch funnels, upsells and subscriptions
