Skip to content

Cerberus field notes

Your Azure costs and your CSP invoice disagree. Usage usually isn't why.

We reconciled two months of an MSP client's Azure costs against their CSP distributor's billing. Usage matched to within 0.1%. Here is where the real gaps came from.

By Marc Bradean

Every MSP that resells Azure through CSP has had the same email from a client: the number in the cost report doesn't match the invoice. Once that happens, the client stops trusting both, and every saving you show them afterwards comes with an asterisk.

This summer we spent two days finding out exactly where those gaps come from. We took an MSP client spending about £14,000 a month on Azure and reconciled two months of cost data in Cerberus Cloud, line by line, against the CSP distributor's own billing portal.

The headline: usage matched to within 0.1%, and every meter category matched to the penny. The differences people argue about were never about what the client consumed. They came from everything around it.

Where the gaps actually came from

Scope. The distributor's export was usage only. It left out reservation purchases, which Azure records as separate charges, while Cerberus captured them from the cost data. Both systems were right; they were measuring different things. In Azure's own data, reservation purchases sit in the actual cost dataset with a charge type of Purchase, and the usage they cover is priced at zero (Microsoft Learn). Compare a usage-only export with full actual cost and you will always be "out" by your reservation purchases.

Distributor pricing. The one thing Azure's cost data couldn't show was the distributor's own uplift on reservations. That pricing lives in the distributor's billing, not in Azure, so no tool reading Azure will ever see it on its own.

Rounding. The last 0.1% was arithmetic. We round each line; the distributor's export rounds once on the total. Across a month of line items that produces a small, systematic difference, not an error.

Labels. Reservation-covered usage appeared under one reservation label in the export, while we resolved the actual SKU it ran on. Same rows, same £0.00, different names. Easy to mistake for a mismatch if you compare by label.

There is a fifth gap your clients may meet even before any of these. In a CSP client's own tenant, Azure Cost Management shows pay-as-you-go retail rates, and Microsoft states those costs don't include any discounts or credits the partner may have (Microsoft Learn). A client comparing their Azure portal with your invoice is comparing two different price lists.

How to reconcile it yourself

You don't need special tooling to check your own numbers. The method we used:

  1. Filter the Azure cost data to usage only, so you compare like with like.
  2. Compare per meter category, not on the grand total.
  3. Treat what's left over as purchases: filter on a charge type of Purchase and check the reservation order IDs.
  4. Expect a small, consistent rounding difference if one side rounds per line and the other on the total.

If a gap survives those four steps, it is pricing: an uplift or discount applied by your distributor or by you.

Making the figures match the invoice

That last category is why we added per-client adjustments to Cerberus Cloud: a percentage discount or uplift on all costs, on reservations and savings plans, or on Marketplace purchases. Reports use the adjusted figures and savings estimates are recalculated from them, so the saving you promise a client is a saving on the invoice they actually pay.

Clients don't renew a FinOps service because the dashboard is pretty. They renew because the numbers hold up when their finance team checks them. We wrote up the full approach on Azure CSP invoice reconciliation, including what each kind of gap looks like in practice.

About the author

Founder of Cerberus Cloud. Before starting Cerberus, Marc worked in cloud cost optimisation consulting.

Run Azure FinOps as a service across every client tenant

Cerberus Cloud is the multi-tenant Azure FinOps platform for MSPs: read-only access, findings ranked by recoverable value and remediation scripts your team can deliver.