Every MSP we've talked to has the same quiet leak somewhere in their Microsoft 365 reselling: the number of licenses they're paying Pax8 for doesn't match the number of seats they're billing the client for. Sometimes it's two seats. Sometimes it's twenty. It's almost never zero.
The leak isn't dramatic, which is exactly why it survives for years. A client offboards three people in March, your account manager removes them from the tenant but not from the invoice line — so you keep billing for three ghosts, which feels like found money until an audit catches it and you're writing a refund. Or the reverse, far more common: a client adds eight seats over six months of organic growth, Pax8 dutifully charges you for eight more licenses every month, and your flat invoice line still says the original count. Now you're eating the cost of eight Business Premium seats and calling it "service."
This is a reconciliation problem, and reconciliation problems are boring, repetitive, and exactly the kind of thing that should be automated. So let's talk about how.
Why the counts drift in the first place
There are three systems of record involved, and none of them talk to each other natively:
- Pax8 knows what you're buying — the subscription quantities you're billed for as the reseller, per client, per SKU.
- Microsoft 365 (the tenant) knows what's assigned — how many of those licenses are actually attached to a live user.
- Your billing — the recurring invoice line, the contract config, whatever lives in QuickBooks — knows what you're charging.
Drift happens whenever two of these fall out of step. The painful one for margin is when Pax8 quantity exceeds billed quantity: you're paying for licenses you're not recovering. The painful one for trust is when assigned exceeds purchased: a client is using a seat nobody provisioned through Pax8 (shadow licensing, trial spillover, a domain you forgot to put under management). The third gap — billed exceeds assigned — is the refund-waiting-to-happen.
Manually, the way most shops catch this is a quarterly spreadsheet export: download the Pax8 invoice, pull the client list, eyeball it against the recurring invoice. It works, sort of, until you have forty clients and the person who built the spreadsheet leaves. The whole point of building Morton Command Center was to make the boring reconciliation passes something a machine does on a schedule, not something a human does when they remember to.
Pulling the Pax8 side cleanly
Pax8 is a clean distributor integration to build — the API is real, it's stable, and it gives you subscriptions, usage, products, companies, and invoices per reseller account. We build your Pax8 integration as part of your engagement so the license counts you're billed for show up in Morton Command Center as data you can actually query and compare — not a PDF you squint at once a quarter. And because the platform is API-driven, the reconciliation logic isn't Pax8-specific: any distributor that exposes an API can feed the same pipe — we build that integration custom to your stack.
That matters because the first half of any reconciliation is just getting both numbers into the same place in the same shape. A Pax8 subscription quantity and a QuickBooks invoice line quantity are conceptually "the seat count," but they live in different vendors with different identifiers for the same client. If you can't line up "Acme Corp in Pax8" with "Acme Corp in QuickBooks," you can't reconcile anything — you're looking at two unrelated lists.
This is where the mapping work pays off. Morton Command Center keeps vendor-to-vendor crosswalks so one company record ties together its Pax8 account, its QuickBooks customer, and the rest of its stack. Once that crosswalk exists, "what does Pax8 say vs. what are we billing" stops being a two-spreadsheet join and becomes a per-company line you can read at a glance.
Lining it up against what you bill
On the billing side, the source of truth for what you charge is your accounting system. We build your accounting integration as part of your engagement, custom to your stack — your accounting system (QuickBooks Desktop via the Conductor sync, QuickBooks Online, Xero, Sage, NetSuite, or anything with an API) connects the same way, and once it's wired we create and read invoices in it directly. The recurring-invoice and client-billing views then show, per client, the quantities and line items you're actually putting on the invoice each month. If your tool has an API, we build the integration for it. If you want the dedicated rundown of that side of the pipe, the Pax8 to QuickBooks billing page walks through how the distributor data feeds the invoice.
So the reconciliation is conceptually simple once both halves are normalized:
- Pax8 quantity = billed quantity → clean, no action.
- Pax8 quantity > billed quantity → you're paying for seats you're not recovering. This is the margin leak. Flag it, decide whether to bill the difference or right-size the subscription.
- Billed quantity > Pax8 quantity → you're charging for more than you're buying. Either the client genuinely has those seats through another path, or it's a stale line you need to correct before they notice.
The value isn't the arithmetic — anyone can subtract two numbers. The value is that the comparison runs across every client at once, on a cadence, instead of one client at a time when something prompts you to look. A drift of three seats on one client is a rounding error; the same three-seat drift across thirty clients is a five-figure annual leak, and you'd never feel it line by line.
Where M365 fits — and where it doesn't
A quick accuracy note, because it's easy to over-promise here. We build your directory integration to read license and seat counts as a read-only view into what's assigned in the tenant. That gives you the third leg of the triangle: not just "purchased vs. billed," but "purchased vs. assigned" too, which is how you catch a client who's quietly outgrown their license pool. And it's not Microsoft-specific: any directory or identity platform with an API — Microsoft 365, Google Workspace, or anything else — can supply the same assigned-seat signal; we build that integration custom to your stack.
What we don't do — and won't claim to — is reach into M365 and add, remove, or reassign licenses for you. That's the tenant admin's job and the vendor's surface. Our role is to surface the gap so a human makes the call. Same posture across the board: we read distributor and directory data, normalize it, and flag the drift; the actual seat changes happen where they should, in Pax8 and in the tenant.
Turning a quarterly chore into a standing report
The whole reason license drift survives is timing. A quarterly audit means a license added in week one of the quarter goes unbilled for up to thirteen weeks before anyone notices. Move the same check to a near-real-time cadence — our Pax8 and billing data refresh on cron-warmed cycles, so you're never reconciling against a six-week-old snapshot — and the window where a drift can hide collapses from a quarter to days.
The honest framing: this is "within minutes of the last sync," not a live socket into Pax8. But for reconciliation that's more than enough. You don't need to know the instant a seat is added; you need to not be three months behind. Put the reconciliation in front of whoever owns billing as a standing report instead of a heroic quarterly project, and the leak stops being structural. License counts are just one input here — the same drift-detection mindset applies to your whole MSP billing reconciliation surface, from block hours to recurring contracts.
If you want the bigger picture of how the Pax8-to-billing pipe fits together end to end, we wrote up the full automation flow in Pax8 to QuickBooks billing automation for MSPs. This post is the audit half of that story — the part that catches what slipped through before you ever push an invoice.
A reconciliation pass you can run this week
You don't need new software to start. Pull your last Pax8 invoice and your last batch of recurring invoices, pick your ten biggest clients, and line up the seat counts SKU by SKU. We'd bet you find at least one drift in the first ten — and that's your business case for making the check continuous, because the drift you found today has been there for months and the next one is forming right now.
When you're ready to stop running that pass by hand, that's exactly the kind of cross-vendor reconciliation Morton Command Center is built to keep warm for you — Pax8 on one side, your QuickBooks billing on the other, drift flagged in between. Morton Command Center uses transparent flat-rate pricing — no per-seat, per-client, or per-invoice fees — so the tool that catches your license drift isn't quietly creating its own. See current pricing on the homepage →