Pax8 invoices are detailed, itemised down to the individual licence, but that detail is exactly what makes manual reconciliation impractical once you're managing more than a handful of clients. Here's what to check, and why it matters.
Why Pax8 reconciliation is different
Unlike a flat monthly PSA contract line, Pax8 bills you exactly what was provisioned, down to the day. That precision is good for your costs, but it means the invoice changes shape constantly: seats added, seats removed, products swapped, prices adjusted at renewal. If your client billing doesn't track that same level of change, a gap opens up almost immediately.
What to check every month
- Every licence on the Pax8 invoice has a matching line on the client's invoice
- Seat counts on the Pax8 invoice match what your PSA or contract says the client is billed for
- Any mid-month proration for seat changes has been reflected in the client bill, not just absorbed
- Unit prices haven't increased since last month without a corresponding client price update
- No licences remain active in Pax8 for a client that has already cancelled a service
The proration trap
Pax8 prorates to the day for most subscription changes. If a client adds three seats on the 10th of the month, that line item on the Pax8 invoice reflects roughly two-thirds of a month's cost, not a full month. If your client is billed a flat per-seat rate that doesn't account for the timing, you either under-recover that month or need a manual adjustment, and manual adjustments are exactly what tend to get skipped when things get busy. This is closely related to how Microsoft 365 proration works, since Pax8 is often the delivery channel for those licences.
Renewal repricing
Distributor pricing isn't static. Vendors adjust list prices, and Pax8 passes those changes through at renewal. If nobody is comparing this month's unit price to last month's, a price increase silently erodes margin on every affected seat, for every client using that product, until someone happens to notice a rising Pax8 bill without matching client price updates.
Seat drift
Over time, seat counts recorded in your PSA and seat counts actually active in Pax8 tend to drift apart, a leaver's licence doesn't get removed, a new starter gets added directly in Pax8 without updating the contract. Left unchecked, this drift moves in only one direction: more seats billed to you by Pax8 than billed by you to the client.
Doing this without a spreadsheet
All of the above is checkable manually, but doing it properly for every client, every month, is a significant time cost, and it's the first thing to get skipped when things get busy. The Pax8 integration in MSPBilling.cloud runs these checks automatically against your PSA and Xero data, flagging anomalies as they appear rather than waiting for a quarterly audit.
