AI spend report
Costs → Analytics opens with the AI spend report, built from what the endpoint collector reports. It answers two questions a provider invoice can’t: who spent it, and would we be better off paying per token?
Two figures, not one
Section titled “Two figures, not one”| Figure | What it means |
|---|---|
| With subscriptions | What AI costs as things are: seats prorated to the selected window, plus anything charged per token. |
| Without subscriptions | What the same usage would cost with no subscriptions, every token at list API rates. |
| Savings | Without minus with. Negative when seats cost more than the usage they cover would have. |
Seats nobody holds are shown separately as spend on seats nobody holds, which is money paid for capacity that isn’t in use.
Costs are cache-aware: cache reads and writes are priced at their own rates. Model prices come from Manage models. A new release the price table hasn’t caught up with falls back to the closest model in the same family.
Coverage
Section titled “Coverage”Every request is put in one of three buckets, and the report shows how it knows:
| Bucket | Rule |
|---|---|
| Covered by a seat | The tool reported a paid plan, and the person holds a seat on a tracked subscription that matches it. |
| Charged per token | No plan was reported, so the request is treated as billed by the token. Overstating is the safer error. |
| Plan, but untracked | The tool reported a paid plan, but no tracked subscription gives this person a seat on it. It’s valued at metered rates and flagged, because its real cost is unknown until the subscription is added. |
Whether a session ran on a subscription or an API key is read from what the tool itself recorded. Claude Code records a billing type and Codex records an auth mode. It isn’t inferred from which tool was used. The same tool can run on a plan in one session and on an API key in the next, and only one of those appears on a bill.
Breakdowns
Section titled “Breakdowns”Every breakdown carries both figures:
- By person: seat cost is attributed to the seat holder’s own row. People who hold a seat but used nothing still appear, so idle seats are visible.
- By machine, by project, by model and by tool: seat cost is split by each row’s share of usage.
Narrow the whole report to one person or one machine, or click through to the Visibility drill-down for projects, models, sites and apps.
Cost against output
Section titled “Cost against output”For each repository, the report shows what it cost beside what the AI wrote in it: lines added and removed, and sessions. Lines come from the tool’s own account of its sessions. They aren’t a diff, and they don’t claim the lines survived review. A tool that doesn’t report what it wrote shows not reported, because no number isn’t the same as no work.
Usage with no price
Section titled “Usage with no price”Requests on a model with no known price count as zero everywhere else in the report, so the figures would understate spend. The report says so, lists those models with who used them, and links to add a price.
Honest failure
Section titled “Honest failure”If the report fails to load, it says so instead of showing zeros, because zero reads as “spent nothing”. While a new window loads it never shows the previous window’s figures.