Upsell: moving a customer to a more expensive plan. Cross-sell: selling them a complementary product or service.
In practice
Both are expansion-revenue levers — the most reliable way to achieve "negative churn" (see Churn), because it's almost always cheaper to sell more to an already-convinced customer than to acquire a new one. Timing matters more than technique: pitching an upsell before the customer has reached their aha moment on the base plan reads as pushy sales, not added value.
The formula
Expansion rate = MRR added by existing customers in the period (upgrades, added seats, extra modules) ÷ MRR at the start of the period
- Upsell
The same customer paying more for more of the same: a higher tier, more seats, more usage. It rides on a pricing model that has room above the plan the customer chose.
- Cross-sell
The same customer buying something adjacent: a second module, a companion product, a service. It rides on knowing which customers have the adjacent problem — which means usage data, not a list of everyone.
- Against churn
Expansion rate minus gross revenue churn is net revenue churn; when expansion wins, net churn is negative and the base grows without a single new customer. That comparison is the whole reason this lever exists.
It is almost always cheaper to sell more to a customer who already trusts you than to acquire one who doesn't — the cost of an expansion is a conversation, the cost of a new customer is a CAC. But the timing rule is absolute: no offer before the customer has reached their aha moment on what they already pay for. An upsell pitched to someone who hasn't got value yet reads as a sales tactic, and is remembered as one.
Worked example
A playbook, written down
- A project tool with a €50 plan (5 seats) and a €110 plan (15 seats). 400 customers, €20,000 MRR. Until now, upgrades happen when a customer hits the seat limit and finds the pricing page on their own.
- Playbook, three lines: (1) at 4 of 5 seats used and at least 30 days of activity, show an in-app note explaining the next tier — never before day 30; (2) at 5 of 5, the founder sends one personal email; (3) any account that added a second project type gets offered the reporting module.
- Before: about 8 upgrades a month, +€480. After a quarter: 15 upgrades (+€900) and 6 module sales at €30 (+€180). Expansion rate: from 2.4% to 5.4% of opening MRR.
- Gross revenue churn that month: 5%. Net revenue churn went from +2.6% to −0.4%: the existing base now grows by itself, before counting a single new customer.
Nothing in the playbook is clever. What changed is that the offer now happens at a signal, after value, every time — instead of whenever a customer stumbles onto the pricing page.
Orders of magnitude
- The best B2B SaaS companies report net revenue retention of 110-130%, which means expansion outruns churn by 10-30 points a year; below 100%, every year starts with a smaller base than the last. Expansion is where most of that gap is made.
- A commonly cited pattern: winning an expansion from an existing customer costs a fraction of winning a new one — figures of a quarter to a third of the CAC are often quoted, and the exact number matters less than the direction.
- Pricing models without room to grow (one flat plan, unlimited everything) make expansion structurally impossible. That is a pricing decision, and it is usually taken by accident.
How to improve it
- Give the pricing somewhere to go: tiers, seats, usage or modules. No amount of playbook fixes a single flat plan.
- Define the signals — usage near a limit, a second team, a feature request, a support question about something the next tier does — and trigger the offer from them, never from a calendar.
- Gate every offer on value already received: a minimum tenure, the aha moment reached, or an activity threshold. The fastest way to lose an expansion is to ask for it too early.
- Make the upgrade the path of least resistance: one click from the place where the limit was hit, with the price and the difference in plain words.
- Track expansion MRR as its own line, monthly, next to churn. "Some ideas, not systematic" is the Tour's 7-point answer because ideas don't show up on that line.
In the Tour
Do you have an expansion playbook (upsell/cross-sell)?
- Yes, active and used20 pts
- Some ideas, not systematic7 pts
- Nothing0 pts
"Do you have an expansion playbook (upsell/cross-sell)?" is the third and last question of the Tour — 20 for active and used, 7 for some ideas, not systematic, 0 for nothing. It closes the Revenue stage after pricing and LTV because it is the lever that turns both into growth without new acquisition. Answering 0 here is common and rarely fatal on its own; a 0 here next to a 0 on retention is the combination the whole Tour exists to point out.
Questions people ask
What's the difference between upsell and cross-sell?
Upsell: more of the same thing — a bigger plan, more seats, more usage. Cross-sell: a different thing — a second module, an add-on, a service. Upsell is driven by the customer's own growth and needs a pricing model with tiers; cross-sell is driven by adjacent problems and needs usage data to know who has them. Most companies should do the first before the second.
When is the right moment to propose an upgrade?
After value, at a signal. After value means the customer has reached the aha moment on what they already pay for — a minimum tenure or an activity threshold is the practical proxy. At a signal means the trigger is something they did (approached a limit, added a team, asked about a feature), not something on your calendar. Both conditions, every time.
How does expansion relate to negative churn?
Directly: net revenue churn = gross revenue churn − expansion. When expansion in a period exceeds what cancellations and downgrades removed, net churn is negative and the existing base grows on its own. Expansion is the only lever that can make that happen — retention work can bring gross churn towards zero, but never below it.