On Vertex, the console is not where the answer is.
Vertex AI spend is legible at SKU level, and the billing console will not show you that level. Almost every Vertex audit starts by getting the data somewhere it can actually be queried.
1. The BigQuery billing export is the audit
Detailed usage cost export into BigQuery is the only place model-level SKUs, request counts and label dimensions exist together. The console rolls Vertex up into a handful of lines that tell you a total and nothing else.
If the export is not enabled, enable it today and accept that history starts now — it is not backfilled. That single fact reorders the audit: on projects with no export, week one is standing it up and reconstructing an approximate baseline from invoices, rather than running queries. Enabling it costs almost nothing and every subsequent question depends on it.
2. Labels are the attribution mechanism, and they must be set at request time
Google's labels attach to requests and resources and flow into the billing export as queryable columns. Unlike a project split, they let you attribute the same model in the same project to different teams, features or customers — which is what most organisations actually need.
The catch is that labels must be attached when the call is made. Unlabelled traffic is unattributable forever, and the usual finding is that a large share of spend sits in exactly that bucket. The remedy is a small change in whatever client wrapper your services share, and it should land before anyone argues about chargeback.
3. Provisioned throughput is bought in units and burns while idle
Provisioned throughput reserves capacity in units on a term commitment and bills for the term regardless of use. The recurring pattern is a commitment sized for a forecast that did not arrive, or one carried across a model migration and left pointed at a version the traffic no longer uses.
The audit compares committed units against realised throughput in the export. Consistently low utilisation with non-spiky traffic means pay-as-you-go is cheaper, and mixed mode — commitment sized to the floor, overflow on demand — is usually the right shape rather than an all-or-nothing choice.
4. Context caching bills for storage, not just for hits
This is the Vertex-specific trap. Explicit context caching charges for the cached tokens held per hour, on top of the discounted read. Cache a large document set, let the traffic pattern change, and you are paying rent on tokens nobody reads.
The check is the ratio of cache storage cost to cache read savings per workload. It is one query against the export and it is negative more often than teams expect, particularly where a cache was sized during a launch and never revisited. Where it is positive, it is one of the largest levers available.
What the audit needs from you
- Read access to the detailed billing export in BigQuery, or an export of the last 90 days. If it is not enabled, say so — that changes the plan rather than blocking it.
- Your current labelling convention, if one exists.
- Provisioned throughput commitments: units, model, term, start date.
- Any explicit caches you have created and roughly what they hold.
About a week, ending in a written document with a ranked savings list and an effort cost against each item. Free, and yours to implement without us.