Guide
MSP profitability: the margin you lose on unbilled license seats
How unbilled and underpriced Microsoft 365 seats eat MSP profitability, how to measure the margin per client, and a monthly routine that keeps it.
Most conversations about MSP profitability are about labor: technician utilization, ticket volume per user, the clients who call too much for what they pay. Those matter most. But there is a quieter line in the numbers that is easier to fix: the licenses you resell. Every month you pay your distributor for Microsoft 365 seats, and every month you bill clients for them. The margin between those two numbers is small enough on a single seat that nobody watches it, and that is exactly why it leaks.
This guide shows where license margin goes, how to measure it per client, and a routine that keeps it from drifting.

Where license margin goes
There are five ways a resold seat stops making money. All of them happen without anyone deciding they should:
- Under-billed seats. A client adds users, you pay for the new seats, the invoice keeps last month's count.
- Never-billed products. A client gets a product (a security add-on, a second license type) that no invoice line covers.
- Billed below cost. Your cost rises at a renewal or a price change and the client's price stays where it was.
- Unused seats you cannot release. Under Microsoft's new commerce rules, seat reductions are only possible in a short window after the seats were added or renewed (Microsoft's cancellation policy). If a client lets users go mid-term and your agreement does not pass that commitment on, you carry the seats until renewal.
- Cancelled but still billed. The reverse leak: you stopped paying, the client did not. It looks like extra margin until the client finds it, and then it costs you a credit and some trust.
The first four lose money directly. The fifth loses it later, with interest.
The arithmetic, with example numbers
Take one illustrative client. You pay $20.00 per seat per month for a license and bill it at $22.00. That is $2.00 of margin per seat.
- The client has 42 seats at the distributor and 38 on the invoice. You collect 38 x $2.00 = $76.00 of margin, and pay 4 x $20.00 = $80.00 for seats nobody pays for. On that line you are $4.00 a month behind, where you expected to be $84.00 ahead.
- Now your cost goes to $21.00 at renewal and the price stays at $22.00. Your margin per seat halves without anyone touching the agreement.
The numbers are made up, but the shape is not: when the margin per seat is a small fraction of the price, each unbilled seat cancels out the margin on several billed ones. That is why license profitability is decided by counts and prices being right, more than by the markup you chose.
Measuring license margin per client
You need the same two exports every month:
- What you paid: your distributor's bill detail (Pax8, Sherweb, or the Partner Center reconciliation file), netted per client and product.
- What you billed: your invoice lines from QuickBooks or your PSA for the same month.
Then, per client:
| Column | Formula |
|---|---|
| License cost | Sum of distributor cost for the client |
| License revenue | Sum of invoiced amounts for license items |
| License margin | Revenue minus cost |
| Margin % | Margin divided by revenue |
| Seats paid | Sum of distributor quantity |
| Seats billed | Sum of invoiced quantity, times seats per unit for bundles |
| Seat gap | Seats paid minus seats billed |
Sort by margin %, lowest first. A client with a negative license margin almost always has a seat gap or a stale price. A client with an unusually high margin is worth a look too: it may be billed for something that was cancelled.
If you sell per-user bundles, split the bundle price into a license portion and a services portion once, and use the license portion here. Otherwise every bundled client looks wildly profitable on licenses and you learn nothing.
The routine that keeps it
Profitability work tends to be a quarterly review. License margin needs to be monthly, because every month a gap stays open is a month you paid for. A routine that fits in the billing cycle:
- When the distributor bill arrives, export its detail and check the total.
- Export the matching month of invoice lines.
- Compare seats and prices per client and product; sort the differences by dollar value.
- Fix under-billed, never-billed and below-cost lines before the next invoice run.
- Stop cancelled-but-billed lines and decide on credits.
- Note intentional differences (internal seats, free seats you chose to give) so they do not come back.
- Once a quarter, review license margin % per client and raise prices where your cost moved.
Beyond the routine, two policy choices protect margin for good: make sure your client agreements say how mid-term seat reductions are handled under annual commitments, and decide whether new seats are billed from the day they are added or from the next invoice. What fits depends on your contracts and clients.
Making the monthly check automatic
The routine is simple and still gets skipped, usually in the busiest month. License Drift does the comparison from your distributor export and your QuickBooks or PSA invoice export. It remembers which clients and invoice items go together, flags under-billed, never-billed, below-cost, over-billed and cancelled-but-still-billed lines with a monthly dollar estimate, and emails the list. A reminder arrives on the day of the month you choose. The license reconciliation guide shows the same check as a spreadsheet.
Find the Microsoft 365 seats you pay for but don't bill
License Drift compares your distributor's seat counts and costs with each client's invoices, and emails the under-billed, over-billed and cancelled-but-still-billed lines. A monthly reminder tells you when to run it.
$99/ month
Get startedCancel any time.