All posts

July 28, 2026 · Marketopia

Unbilled Seats: The Quietest Revenue Leak in Your Book

Most MSP revenue leaks are loud. A client churns, a project slips, a big invoice gets disputed. Everyone notices.

Seat drift is the quiet one. A client signs for 38 seats. Over two years they hire, open a second location, absorb a small competitor — and end up at 51. Every one of those thirteen new people got onboarded by your helpdesk, got an endpoint agent, got included in your backups, and generates tickets. None of them appear on the agreement.

At $95 a seat, that is $14,820 a year of service you are delivering for free to one client. Nobody did anything wrong. The agreement simply never caught up with the business.

Why Nobody Catches It

The mechanism is worth understanding, because it explains why "just check the agreements" has never worked.

Onboarding and billing are different systems and different people. A new hire arrives as a helpdesk request. The tech provisions the account, installs the agent, and closes the ticket — correctly. Nothing in that workflow touches the agreement record, and nothing prompts anyone to update it.

Growth is gradual. Nobody adds thirteen people in a week. They arrive one and two at a time over twenty-four months, and no single arrival is big enough to trigger a review.

The true-up conversation is uncomfortable. Even when someone notices, raising it means telling a client their bill is going up and implying you have not been counting. That discomfort is enough to make it wait until "next quarter" indefinitely.

Nobody owns the number. Account management assumes finance reconciles. Finance bills what the agreement says. The agreement says 38.

How to Measure Seat Drift

You need two numbers per client and they live in different systems.

Contracted seats come from the PSA — agreement additions, per line item. Be careful here: one client often has several agreements with overlapping seat counts, and the naive sum double-counts. Count the line item that actually corresponds to the managed service you deliver per person.

Actual seats are messier, and the right source depends on what you sell. For per-user managed services, licensed Microsoft 365 users is usually the closest proxy. For per-device, it is endpoints reporting into the RMM in the last 30 days. Pick one definition, write it down, and use it consistently — an argument with a client about which number is real is worse than not having the number.

Then subtract. Do it for your ten largest clients and you will find drift in most of them.

The direction matters as much as the size:

  • Actual higher than contracted — you are under-billing. This is the common case.
  • Contracted higher than actual — the client is over-paying. Less common, and you want to find this one first for the same reason you want to find license waste first.

What It Is Worth Across a Book

Take a 40-client MSP at $95 per seat per month:

Average drift per clientAnnual leak
3 seats$136,800
6 seats$273,600
10 seats$456,000

Those numbers look implausible until you run them on your own book. Six seats of average drift across forty clients is not an aggressive assumption for any MSP that has been operating for more than three years without a systematic true-up process.

This is also the cheapest revenue available to you. There is no sale to make, no competitor to beat, no new service to build. The work is already being delivered. The only thing missing is the invoice line.

Having the Conversation Without Damaging Trust

The reason seat drift persists is that the fix feels like an accusation. It does not have to.

Own the miss. "Our agreement says 38 seats and we are currently supporting 51. That gap is on us — we should have been reconciling this quarterly and we were not." An MSP who takes responsibility for the process failure gets a very different reception from one who presents an invoice adjustment.

Do not backdate. The temptation is to ask for eighteen months of arrears. Resist it. Backdating turns a routine correction into a dispute, and the relationship cost is worth more than the recovery. Correct forward from the next billing cycle.

Show the work. Bring the endpoint list or the licensed user list. "Here are the 51 machines we are managing" is a fact the client can verify. "Trust us, it is 51" is a negotiation.

Fix the process out loud. Commit to a quarterly reconciliation and then actually do it. The second conversation, three months later, is trivial — two seats, adjusted, no drama. It is the two-year silence that makes the first one hard.

Check the other direction first if you can. If any client is over-paying, correct that in the same round. An MSP who reduces one client's bill and raises another's in the same week is running a process. An MSP who only ever raises bills is running a collection.

Build the Loop So It Never Recurs

The one-time recovery is the smaller prize. The process is the larger one.

Quarterly reconciliation as a standing QBR item. One line: contracted seats, actual seats, variance. Ninety seconds. Over time the variance stays near zero and the conversation becomes routine.

A trigger on the onboarding workflow. When a client's seat count crosses a threshold — say five over contract — someone gets told. This is the highest-leverage fix and most PSAs can be made to do some version of it.

Track the trend, not just the level. A client drifting up by two seats a quarter is growing, which is a different conversation from a client that jumped fifteen in one month because they acquired someone. Growth is an upsell signal. A jump is a project.

Frequently Asked Questions

Should we bill retroactively for the seats we missed?

Generally no. The recovery from backdating rarely exceeds the relationship damage, and it converts a correction into a negotiation. Correct forward, be transparent about how long it went unnoticed, and put the process in place that stops it recurring. The exception is a client who has clearly and knowingly under-reported — a different conversation entirely.

Which number is "actual" — licensed users, endpoints, or headcount?

Whichever matches what you sell, and it must be the same every quarter. Per-user managed services usually reconcile best against licensed Microsoft 365 users; per-device services against endpoints active in the RMM in the last 30 days. Write your definition into the agreement so the reconciliation is arithmetic rather than opinion.

What if the client disputes the count?

Show the list. Not the number — the list. Machine names or user principal names are checkable, and clients almost never dispute a list they can read. Disputes come from asserted totals, not from itemized evidence.

Isn't this what our PSA is supposed to do?

Your PSA records what you agreed to bill. It has no visibility into how many endpoints your RMM is actually managing or how many Microsoft users exist. The reconciliation lives between systems, which is precisely why it does not happen by itself.


MSProspector is built by Marketopia, the MSP channel's growth partner since 2014. Client Upsell reconciles contracted seats against what your RMM and Microsoft 365 actually report, per client, and flags the drift in both directions. See how it works.

Walk into your next meeting prepared.

MSProspector generates a 70+ page business + technical baseline on any prospect or client in 15 minutes. First 2 reports free.

Get my first 2 reports free