Upsell and cross-sell scoring: two models for expansion revenue
Your next best deal is probably already a customer. Score them for expansion the same way you score new leads, but check they are happy before anyone pitches.
Most teams score leads carefully and treat customers on gut feel. The account manager with the loudest renewal gets the attention, and expansion happens when a customer asks for it. That leaves a lot of revenue to chance, and the share of revenue that comes from existing customers keeps growing.
In Benchmarkit’s 2025 SaaS Performance Metrics, expansion from existing customers made up a median 40% of new ARR, up five points in a year. For companies above $50M in ARR it was 58% to 67%. It is also cheaper revenue: the median CAC ratio was $1.00 for expansion against $2.00 for new logos. Meanwhile median net revenue retention sat at 101% and gross revenue retention at 88%. In plain terms, the typical company barely replaced what it lost.
Expansion is too big to leave to whoever asks first. Here are two scoring models, one for upsell and one for cross-sell, plus the check that has to come before either.
Upsell and cross-sell are different questions
- Upsell means more of what they already have: a higher tier, more seats, more usage. The best signal is a customer pressing against the limits of their current plan.
- Cross-sell means something they do not have yet: a second product, an add-on, a service. The best signal is a customer showing interest in a problem your other product solves.
They need separate models, because the signals that predict one do little for the other. A customer at 95% of their seat limit is a great upsell candidate and tells you nothing about a new product.
Score the account, then find the person
Expansion decisions are made by companies, not by one contact. Score the account first. Then use contact-level engagement to decide who to talk to: the admin who hit the limit, the new leader who asked about a feature, the power user who reads every release note.
This also stops a common mistake. A single enthusiastic user does not mean the account is ready to buy more. Five people from two departments using the product more each week usually does.
Step one: the health gate
Before any expansion score counts, check that the customer is healthy. Pitching an upgrade to an account with open escalations or a falling usage trend does not just fail. It raises the risk that they leave.
Treat health as a gate, not as one factor among many. An account that fails the gate goes to a retention play, whatever its expansion score says.
| Gate check | Fails when |
|---|---|
| Escalated or high-severity support tickets | Any open, or several in the last 60 days |
| Satisfaction | Recent NPS or CSAT response in the detractor range |
| Usage trend | Active users or core actions down meaningfully over the last 30 to 60 days |
| Champion status | Your main contact has left or changed roles and no one has replaced them |
| Billing | Past due, or a downgrade request in progress |
A note on support tickets: volume on its own is a weak signal. Busy, growing customers often log more tickets because they use more of the product. Escalations and severity say far more about how the relationship is going.
A note on NPS: use it, but lightly. Response rates are often low, and the people who answer are not always the people who decide. A detractor response is a useful red flag. A promoter response alone is not a buying signal.
Model 1: Upsell
For moving customers to a higher tier, more seats, or more usage.
Fit score
| Factor | Weight | What counts as a strong match |
|---|---|---|
| Usage against plan limits | 30% | Consistently above 80% of seats, records, or usage allowance |
| Account growth | 25% | Headcount growth, new teams, or new regions since they signed |
| Tier gap | 20% | Features they use workarounds for exist in the next tier |
| Time on current plan | 15% | Past onboarding and into steady use, usually six months or more |
| Open escalated ticket | 10%, subtracts | Any escalation still open, even if the account passed the gate |
Engagement score
| Factor | Weight | Decays |
|---|---|---|
| Hit a plan limit or saw an upgrade prompt | 30% | Half every 30 days |
| Active users growing week over week | 25% | Half every 30 days |
| Visited pricing, plan comparison, or billing pages | 20% | Half every 30 days |
| Admin engaged with release notes, webinars, or feature docs | 15% | Half every 60 days |
| Asked their CSM or support about a higher-tier feature | 10% | Half every 60 days |
- Usage against plan limits 30% 9.2
- Account growth 25% 8.3
- Tier gap 20% 6.8
- Time on current plan 15% 7.4
- Open escalated ticket 10% -5.2
This account looks like an easy upsell. It is using nearly all of its plan and the company is growing. One escalated ticket, opened after the last health check, is what holds it to a 6.8. Close the ticket first, then make the offer, and the conversation starts from a much better place.
Model 2: Cross-sell
For selling a second product, an add-on, or a service.
Fit score
| Factor | Weight | What counts as a strong match |
|---|---|---|
| Adoption of the product they own | 30% | Core features in regular use across the team |
| Profile match for the second product | 30% | Looks like the customers who already own both |
| Time since start | 20% | Six months or more, so the first product has proven itself |
| Budget owner reachable | 20% | You have a relationship with the person who buys the second product |
Engagement score
| Factor | Weight | Decays |
|---|---|---|
| Visited pages or docs for the product they do not own | 35% | Half every 30 days |
| Used an integration or workaround the second product replaces | 25% | Half every 60 days |
| Attended a webinar or event about the second product | 15% | Half every 60 days |
| New contacts from a different department engaging | 15% | Half every 30 days |
| Mentioned the problem in a call, ticket, or review | 10% | Half every 90 days |
The strongest cross-sell signal is usually a workaround. A customer exporting data to a spreadsheet every week, or wiring up a third-party tool to fill a gap, is telling you what they need. Look for it in product usage and support notes.
Profile match matters more here than in upsell. Look at the customers who already own both products and find what they share. That becomes the fit factor.
What to do with each score band
The same nine-cell grid applies: fit and engagement are each scored out of 10 and split into three bands. Any account that fails the health gate skips the grid and goes to retention. That account is unhappy, at risk, or in flux, so fix the issue and make no expansion pitch.
| Fit | Engagement 6.0 and up | Engagement 3.0 to 5.9 | Engagement under 3.0 |
|---|---|---|---|
| 7.0 and up | Account manager reaches out this week with a specific offer tied to what they did. | Account manager reaches out this week with a specific offer tied to what they did. | In-app messages and a targeted email about the next tier or product. Alert the owner when engagement climbs. |
| 4.0 to 6.9 | Self-serve upgrade path, in-product offer, or a short call if the deal is large. | Self-serve upgrade path, in-product offer, or a short call if the deal is large. | Education. Show what the next tier or product does for accounts like theirs. |
| Under 4.0 | Check the fit data first. If it holds, a light self-serve offer at most. | Check the fit data first. If it holds, a light self-serve offer at most. | Leave them alone and focus on keeping them happy. |
Time the offer to the account, not just the score. An account with fit 7.0 and up and engagement 6.0 and up, 60 days from renewal, is a natural expansion conversation. The same account three weeks after a price increase is not.
Check that the model works
Every quarter, look at what expanded and what did not.
- Did accounts with fit 7.0 and up and engagement 3.0 and up expand at a clearly higher rate? If not, the weights are wrong.
- Look at expansions that came from accounts with fit under 7.0. They point at a signal the model is missing.
- Look at accounts that expanded and then churned or downgraded. They point at a health check that is too loose.
Then track the numbers that matter: expansion revenue, net revenue retention, and gross revenue retention. A good expansion model moves the first two without hurting the third.
What you end up with
A health gate that keeps you from selling to unhappy customers, two models that separate “needs more” from “needs something else,” and a play for every band. Expansion stops depending on who asks first and starts following the accounts that are ready, with the reasons visible to everyone who works the account.