Dashboards in the console are fine for a quick look, but FinOps needs the line-item billing data: one row per resource, per hour or day, per charge.
flowchart LR AWS["AWS Data Exports (CUR 2.0 / FOCUS)"] --> L["Storage: S3, Blob, BigQuery"] AZ["Azure Cost Management exports"] --> L GCP["GCP billing export to BigQuery"] --> L SAAS["SaaS and licence invoices"] --> L L --> N["Normalise to FOCUS"] N --> Q["Query, report, allocate"] %% step AWS: AWS delivers detailed exports to S3, including a FOCUS-format export. %% step AZ: Azure exports actual and amortized cost, and also offers a FOCUS export. %% step GCP: Google Cloud writes standard and detailed billing data to BigQuery datasets. %% step SAAS: SaaS and licence spend often arrives as invoices or vendor APIs. %% step N: FOCUS gives every source the same column names and meanings. %% step Q: With one schema, one query answers "cost by team" across every provider.
Why a common schema
Each provider names things differently: UnblendedCost, costInBillingCurrency, cost. Comparing them by hand is slow and error-prone. FOCUS (FinOps Open Cost and Usage Specification), maintained by the FinOps Foundation, defines one schema that AWS, Azure, Google Cloud, Oracle and many SaaS vendors can export natively.
Key FOCUS columns
| Column | Meaning |
|---|---|
BilledCost |
What is invoiced for this row (upfront fees appear when paid) |
EffectiveCost |
Amortized cost after discounts — best for comparing and allocating |
ListCost |
Cost at public list price — shows savings from discounts |
ContractedCost |
Cost at your negotiated rates before commitment effects |
ChargeCategory |
Usage, Purchase, Tax, Credit, Adjustment |
ServiceCategory / ServiceName |
e.g. Compute / Amazon EC2 |
ResourceId, RegionId, SubAccountId |
What, where, and which account or subscription |
Tags |
Key–value tags as JSON |
ChargePeriodStart / BillingPeriodStart |
When the usage happened / which invoice it belongs to |
Savings can be read straight from the data: ListCost − EffectiveCost is everything discounts and commitments saved you.
Data you need besides the bill
- Ownership data: which team owns which account, project or tag value (often from a CMDB or a simple mapping file).
- Business data: orders, active users, requests — needed later for unit economics.
- Utilisation metrics: CPU, memory and storage use from monitoring, needed for rightsizing.
Traps: building reports on console screenshots instead of exports; comparing BilledCost across months when large upfront purchases happened (use EffectiveCost); and forgetting that billing data can change for a few days after month end as credits and refunds land.