Posted on Aug 16, 2026 · Updated Aug 16, 2026 · 11 min read
See AWS, Azure & GCP Bills in One Place (No Enterprise Contract)
If your team spends under roughly $10K/month split across AWS, Azure, and GCP, you do not need CAST AI, nOps, or Spot.io to see all three bills in one place. Those tools are built for large, complex estates and typically charge a percentage of managed spend or require an enterprise sales process. A real multi-cloud cost view — one screen, one currency, one set of column definitions across all three providers — is buildable today using each cloud's own free export tools plus an open billing schema built for exactly this problem. This guide walks through the mechanism, the effort, and the honest tradeoffs.
TL;DR — getting a multi-cloud view without an enterprise contract
- AWS, Azure, and GCP each ship a free, built-in billing export — Cost & Usage Report (CUR) to S3, Cost Management exports to a storage account, and Billing export to BigQuery, respectively
- FOCUS (FinOps Open Cost and Usage Specification) is an open schema from the FinOps Foundation that normalizes all three exports into one common column format — this is the real "no vendor" answer to a unified view
- Landing all three exports in one warehouse (BigQuery, Snowflake, or even DuckDB) and querying across them with SQL gets you a single view for the cost of storage and a few hours of setup
- OpenCost (Kubernetes cost allocation) and Infracost (pre-deploy estimates) are useful complementary tools, not substitutes for bill consolidation — they solve different problems
- The DIY route is real engineering work, not a five-minute setup — budget for it honestly before deciding against a paid tool
Table of contents
Why you don't need an enterprise contract for this
Tools like CAST AI, nOps, and Spot.io are optimization platforms first and reporting platforms second — their pricing (often a share of the savings they generate, or a percentage of managed cloud spend) reflects an automation product, not a viewing product. If what you actually need is visibility — one place to see what you spent on AWS, Azure, and GCP last month, broken down by service and account — that is a solved problem using tools every cloud provider already gives you for free.
The gap those free tools leave is normalization: AWS, Azure, and GCP each bill differently, label services differently, and export in different formats. Closing that gap used to mean writing custom mapping logic per provider. That is exactly what FOCUS, covered below, was built to standardize — which is why this guide treats it as the centerpiece of a no-vendor multi-cloud view rather than a footnote.
AWS: Cost Explorer and the Cost & Usage Report
AWS Cost Explorer is built into every AWS account and free to use. It gives you filterable, groupable charts of spend by service, linked account, region, and tag, with up to several years of history depending on when Cost Explorer was enabled on the account. For a single-cloud view, or for spot-checking numbers before you build anything else, start here — no export required.
For a real multi-cloud aggregation, you want the underlying data, not just the UI. That is the Cost and Usage Report (CUR) — AWS's most granular billing export, delivered as files to an S3 bucket you control, updated on a recurring schedule. CUR data includes line-item detail down to individual resource usage, discounts applied, and amortized costs for Reserved Instances and Savings Plans. AWS also supports exporting CUR data in the FOCUS format directly, which matters a great deal for the aggregation approach in this guide (see the AWS Cost and Usage Report documentation).
Once CUR lands in S3, it is queryable directly with Amazon Athena (pay-per-query, no cluster to manage) or loaded into whatever warehouse you're centralizing on. Either way, the data leaves AWS's control the moment it hits your bucket — you own it.
Azure: Cost Management + Billing exports
Azure Cost Management + Billing is Azure's free, built-in equivalent to Cost Explorer — cost analysis views, budgets, and basic anomaly alerts, all included with every subscription. For day-to-day Azure-only visibility it's genuinely capable.
The export mechanism you want for aggregation is Azure's scheduled cost export feature inside Cost Management: it writes detailed usage and cost data on a recurring schedule to a storage account (a Data Lake or Blob Storage container) that you own. Azure also supports exporting in the FOCUS format as one of the available export dataset types, which is the detail that makes cross-cloud normalization realistic rather than a custom parsing project. See Microsoft's Azure Cost Management + Billing documentation for the current export configuration options.
From the storage account, the files can be picked up by a pipeline (Azure Data Factory, a scheduled function, or a simple scheduled script) and loaded into your shared warehouse alongside the AWS and GCP data.
GCP: Billing export to BigQuery
GCP takes a different approach from AWS and Azure: instead of writing files to object storage first, Cloud Billing export sends detailed billing data directly into a BigQuery dataset you specify, on an ongoing basis. There are two variants — standard usage cost data, and a pricing/detailed variant with more granular SKU-level pricing information. Because it lands directly in BigQuery, GCP's export is arguably the easiest of the three to start querying with SQL immediately, with no separate load step. Full setup instructions are in Google's Cloud Billing export to BigQuery documentation.
If your warehouse of choice for the unified view is BigQuery, GCP's leg of the pipeline is essentially already done the moment you enable the export — you're just adding AWS and Azure data into the same project.
FOCUS: the open spec that actually unifies the three
Here is the part that makes a true single view possible without a vendor: the FinOps Open Cost and Usage Specification (FOCUS), maintained by the FinOps Foundation (part of the Linux Foundation). FOCUS defines a common, provider-agnostic schema — standardized column names, standardized units, standardized definitions for concepts like effective cost, list cost, and billing period — so that a row of AWS billing data and a row of Azure billing data can sit in the same table and mean the same thing.
This directly solves the normalization problem described above. Without FOCUS, "unifying" three clouds' billing data means hand-mapping each provider's own column names and discount logic into something comparable — real, ongoing engineering work that breaks every time a provider changes its export format. With FOCUS, AWS, Azure, and GCP can each export (or be transformed into) the same schema, and your query layer only has to be written once.
As of 2025–2026, all three major hyperscalers have shipped native or near-native FOCUS export support, and the spec itself has moved through multiple point releases with FinOps Foundation governance and hyperscaler participation — genuinely current, active work, not a proposal gathering dust. It is worth reading the specification directly at focus.finops.org before building a pipeline against it, since column definitions and version numbers do evolve.
The practical upshot for a small team: if you can get each cloud's billing data out in (or transformed to) FOCUS format, "one view across AWS, Azure, and GCP" stops being a custom-engineering problem and becomes a UNION ALL across three tables with matching columns.
Native export mechanisms compared
None of these mechanisms are identical, and the differences matter when you're deciding where to land the data. Here's how the three native exports compare on the facts that actually affect a DIY pipeline:
| Cloud | Export mechanism | Where it lands | Format | FOCUS support |
|---|---|---|---|---|
| AWS | Cost and Usage Report (CUR) | S3 bucket you own | CSV/Parquet, delivered on a recurring schedule | Native FOCUS export option available |
| Azure | Scheduled Cost Management export | Storage account (Blob / Data Lake) you own | CSV, delivered on a recurring schedule | FOCUS export dataset type available |
| GCP | Cloud Billing export | BigQuery dataset you own | BigQuery tables (SQL-queryable directly) | Detailed/pricing export maps closely to FOCUS fields |
Qualitative mechanism comparison based on each provider's public documentation (AWS CUR docs, Microsoft Learn Cost Management + Billing docs, Google Cloud Billing export docs). Exact delivery frequency, retention, and FOCUS field coverage change over time — check current provider docs before building a pipeline dependency on specific behavior.
The DIY path, step by step
Putting the pieces above together, here's the practical sequence a small team can follow without touching a vendor contract:
Turn on each cloud's native export
Enable AWS CUR to an S3 bucket, Azure's scheduled Cost Management export to a storage account, and GCP's Billing export to BigQuery. Where available, choose the FOCUS export option for each — it saves the normalization work in step 3.
Land all three in one place
Pick a single shared destination — BigQuery is the path of least resistance if GCP is already exporting there; Snowflake or a self-hosted DuckDB file both work equally well if you'd rather not depend on any single cloud's warehouse. Pull the AWS S3 files and Azure storage-account files into that destination on a schedule (a simple cron job, a scheduled function, or an orchestration tool if you already run one).
Normalize to FOCUS (or a simple common schema)
If each provider is already exporting in FOCUS format, this step is close to free — the columns already line up. If not, map each provider's native export fields (service, cost, account, usage date, discount) onto a small common schema of your own. Keep the schema minimal at first: provider, account, service, date, and cost is enough for a first working view.
Query and visualize
Once the three exports sit in one table (or three tables with matching columns joined with UNION ALL), a plain SQL query gives you total spend by provider, by service, or by month. From there, a spreadsheet connected to the warehouse, a BI tool (Looker Studio, Metabase, or similar), or a small internal dashboard is enough to turn it into something the team actually looks at.
None of these four steps individually is hard. What makes the project real work is the combination: three different export mechanisms, three different schedules, error handling when a file doesn't land on time, and keeping the schema mapping correct as providers change their billing categories. Budget it as a multi-day engineering task, not an afternoon.
OpenCost and Infracost: complementary, not the same job
Two open-source tools come up constantly in this space, and it's worth being precise about what each one actually does — neither is a substitute for the bill-consolidation pipeline above.
OpenCost — Kubernetes cost allocation
OpenCost is a CNCF project (donated by Kubecost) that allocates the cost of a Kubernetes cluster's compute, memory, and storage down to namespace, label, or pod level. It runs inside your cluster and reads Prometheus metrics to attribute cost to workloads. If your multi-cloud footprint includes Kubernetes clusters on more than one provider, OpenCost can give you cost allocation within each cluster — but it does not aggregate your full cloud bill (RDS, S3, networking, etc.) the way a CUR/export pipeline does. Think of OpenCost as a zoom-in tool for container spend, not a zoom-out tool for the whole bill. See opencost.io for the project itself.
Infracost — pre-deploy cost estimates
Infracost solves a different problem entirely: it estimates what a Terraform (or other IaC) change will cost before you deploy it, typically as a comment on a pull request. That's valuable for catching expensive infrastructure changes early, but it has nothing to do with consolidating bills you've already been charged — Infracost estimates spend that hasn't happened yet, while this guide is about seeing spend that already has. Don't conflate the two: a team could run Infracost in CI and still have zero visibility into their actual multi-cloud bill. See infracost.io for details.
Both are excellent tools for what they do. Neither replaces steps 1–4 above.
When DIY makes sense vs when to pay for a tool
The DIY path above is real and it works, but it isn't free in engineering time, and it keeps costing time after the initial build — schema drift, pipeline failures, and someone needing to own it. Whether that trade is worth it depends on your team.
DIY tends to make sense when: you already have SQL/data-engineering capability on the team, your reporting needs are relatively simple (spend by provider, service, and month is often enough), and you want full control over the schema and where the data lives.
A paid tool tends to make sense when: nobody on the team wants to own a data pipeline, you need near-real-time anomaly alerts rather than a monthly review, or your reporting needs go beyond spend visibility into recommendations and automated actions (rightsizing, commitment purchase suggestions, and so on) — which is the actual product CAST AI, nOps, and Spot.io are selling, beyond raw visibility.
It's also fine to combine the two: use the native exports and FOCUS for a lightweight, always-on view, and reach for a paid tool later only if the team's spend or complexity outgrows what a spreadsheet-plus-warehouse setup can handle.
Methodology & sources
This guide describes the current (2025–2026) mechanisms each major cloud provider documents for billing export, and the FinOps Foundation's FOCUS specification as the standardization layer that makes cross-cloud aggregation practical without a vendor. It deliberately avoids inventing specific dollar costs, exact export frequencies, or retention periods for these features — those details change over time and vary by account configuration, so always confirm current behavior against each provider's live documentation before building a dependency on it:
- AWS Cost and Usage Report — docs.aws.amazon.com/cur
- Azure Cost Management + Billing — learn.microsoft.com/azure/cost-management-billing
- GCP Cloud Billing export to BigQuery — cloud.google.com/billing/docs/how-to/export-data-bigquery
- FOCUS specification, FinOps Foundation / Linux Foundation — focus.finops.org
- OpenCost, CNCF project — opencost.io
- Infracost — infracost.io
To compare what AWS, Azure, and GCP would cost you for a given workload before you commit to an architecture, use SpendArk's free cloud cost calculator — it's a planning complement to the billing-history view this guide builds, not a replacement for it.
Where to run the warehouse side of this pipeline
If you're landing exports in a self-managed database rather than a managed warehouse, keeping the compute underneath it cheap and predictable matters — these providers offer flat, transparent pricing for exactly that kind of always-on workload.
- Hetzner — some of the lowest per-instance pricing available for a self-hosted database or DuckDB file server running your normalized billing data.
- DigitalOcean — managed Postgres and flat-priced compute if you'd rather not operate the database server yourself.
- Vultr — affordable VPS instances for a lightweight scheduled-pipeline runner that pulls exports from all three clouds on a cron.
Some provider links above are affiliate links — we may earn a commission at no extra cost to you. It never affects our pricing data.
Frequently asked questions
Can I really get a multi-cloud cost view without paying for a tool?
Yes. AWS, Azure, and GCP each provide a free, native billing export (CUR to S3, scheduled Cost Management export to a storage account, and Billing export to BigQuery, respectively). Landing those in one shared warehouse and normalizing to a common schema — ideally FOCUS — gets you a real single view. The cost is engineering time to build and maintain the pipeline, not a subscription.
What is FOCUS and why does it matter for multi-cloud reporting?
FOCUS (FinOps Open Cost and Usage Specification) is an open billing data schema maintained by the FinOps Foundation that standardizes column names, units, and cost definitions across cloud providers. It matters because without a common schema, "unifying" AWS, Azure, and GCP billing data means custom-mapping each provider's own format — ongoing work that breaks whenever a provider changes its export. FOCUS removes most of that mapping work.
Is OpenCost the same as consolidating my cloud bill?
No. OpenCost allocates cost within a Kubernetes cluster down to namespace or pod level — it's a zoom-in tool for container spend. It does not aggregate your full multi-cloud bill (databases, storage, networking, etc.) across providers. For full bill consolidation you need the native export + FOCUS approach described in this guide; OpenCost is a useful complement if Kubernetes is part of your footprint.
Does Infracost help me see what I've already spent?
No — Infracost estimates the cost of infrastructure changes before you deploy them, typically inside a CI/CD pull request. It's a pre-deployment estimation tool, not a billing consolidation tool. It answers "what will this cost," while this guide answers "what have I already been charged, across three clouds."
Where should I land the data — BigQuery, Snowflake, or something simpler?
Any SQL-queryable warehouse works, since the goal is just a shared destination for three providers' exports. BigQuery is the path of least resistance if you're already exporting GCP billing there. Snowflake works well if your team already operates one. For very small teams, a self-hosted DuckDB file is a legitimate lightweight option — it needs no running server and still supports full SQL across the unified dataset.
Estimate your cloud costs — for free
Compare AWS, Azure, and GCP pricing side by side with our free calculator, and dig into the guides to learn how to cut cloud waste. No sign-up required.