Reconciling an export with the invoice is the check that both describe the same money: export rows are tied to the invoice by its id and period, summed and compared with the invoice total, while tax, credits, refunds, marketplace, rounding and currency are explained as classes of their own. It matters for the bill because allocation, showback and the monthly report all rest on the export, but the invoice is what gets paid. Why invoice and export look different in the first place is covered in Anatomy of a cloud invoice.

How it works

Each provider puts a key in the export that ties a row to an invoice; filtering by usage date instead compares a calendar month with an invoice month.

AWS

In CUR 2.0, bill_invoice_id holds the invoice number and stays blank until the report is final. bill_billing_period_start_date gives the period, bill_invoicing_entity the AWS entity that issues the invoice, and line_item_legal_entity the seller of record, which can differ for Marketplace purchases. bill_billing_entity separates AWS Marketplace from other AWS services, and bill_bill_type distinguishes Anniversary (the month's usage), Purchase (upfront fees) and Refund. Taxes, credits and refunds are line items of their own, with line_item_line_item_type Tax, Credit and Refund. The sum of line_item_unblended_cost per bill_invoice_id is the figure that matches the invoice (AWS Cost and Usage Report and Data Exports). Where an organisation uses AWS invoice configuration to form invoice units, a member account receives the invoice, and refunds and credit memos go to the account that received the original invoice.

Azure

Under a Microsoft Customer Agreement, one invoice is generated per billing profile and month. In the cost details, InvoiceId holds the number on the invoice PDF (MCA and pay-as-you-go), and PreviousInvoiceId the original invoice for a refund. CostInBillingCurrency is the amount in the billing currency before credits and taxes. Once the invoice exists, Microsoft adds two rounding adjustment rows with ChargeType RoundingAdjustment, one for Microsoft charges and one for Marketplace, so that the cost file matches the invoice. The same two rows appear at the Enrollment scope of an Enterprise Agreement. An Enterprise Agreement has no InvoiceId in the cost details; there the billing month and PartNumber connect rows to the invoice, except for savings plans and prepurchased reservations. An EA invoice is issued only for overage beyond the Azure Prepayment, for charges billed separately and for Marketplace, and one with more than 1,000 line items is split (Azure cost exports).

Google Cloud

The key is invoice.month (YYYYMM) per Cloud Billing account. Google advises filtering on it rather than on usage_start_time, because late-reported usage can roll onto the next month's invoice. cost_type distinguishes regular, tax, adjustment and rounding error; credits sit in the credits field and are added to cost. invoice.publisher_type (GOOGLE, PARTNER) separates split invoices. The cost table report in the console shows the costs per invoice or statement with the invoice number in its header, matches the invoice total with default filters and downloads as CSV; since January 2021 Google's invoices refer to it for the detail (Google Cloud billing export).

FOCUS 1.4

FOCUS version 1.4, ratified on 2026-06-04, adds the Invoice Detail dataset, the line items as they appear on the invoice, and the Invoice Reconciliation feature: Cost and Usage and Invoice Detail are joined on InvoiceId, InvoiceDetailId allows reconciliation per invoice line, and InvoiceIssuerName names the issuer. Tax typically sits only in Invoice Detail, and a Rounding Variance Tolerance appendix defines how much rounding difference between high-precision cost data and two-decimal invoice amounts is acceptable. On the read date the three providers' FOCUS exports followed version 1.2 at most and describe no Invoice Detail dataset (FOCUS columns and the providers' mapping).

What it means for your cost

ProviderInvoice key in the exportWhat appears on one side onlyTotal to compare
AWSbill_invoice_id, blank until finalupfront fees and refunds as bill types of their own, Marketplace under its own billing entityline_item_unblended_cost per invoice id
Azure MCAInvoiceId per billing profiletax and credits on the invoice only; rounding rows only after invoicingCostInBillingCurrency plus rounding rows
Azure EAbilling month, PartNumberPrepayment consumption without an invoice amount, tax on the invoice only; rounding rows only after invoicingUsage + Charges in the portal, excluding tax
Google Cloudinvoice.month, invoice.publisher_typenothing in principle: tax, adjustments and rounding are export rowscost plus credits.amount per invoice month

A reconciliation runs in five steps:

  1. Choosing the invoice: number, issuer, period, currency, total with and without tax.
  2. Filtering the export by that invoice's key, on AWS only after finalisation, on Azure only once the rounding rows exist.
  3. Comparing totals in the invoice currency with exact arithmetic: Google shows that floating-point sums produce rounding errors and converts to micros before summing.
  4. Explaining the difference class by class: tax, credits and refunds (Credits, refunds and corrections), Marketplace, support, rounding, currency (Invoice currency and exchange rates) and usage billed on another invoice (Billing periods, cut-off and late charges).
  5. Taking what remains to the provider: AWS reviews cost data on a support case naming the report and billing period, and Microsoft asks for the invoice id in a support request.

A cost report that passed reconciliation records which invoice and which state of the export it was checked against; otherwise a later restatement changes the figure unnoticed (Freshness, restatements and finalisation). How a difference is booked is for the reader's accountant or auditor, not for the reconciliation.

Where it goes wrong

  • Calendar month instead of invoice month. Symptom: export and invoice differ by a few days of usage. Cause: the filter used the usage date; on Google Cloud late-reported usage sits on the next month's invoice, and adjustments on the invoice of the month they were issued.
  • Reconciling before finalisation. Symptom: the AWS total matches no invoice, and on Azure a small difference remains. Cause: bill_invoice_id is blank until finalisation, and the Azure rounding rows only appear with the invoice.
  • Looking for tax in the export. Symptom: the Azure export falls short of the invoice by the tax amount. Cause: CostInBillingCurrency is the amount before credits and taxes.
  • Several invoices for one month. Symptom: the export total exceeds the one invoice that was checked. Cause: AWS keeps upfront fees, refunds and Marketplace apart, Google splits by publisher, and an EA invoice with more than 1,000 line items is split.
  • A partner's invoice. Symptom: a reseller's amounts do not match the export. Cause: the invoice is the partner's document; on Google Cloud the invoice header shows only on the reseller's parent account, and for indirect EA enrolments the portal shows costs only once the partner enables the markup function.

Sources

Read on 2026-10-16. AWS Bill columns, Line item columns, Customizing your invoice preferences with AWS invoice configuration, Troubleshooting Cost and Usage Reports, What is AWS Data Exports?; Microsoft Review your Microsoft Customer Agreement bill, Review your Azure Enterprise Agreement bill, View and download Azure usage and charges, Understand usage details fields, FOCUS cost and usage details file schema; Google Structure of Standard data export, View and download the cost details of your invoice or statement, Structure of FOCUS data export; FinOps Foundation FOCUS Specification 1.4, Invoice Reconciliation, Invoice Detail, Invoice and Billing Period Handling, Introducing FOCUS 1.4.