How do I find cross-sell opportunities in my MSP client base?
Map what every customer buys against everything you sell. The gaps are your pipeline — and most of the data is already in your PSA.
Build a coverage grid: every customer down one side, every service you sell across the top, and a mark in each cell where that customer is actually billing for that service. The empty cells are your whitespace — services the customer does not buy from you yet. That grid is the entire answer, and the data behind it already exists in your PSA contracts.
Why this beats a prospecting list
Selling to an existing customer skips almost everything expensive about selling. There is no marketing spend, no discovery call to establish credibility, no procurement cycle to survive, and no question about whether you can deliver — you already do, every month. The relationship, the agreement, and the trust are in place, so the only missing piece is the conversation.
Do it manually first
- Export active recurring contracts and their service lines from your PSA.
- List the services you actually sell, grouped into 20 to 30 offerings rather than every SKU.
- Pivot one against the other and mark each cell covered or empty.
- Sort by contract value, so the biggest customers with the biggest gaps rise to the top.
This works, and it is worth doing once by hand to see the shape of your book. The catch is that it goes stale within a fortnight, which is why most MSPs rebuild it once a year the week before a QBR and then let it rot.
Separate coverage from demand
A gap alone tells you what someone lacks, not whether they want it. The second signal lives in your service desk: customers describe the problem a service would solve long before they buy the service. Somebody asking repeatedly about phishing emails is telling you something about security awareness training. Pair the coverage gap with that demand signal and a cold list becomes a ranked one. See how Current builds this automatically.
Rank the gaps, do not just list them
A raw list of every missing service across every customer is demoralizing and gets ignored. Three sorts make it actionable. Sort by contract value, because the same service sold to your largest customer is worth more effort. Sort by how many customers share a gap, because a service missing from thirty accounts is a campaign rather than thirty conversations. And sort by evidence, because a customer who has raised the underlying problem is a warm conversation and one who has not is a cold one.
Watch for the false gap
Not every empty cell is an opportunity, and treating them all as opportunities is how a whitespace exercise loses credibility in its first week. A customer may already buy that service from a specialist and have no intention of moving. They may have declined it explicitly last year. It may be genuinely inappropriate for their size or sector.
Record those decisions somewhere the grid can see, or your team will re-pitch the same declined service every quarter and the report will get a reputation for wasting people's time.
Make it somebody's job
The most common failure is not analytical, it is organizational. A whitespace report with no owner produces no revenue no matter how accurate it is. Assign the gaps to the account owner, put them in the pipeline as real opportunities with real close dates, and review them in the same meeting where you review everything else. A gap that never becomes a tracked deal is a gap you have merely admired.
A reasonable first sprint
- Pick one offering that most of your book is missing and that you are confident delivering.
- List the twenty largest customers without it.
- Check each for evidence they have raised the underlying problem in the last quarter.
- Give the evidenced ones to account owners as real opportunities with dates.
- Measure what closed, then decide whether to widen the net or pick a different offering.