The Expansion-Revenue Playbook: How to Grow NRR Past 100%
Upsell, cross-sell, and seat or usage expansion are the three moves that push NRR past 100%, each fired by its own product signal, and sizing them against the gross-revenue-retention gap (1 − GRR) tells you how much expansion you actually need.

Upselling, cross-selling, and seat or usage expansion are the three ways you grow revenue from existing customers. That growth is the only input in the NRR formula that adds to the base. Which one you reach for depends on where the customer is in their lifecycle and what they're doing in the product.
Across the subscription businesses we’ve helped, the teams that grow past 100% don't run a separate expansion department. They time their offers around the same product signals they already watch to catch at-risk accounts.
Do that, and your existing base grows on its own, with no new sales needed to cover the losses.
Key takeaways
- Feed all three expansion moves into one number, your expansion monthly recurring revenue.
- Push expansion revenue past your losses and net revenue retention crosses 100%.
- Fire each move on a behavioral product signal, timed to what the customer does.
- Size expansion to your gross revenue retention gap before your top-line target.
- Route an at-risk account to a save offer before any upgrade prompt.
- Existing accounts convert at 3-12x the rate of a net-new prospect.
What is expansion revenue in SaaS?
Expansion revenue is the extra MRR you earn from current customers, through a plan upgrade (upsell), an added product or module (cross-sell), or growth in seats or usage. It's what makes net revenue retention exceed 100%. Every other term in the formula subtracts from the base, and expansion is the only one that adds to it.
The three moves answer three different customer questions, which keeps them distinct.
- An upsell answers "do I need more of what I have?", so it fires on a plan limit or a feature gate.
- A cross-sell answers "do I need something next to what I have?", so the trigger is an adjacent job showing up.
- Seat or usage expansion answers "do I need more people or more consumption?", and it fires when a team grows or a usage milestone lands.
Confuse them and you send the wrong offer at the wrong moment.
Expansion revenue isn't the same as new-customer MRR, and NRR is built to expose that difference. A new logo never counts toward NRR, because NRR only counts the accounts that were already in the base when the period started.
Win back an old account or grow an existing one and it moves NRR. Sign a brand-new logo and it doesn't. All three moves show up as expansion MRR on your books.
What are the three types of expansion revenue?
The three types of expansion revenue are upsell, cross-sell, and seat or usage expansion, each tied to a different change in the account. They share one revenue input but read different signals:
- Upsell: the customer moves to a higher plan or tier of the same product.
- Cross-sell: the customer adds a separate product or module beside what they have.
- Seat or usage expansion: the account grows seats or consumption with no plan change.
Each one is a route into expansion revenue, and each fires on its own trigger. The rest of this playbook maps those triggers to the right offer.
Why most expansion motions miss the NRR target
Most expansion motions only break even. They earn just enough to replace what churn took, so the base stays flat. Teams size the motion for top-line growth when they should size it to the specific NRR gap they have to close.
That gap is set by gross revenue retention, and most teams never do the subtraction.
Start from the formula. NRR is (Starting MRR + Expansion MRR − Contraction MRR − Churned MRR) ÷ Starting MRR.
Say your gross revenue retention (GRR) is 85%, your expansion rate is 8%, and your NRR lands at 93%. The base has already lost 15 cents per starting dollar, so expansion needs a 15% rate just to break even. The gap to parity closes one of two ways. Cut what's dragging GRR down, or double the expansion rate.
Most teams reach for the second and build a bigger upsell program before they've fixed the cancels and downgrades behind that number. They take on the harder job first.
This math has an edge case. A flat-rate product with one tier and no seat model can only expand through usage growth. Remove the usage axis too, and the break-even mark is out of reach through expansion alone. Then the only way left to protect revenue is defending GRR.
Use the NRR calculator to model what your current expansion rate does to your number at different GRR baselines.
The Expansion Trigger Stack
The Expansion Trigger Stack matches each expansion move to the product signal that should fire it. Read the signal first, then run the action it points to. The four sections below each take one signal and turn it into one action.
The order matters because the signal sets everything downstream. The signal tells you the move, the move tells you the offer, and the offer sets the timing. That timing decides whether the customer feels served or sold to.
Upsell on a plan-limit signal
Fire an upsell when an account hits or approaches a hard limit on its current plan. The limit might be a seat cap, a usage quota, or a gated feature the account keeps trying to reach. Through that behavior, the customer is telling you they've outgrown the tier they're on.
The signal has to hold to count.
An account that brushes its seat cap once and settles back under it is noise. One sitting at the cap across two billing cycles is a real constraint. When that pressure holds, the next tier feels like the fix for a problem the customer already has, so the offer lands as help.
Where you place the offer matters as much as when. A seat-limit upgrade belongs in the product, at the moment the account hits the cap, so the prompt sits next to the work it unblocks. The same offer mailed out a week later, detached from that moment, converts far worse.
You can find the full build, from detecting the signal to measuring the result, in the upsell execution guide and its Upsell Trigger Framework.
Cross-sell on an adjacent-use signal
Fire a cross-sell when an account's behavior shows a second, adjacent job appearing beside the one your product already does. The trigger isn't a limit on the current plan but a new need becoming visible in how they use the tool.
That signal usually shows up as an integration switched on, a workflow that reaches into a separate module's job, or a feature request for an adjacent task. Take an account on your analytics product that starts exporting reports into a shared drive every week.
That account just revealed a second job to do, sharing results with people who don't log in, and the fitting offer is a reporting or dashboard module.
When you see a signal like that, offer the cross-sell that solves the new job rather than a bigger version of the plan they already have. Match the offer to the kind of signal, since a request for something new won't be answered by more of the same.
Seat and usage expansion on a growth signal
Fire a seat or usage expansion when a team-growth event or a consumption milestone shows the account is growing, with no plan change required. This is the land-and-expand motion, where a small first purchase grows into a larger account as the customer uses the product more.
The signal here is structural growth in the account itself. You see new users provisioned, a department onboarded, or API calls and storage climbing month over month.
The account is already growing on its own, so the offer just puts that on paper. A seat-add or a higher usage tier matches what's already happening.
For products billed on a usage axis, much of this expansion happens on its own as consumption rises. That's why land-and-expand works without a sales rep on lower-ticket and self-serve accounts.
The trap is a one-off heavy month that looks like real growth, so confirm the climb holds before you move an account onto a larger commitment.
When to route an account to a save offer instead
When an account shows an at-risk signal, a falling customer health score, a support escalation, or dropping usage, route it to a save offer, not an expansion offer.
Send an upgrade prompt to a customer who's pulling away, and you confirm you're selling rather than helping. That speeds up the exit you were trying to prevent.
The save route is the base the whole expansion motion depends on. Catch an at-risk account in a cancel flow and keep it with a downgrade or pause, and you've turned churned MRR into a retained account.
That account stays in the base, and it stays eligible for expansion later. A saved account can upgrade again once its situation changes, while a cancelled one has to be reacquired from scratch before it can expand at all.
Let it cancel, and you lose the account and every future upgrade it might have taken. Send those at-risk accounts through Churn.io's cancel flow instead, and you stop losing customers you could still expand.
What the data says about expansion and NRR
Selling to an existing customer is structurally easier than selling to a new one, and the data is clear.
According to Paul Farris's Marketing Metrics, the probability of selling to an existing customer is 60-70%, while a new prospect closes at 5-20%. That makes an upsell or cross-sell 3-12x more likely to convert than a net-new pitch from the same spend.
The economics compound with cost.
Expansion revenue costs roughly half as much to win as new-logo revenue. The account is already active, the product fit is already proven, and there's no trust barrier to clear. A new logo needs all of that built from zero, which is what makes acquisition so much more expensive per dollar of revenue.
So the same dollar of acquisition budget buys more recurring revenue from the existing base than it does chasing a new logo.
The conversion advantage assumes a healthy account at the right lifecycle stage. Push an expansion offer at an at-risk account and you don't inherit that rate. That's why the save-route step in the Expansion Trigger Stack exists before any upgrade prompt.
The data makes the case for an expansion motion. The rate math from the section above tells you how much to ask of it.
FAQ
What is the difference between upselling and cross-selling?
An upsell deepens the purchase the customer already made, while a cross-sell widens it with a separate product.
How do I know if my expansion rate is high enough?
Your expansion rate is high enough to reach 100% NRR when it clears your GRR gap, which is one minus your gross revenue retention. Divide your expansion MRR by your starting MRR for the period, then compare it against that minimum.
How do you upsell without being pushy?
An offer feels pushy when it lands on a renewal date and feels like service when it lands on a behavioral signal the customer has already sent. Trigger the offer when the account hits a limit or outgrows its plan, and the upgrade comes across as the obvious fix to a constraint they feel.
Does land and expand work for B2C subscription products?
Land and expand works for B2C, but it runs on in-app behavioral prompts rather than account-manager outreach. Seat adds rarely apply, so a consumer or prosumer product expands through plan upgrades and add-on products, triggered by what the customer does in the app.