← FinOpsAid blog

What are we spending on LLMs across three clouds? Reading the Cloud AI Spend page
Vertex AI, Azure OpenAI and Amazon Bedrock in one view — what each KPI counts, what cost type and region mean, and why there is no per-developer split.
Cloud AI Spend does one thing the individual cloud consoles can't: it puts Vertex AI, Azure OpenAI and Amazon Bedrock in the same units on the same page. Three billing models, three token-accounting conventions, one comparison.
Everything on it is billed — from each cloud's billing API — and token counts are actual, from each cloud's usage API. No modeling. What there isn't, and can't be, is any attribution to a repository or a person.
Conventions used below are in the grammar behind every number.
The banner and the tabs
The top banner shows a connection chip per cloud — green with a check when configured, grey and reading "not connected" otherwise — plus the sync date and the reminder that this is never real-time.
Four tabs: All Clouds, Vertex AI, Azure OpenAI, Amazon Bedrock. All Clouds is the rollup and is the only tab that shows the per-provider comparison cards. Selecting a specific cloud scopes every card below to it and swaps one KPI tile.
If no cloud is connected at all, the page shows a connect card explaining what each provider needs — GCP BigQuery billing export, Azure Cost Management, AWS Cost Explorer — rather than a zeroed dashboard.
The KPI row
| Tile |
What it counts |
Direction |
| Total Spend |
Billed cost for the period. Footnote: "billed · this period". |
Worse. |
| Total Tokens |
Input + output + cache. Footnote says so. |
Neutral. |
| Output Tokens |
Generated only. |
Neutral — the expensive half. |
| Requests |
Model invocations. |
Neutral. |
| Providers / Models |
Clouds with spend on the All Clouds tab; distinct models on a provider tab, with the region count as a footnote. |
Neutral — breadth. |
| Accounts |
Distinct projects, subscriptions or accounts, with region count. |
Neutral — see below. |
Accounts is the sprawl metric. One project with all the spend is governable. Nineteen accounts across four regions each holding a slice is the thing that makes cloud AI spend hard to control, and this tile is the earliest warning you'll get.
Total ÷ Requests is worth computing in your head. Cost per invocation is the closest thing to a unit-economics figure on this page, and it's the number that tells you whether spend growth is more usage or more expensive usage.
Cloud AI Spend Over Time
A daily billed-cost area chart, labelled with the current scope — "all clouds" or the selected provider. The total sits in the card header.
The pattern to look for is a step change with no corresponding request growth, which almost always means a model swap or a region change rather than more usage.
Spend by Cloud, and the Providers table
Only on the All Clouds tab. A donut of cost share per provider, and a table:
| Column |
Meaning |
| Cloud |
Vertex AI / Azure OpenAI / Amazon Bedrock. |
| Cost |
Billed. |
| Models |
Distinct models with spend on that cloud. |
| Input / Output |
Token counts. |
| Requests |
Invocations. |
With a CSV export. This table is the multi-cloud comparison, and the useful reading is cost per token per cloud rather than raw cost — a cloud with a third of the spend and a tenth of the tokens is being used for something much more expensive.
Three breakdown cards: Cost Type, Region, Account
Account is your attribution model, and you built it. Because these APIs group by account rather than by person or repo, how you named and split projects months ago determines what you can report on today.
Models
The detail table — Cloud (on the All Clouds tab), Model, Cost, Input, Output, Requests — with CSV export. This is the cross-cloud model comparison, and it's the reason to have the page at all: the same task running on three clouds with three model families becomes directly comparable in cost per token.
The methodology note
A card at the bottom states three things plainly, and they're worth repeating because they define the page's limits:
- Cost is billed dollars — Vertex via the Cloud Billing BigQuery export, Azure OpenAI via Cost Management, Bedrock via Cost Explorer. Token counts come from each cloud's usage API.
- No per-repository or per-developer attribution. Cloud billing groups by account, service, model and region. The same limitation as Copilot and Anthropic, for the same structural reason.
- Not real-time. Billing exports lag hours to about a day and reconcile for several days afterwards.
That third point drives a practical rule: the last few days of any window are provisional. If yesterday looks suspiciously cheap, it's incomplete, not improved.
When a provider tab is empty
Two different empty states, with different meanings:
- "No usage in range" with credentials configured → widen the period or wait for the next sync. Billing exports lag.
- "No usage in range" without credentials → the connect hint tells you to add that cloud's read-only credentials on the Settings page.
What people get wrong on this page
- Expecting per-developer or per-repo splits. They don't exist in cloud billing APIs.
- Comparing raw cost across clouds. Compare cost per token or cost per request; the workloads differ.
- Ignoring provisioned throughput. It bills for capacity, not usage — the biggest silent line item here.
- Reading the last two days as final. Cloud billing reconciles for days.
- Assuming region doesn't matter. Rates differ by region, and workloads drift.
The 60-second read
- Banner chips: which clouds are actually connected?
- Total Spend ÷ Requests as a rough unit cost, then compare it to last period.
- Cost Type card: how much is provisioned throughput?
- Accounts tile: is spend concentrated or sprawling?
- Models table: the top model by cost, and whether a cheaper one would do that job.
Frequently asked questions
Can I see cloud LLM spend per developer or per repository?
No. Vertex AI, Azure OpenAI and Amazon Bedrock all group billing by account, service, model and region — there is no per-person or per-repository split at source. The Account breakdown is the closest thing to team attribution, and it reflects how you named projects, not who used what.
What is provisioned throughput and why does it matter?
It is reserved model capacity that bills whether or not you use it, as opposed to paying per token. A large provisioned-throughput share alongside modest request counts is the cloud equivalent of an idle runner, and it is the first line to check on the Cost Type card.
Why does yesterday's cloud AI spend look too low?
Cloud billing exports lag hours to about a day and keep reconciling for several days after that, so the most recent days in any window are incomplete rather than improved. Wait for the next sync before treating a drop as real.
Want one view across your clouds? Connect your org and add read-only cloud credentials — free during beta — or explore the demo first. Next: how to read the Budgets page.