Google Cloud's billing console answers "what did I spend last month?" but is surprisingly bad at "what is spending money right now, and should it be?" Getting real cost visibility on GCP takes three deliberate steps — and once they're in place, the cuts are straightforward.
1. Turn on the BigQuery billing export — today
This is the single most important GCP FinOps move. The detailed usage export to BigQuery is the only way to get resource-level, label-level cost data out of GCP — and it is not retroactive. Every day it stays off is a day of granularity you never get back. Enable it in Billing → Billing export, point it at a dedicated dataset, and every cost question you ask later becomes a SQL query.
2. Label everything that costs money
GCP labels are the backbone of cost attribution: team, service, environment at minimum. Unlabeled resources become an "unattributed" bucket that grows until nobody can explain a third of the bill. Enforce labels with organization policies or CI checks on your Terraform.
3. Watch utilization, not just spend
The biggest GCP savings rarely come from billing data alone — they come from joining cost with utilization:
- Idle Compute Engine instances — anything under ~5% average CPU for a week is a shutdown candidate; TERMINATED instances still bill for attached persistent disks.
- Unattached persistent disks — disks with no
usersbind bill in full. Snapshot and delete. - Over-sized machine types — sustained low CPU means a smaller custom machine type; GCP's per-second billing makes resizing cheap to trial.
- Cloud SQL with public IPs — a cost and security smell; private IP + the Auth Proxy is cheaper and safer.
4. Committed use discounts, in the right order
After cleanup, cover the steady-state core with committed use discounts: 1-year commitments save roughly 37% on most machine families, 3-year around 55%. GCP also applies sustained-use discounts automatically — so measure your effective rate from the BigQuery export before buying commitments, not the list price.
5. Budgets with programmatic alerts
Create a budget per project with alerts at 50/80/100% of forecast, and wire the Pub/Sub notification channel into chat. A runaway BigQuery query or a forgotten GPU instance shows up in the daily curve long before the invoice.
The multi-cloud reality
Most teams running GCP also run AWS or Azure, and the waste patterns rhyme across all three. CloudMonitor connects to GCP with a read-only Viewer service account, inventories Compute Engine, persistent disks, Cloud Storage, Cloud SQL and Cloud Functions, flags idle and unattached resources, and scores utilization patterns across your whole fleet — beside your AWS and Azure accounts in one unified inventory. For the AWS side of the same playbook, start with the AWS cost-reduction guide.