FOCUS is the open column schema for billing data that AWS, Azure and Google Cloud each publish today as an export of their own, so that FinOps teams can read three providers with one query; written out, it is the FinOps Open Cost and Usage Specification. It matters for the bill because the FOCUS cost columns fix which number is the invoice, which was the list price and which is the amortized view, and because each provider fills those columns differently.

How it works

FOCUS is an open specification initiative of the Linux Foundation, supported by the FinOps Foundation, and a Series of the Joint Development Foundation Projects, LLC; its text is licensed under CC BY 4.0. The current publication is version 1.4, which the steering committee ratified on 2026-06-04. The specification describes four datasets: Cost and Usage with 65 columns, plus Billing Period, Contract Commitment and Invoice Detail. The column library on the FOCUS site sorts the columns into sixteen groups: Account, Allocation, Billing, Billing Period, Capacity Reservation, Charge, Charge Origination, Commitment Discount, Contract, Invoice, Location, Pricing, Resource, Service, SKU and Timeframe. The three exports below follow versions 1.0 to 1.2, and each provider documents its own conformance gaps.

Four columns carry the money. BilledCost is what the invoice issuer bills for the charge in the billing period; an up-front purchase sits here in full, not spread. EffectiveCost is the amortized view: after all discounts and with the portion of prepaid purchases that covered the line. ListCost is list unit price times pricing quantity, with no discount at all. ContractedCost is the agreed unit price times pricing quantity, with negotiated discounts but without commitment discounts. The differences between the four are the kinds of discount.

The dimensions come from the other groups. ChargeCategory classes a row as Usage, Purchase, Tax, Credit or Adjustment; ChargeClass marks a correction to a previously invoiced billing period. ServiceName and ServiceCategory describe the service, ResourceId and ResourceType the resource, RegionId the location, SubAccountId the account, subscription or project, and Tags the key-value pairs as a JSON object. BillingPeriodStart is the start of the billing period, ChargePeriodStart the start of the period the row covers. Provider-specific columns carry the prefix x_.

AWS

AWS delivers the tables FOCUS 1.2 with AWS columns and FOCUS 1.0 with AWS columns through Data Exports. The 1.2 table has three extra columns (x_Discounts, x_Operation, x_ServiceCode) and lets you choose hourly, daily or monthly granularity; the 1.0 table has five extra columns and no configuration. The documented gaps, among them: ListUnitPrice, ContractedUnitPrice, PricingUnit, SkuId and SkuPriceId might be null for certain product offerings, InvoiceIssuerName and PublisherName for certain charges, and ConsumedQuantity holds the quantity charged for, including minimum charge quantities, rather than the quantity used. How the FOCUS table relates to CUR 2.0 is covered in AWS Cost and Usage Report and Data Exports.

Azure

Azure Cost Management offers the dataset Cost and usage details (FOCUS) in its exports, in versions 1.0, 1.0r2 and 1.2-preview, for EA and MCA agreements, not for MOSP subscriptions and not at management group scope. The file holds the same data as the actual and amortized files together; x_AmortizationClass tells whether a row sits before or after amortization. The Microsoft columns go a long way: x_BilledCostInUsd, x_BillingExchangeRate, x_ResourceGroupName, x_InvoiceSectionId, x_SkuMeterCategory. In 1.2-preview, CapacityReservationId, CapacityReservationStatus, CommitmentDiscountQuantity, CommitmentDiscountStatus, CommitmentDiscountUnit and SkuPriceDetails are documented as currently null or empty.

Google Cloud

Google Cloud writes its FOCUS export, in Preview, to a table gcp_billing_export_focus_BILLING_ACCOUNT_ID in an immutable dataset; its columns map to the fields of the detailed usage cost export. SubAccountId is the project id, BilledCost and EffectiveCost are cost plus credits.amount, ListCost is cost_at_list, ContractedCost is cost. Under Google's newer spend-based committed use discounts, covered usage is already charged at the discounted price, so for that usage ContractedCost includes the commitment discount the specification keeps out of it. ChargeCategory knows Usage, Tax and Adjustment, not Purchase and Credit. The Tags column is not provided; labels and tags live in x_Labels, x_SystemLabels, x_ProjectLabels and x_Tags. The commitment discount columns are absent and committed use discounts sit in x_Credits; InvoiceId, ResourceType, ServiceCategory and ChargeFrequency are documented as not provided. Setting up the detailed export is covered in Set up Google Cloud billing export for cost reporting.

What it means for your cost

Choosing the cost column is choosing the question. BilledCost per billing period and invoice id is the invoice; only that sum reconciles with finance. EffectiveCost is the number a team answers for, because reservations and Savings Plans are spread over the usage they covered; it yields the effective cost of a cost report. ListCost minus EffectiveCost is the total discount, ListCost minus ContractedCost the negotiated share of it. An allocation by Tags and SubAccountId is only as complete as the provider's fill of those columns: on Google Cloud it has to come from the x_ label columns, on Azure and AWS from Tags, each with the keys that provider carries over.

Where it goes wrong

  • Every column is assumed to be populated by every provider. Symptom: sums by CommitmentDiscountId or InvoiceId are zero for one provider. Cause: the conformance gaps are documented, but only in each provider's own documentation.
  • FOCUS and native exports are mixed in one sum. Symptom: a month counts twice, or the cost view changes mid-series. Cause: the Azure FOCUS export holds actual and amortized together, the AWS FOCUS tables are separate exports beside CUR 2.0; both sources describe the same cost.
  • ListCost is read as what was paid. Symptom: the analysis sits above the invoice. Cause: ListCost is the list price without discounts; what was paid is BilledCost.
  • Tag keys are normalised differently per provider. Symptom: the same cost centre appears three times. Cause: AWS carries activated cost allocation tags, Azure resource tags, Google Cloud delivers labels in x_ columns; spelling and prefixes differ.
  • ChargeClass is ignored. Symptom: a closed month changes afterwards for no visible reason. Cause: correction rows refer to an earlier billing period and belong in that period's reconciliation, not in the current month.

Sources

Read on 2026-10-15. FOCUS specification, publication version 1.4, About FOCUS, Introducing FOCUS 1.4, FOCUS column library, FOCUS 1.2 with AWS columns, FOCUS 1.2 with AWS columns conformance gaps, FOCUS 1.0 with AWS columns, FOCUS cost and usage details file schema, Create and manage Cost Management exports, Structure of FOCUS data export, Structure of Standard data export.