Welcome to the wait
You signed up yesterday. Connected your AWS account. Logged in this morning expecting to see something — literally anything — and got greeted with: "Still syncing. Cost data may take 24-48 hours to populate."
That's not a sync. That's a delay.
I keep seeing this and it bothers me, because cloud billing data is not actually 48 hours away. The cloud knows what you spent yesterday. It knows what you're spending right now. The reason your shiny new FinOps tool is making you wait is not a cloud limitation. It's an architectural choice the tool's vendor made — and you're paying for that choice in patience.
Let me explain what's going on under the hood, because once you see it you can't unsee it.
Two doors into your billing data
Every major cloud has two completely different ways to ask "how much did I spend." They are not minor variations of the same API. They are different products, different latencies, different data shapes, and they were built for different jobs.
Door 1 — The live API
AWS Cost Explorer. Azure Cost Management API. GCP Cloud Billing API. These are like walking up to the cashier and asking "how much did I spend this month, broken down by service?" The cashier checks the register and tells you. Fast.
What you get:
- Cost data going back ~13 months on AWS, similar on the others
- Group-by service, region, account, tag, charge type
- Daily granularity, sometimes hourly
- Forecasts, anomalies, "what changed since last month"
- Answers in seconds, not days
The trade-offs are real, just not where people think:
- AWS Cost Explorer charges
$0.01per paginated request. Run it carelessly across hundreds of customers and you'll see it on your own bill - Resource-level granularity exists (
GetCostAndUsageWithResources) but only for the last 14 days — AWS hard-caps it - Some niche dimensions aren't queryable here, only in the export
For 90% of "what is happening with my cloud spend right now" questions, the live API is plenty. It's what the AWS billing console itself uses.
Door 2 — The detailed export
AWS Cost and Usage Reports (CUR / CUR 2.0 / FOCUS export). Azure Cost Management Exports. GCP BigQuery Billing Export. This is the bank statement view — every line item, every hour, every tag, every operation, every pricing dimension. Hundreds of columns. Forensic-grade depth.
What you get:
- Every single billable line item (think: millions of rows per month for a mid-size account)
- All the metadata the live API doesn't expose — reservation amortization, savings plan attribution, blended vs unblended, public on-demand list price for everything
- The raw substrate that lets you build your own custom allocation logic
The cost of this depth is real:
- It writes to a storage bucket you provide (S3 / Azure Storage / GCS or BigQuery)
- It needs a separate query layer to be useful (Athena, Synapse, BigQuery)
- And critically — it only writes data forward. The clock starts the day you enable it. There is no backfill.
Cross-cloud comparison
| Cloud | Live API | Detailed export | Catch on the export |
|---|---|---|---|
| AWS | Cost Explorerup to 13 months |
CUR / CUR 2.0 → S3 (Parquet) |
Needs Athena or Glue + Athena to query. Refreshes 1–3x per day. First useful file ~24h after enabling. |
| Azure | Cost Management API |
Cost Management Exports → Storage Account |
Daily or monthly file drops. Querying needs Synapse, Fabric, or your own pipeline. Schema changes occasionally without warning. |
| GCP | Cloud Billing API |
BigQuery Billing Export → native BigQuery dataset |
Cleanest of the three — data lands directly in a queryable engine, no Athena/Synapse setup. Still: forward-only, refreshes a few times per day. |
That last column is what trips everyone up. GCP's export is genuinely the easiest to work with because BigQuery is the storage and the query engine. AWS and Azure both ship you raw files and expect you to wire up the SQL layer yourself.
Why the export is slow to bootstrap
Three structural reasons. None of them are anyone's fault, they're just how the products work:
- Forward-only writes. The day you enable CUR or BigQuery Billing Export, the cloud starts writing data going forward. There is no historical backfill, ever. If you enable it on a Monday, your first useful file lands Tuesday at the earliest. If you enabled it last year, you have a year of data. If you enabled it this morning, you have nothing yet.
- Provider refresh schedules. AWS refreshes CUR up to 3 times per day, but the schedule isn't guaranteed. Azure exports run daily (or monthly). GCP refreshes BigQuery export several times a day with a 24-48h "final" reconciliation window. So even after enable, the data is hours behind.
- You need a query engine to use it. Raw Parquet files in S3 are not a dashboard. Someone has to provision Athena, write the table definitions, deal with schema changes, write the SQL, and pay for query time. None of that is free or instant.
So when a tool says "give us 24-48 hours" what is usually really happening: they enabled the export inside your account, they're waiting for the first file to drop, and they're waiting for their query layer to chew through it. The clock isn't fundamental to cloud billing. It's the export's clock.
Why some tools chose the slow path anyway
To be fair — the export is genuinely the right choice for some jobs. If you're doing forensics on a 200-account AWS Organization with three years of reserved instance amortization to reconcile, you want the CUR. There's no live API that gives you that depth.
But here's the thing: most FinOps questions are not forensic. Most of them are:
- Who's spending the most this month?
- What changed since last week?
- Which resources have no owner?
- Is this anomaly real?
- Are there idle instances I can kill?
You don't need a 1.2 million-row CUR to answer those. The live API answers them in seconds. The CUR answers them tomorrow.
The reason a lot of platforms still gate everything behind the export: they were built before the live APIs were mature enough, and now the architecture is what it is. CUR-first means you eat the latency forever, even on questions that didn't need it.
What the live-API approach buys you
If you flip the architecture — live API as the primary source, export as an optional deeper layer — you get:
- Useful data within minutes of connecting an account. Not tomorrow. Today.
- Less infrastructure on the customer's side. No S3 bucket to provision, no Athena to babysit, no IAM dance for the export role. Just a read-only credential.
- Faster iteration. When you change a tag, you see the impact in the next sync, not in 36 hours.
This is the path we picked for CLARITY — live API first across all three clouds, with export-grade detail layered in only where it earns its keep. I'm not going to belabor the pitch; the rest of this post helps you regardless of who you end up using.
What you should actually do today
Whether or not you ever buy a FinOps tool from anyone, do yourself a favor and enable the detailed export on every cloud you run — right now, today. Why: it's forward-only. Every day you wait is a day of detailed history you'll never get back. The setup is free. The data is free. You will eventually want it.
Here are the three console paths. Takes about 5 minutes per cloud:
AWS — CUR 2.0 / FOCUS export
Console → Billing and Cost Management → Data Exports → Create. Pick:
- Export type:
Standard data export(orFOCUS 1.0if your tooling supports it) - Granularity:
Hourlyif you can spare the storage, otherwiseDaily - Format:
Parquet(smaller and faster to query than CSV/gzip) - Compression:
Parquet(the format implies it) - Destination: a dedicated S3 bucket, e.g.
my-cur-export-prodin a single region
Azure — Cost Management Exports
Portal → Cost Management + Billing → pick your billing scope → Exports → Add. Pick:
- Type:
Daily export of month-to-date costs - Dataset:
Cost and usage details (actual) - Format:
Parquetif available, otherwise CSV - Storage: a dedicated Storage Account, container path
billing-exports/
GCP — BigQuery Billing Export
Console → Billing → Billing export → BigQuery export → Edit settings. Enable:
- Detailed usage cost data (the resource-level one, not the summary)
- Pick a dedicated BigQuery dataset, e.g.
billing_exportin a single location - Optionally enable Pricing data export too — useful for joining with detailed usage
That's it. Set it once and forget it. In 24-48 hours you'll have the start of a real billing history that you can query forever, and the cost is whatever your BigQuery / S3 / Storage Account charges — usually a few dollars per month for a mid-size account.
See your cloud bill in minutes, not days
CLARITY connects via the live cost APIs across AWS, Azure, and GCP — you get cost breakdowns, idle resources, and anomaly detection within minutes of connecting an account, not after a 48h export wait.
Start Free TrialThe thesis
Your FinOps tool isn't slow because cloud billing data is hard. The cloud already knows what you spent today. The live APIs return that number in milliseconds.
Your tool is slow because its architects picked the heavier door, and now everyone connecting an account waits for the export to start writing files. That choice made sense for the use cases that need it. It does not make sense as the default for "give me a number on screen so I can decide what to do."
You can pick a tool that picked differently. And if you do, you can stop reading "still syncing" splash screens and start reading actual data — same morning you connected.
For the bigger picture on cost data accuracy and the pitfalls in multi-cloud, see Multi-Cloud Cost Management: Why 99.7% Accuracy Matters. For the governance side of cost ownership, read Orphan Spend: The Hidden 79% of Your Cloud Bill Nobody Owns. For the consulting alternative most companies pay for instead, see The $180K Cloud Audit: What Your Consulting Firm Isn't Telling You.
See your cloud bill in minutes, not days
CLARITY connects via the live cost APIs across AWS, Azure, and GCP — cost breakdowns, idle resources, and anomaly detection within minutes of connecting an account.
Try CLARITY Free Or request a free cloud cost auditDid you find this article useful?