How to Reduce Your Google Cloud Bill: 10 Proven Steps
Most Google Cloud bills carry 25–35% waste — and almost none of it is the big, obvious stuff. It's the persistent disk left behind by a deleted VM, the dev instance running 24/7 that's used 9–5, the Standard-tier bucket full of data nobody's read in a year, the Cloud Logging sink swallowing debug logs at full retail. The good news: you can usually recover 15–30% of the bill without re-architecting anything.
The order below matters. Do the idle, zero-risk cleanup first — it's pure savings that needs no sign-off and builds the credibility to make the harder calls. Then right-size, then commit, then govern so it doesn't creep back. Throughout, lean on Active Assist — Google's own recommender engine — because its savings reflect your actual pricing (including sustained- and committed-use discounts), not list prices.
1. Delete idle and orphaned resources (do this first)
The fastest money on GCP is waste that carries zero performance risk. Google's Active Assist idle-resource recommenders flag most of it; verify and act on:
- Unattached persistent disks — a disk whose VM was deleted keeps billing. (Console → Compute Engine → Disks, filter unattached.)
- Reserved unused static IPs — an external static IP not attached to anything is billed by the hour.
- Idle Cloud SQL instances and over-provisioned ones (both have dedicated recommenders).
- Stale snapshots and old custom images whose source is long gone.
- Idle load balancers and forwarding rules pointing at empty backends.
List unattached disks across a project from the CLI:
gcloud compute disks list \
--filter="-users:*" \
--format="table(name, sizeGb, zone, type)"
2. Turn off non-production out of hours
Dev, test and staging rarely need to run nights and weekends — but they usually do. A VM used 50 hours a week but billed for 168 is paying ~70% for idle time.
- Attach an instance schedule (Compute Engine → Instance schedules) to start/stop VMs automatically.
- Scale non-prod GKE node pools to zero off-hours (cluster autoscaler, or a schedule).
- Remember a stopped VM still bills for its attached disks — delete genuinely dead instances, don't just stop them.
3. Right-size over-provisioned VMs and databases
Most instances are a size larger than they need. Active Assist's machine-type recommender uses real utilization to suggest a smaller, cheaper machine type; the Cloud SQL over-provisioned recommender does the same for managed databases. Validate against a few weeks of data, then resize.
- Consider cost-efficient families — E2 for general-purpose, Tau T2D for scale-out price/performance, newer C3/C4 for compute.
- Match the machine to the workload, not the workload to the biggest machine available.
4. Cut rates: layer Committed Use and Sustained Use Discounts
On-demand is the most expensive way to run a steady workload. GCP gives you two rate levers, and they stack:
- Sustained Use Discounts (SUDs) — automatic. Eligible resources that run a large share of the month are discounted with no action from you. Unique to GCP; make sure you're not accidentally defeating them (e.g., constantly recreating instances).
- Committed Use Discounts (CUDs) — you commit to 1 or 3 years for a deeper rate. Resource-based CUDs lock a machine family in a region; spend-based (flexible) CUDs commit to an hourly dollar amount across services. Use the CUD recommender, and buy against your roadmap, not a guess.
The mature pattern: SUDs ride your variable usage; CUDs cover the steady-state floor you're confident you'll keep. Track realized SUD/CUD savings from your billing export so you know your true coverage.
5. Right-tier your Cloud Storage
- Move infrequently-read data to Nearline, Coldline or Archive classes with Object Lifecycle Management rules.
- Turn on Autoclass to have buckets move objects between classes automatically based on access — ideal when access patterns are unpredictable.
- Delete old object versions and clear stale snapshots you no longer need for recovery.
6. Cut avoidable networking and egress
- Use the Standard Network Tier for latency-tolerant, region-local egress — it's cheaper than the Premium (backbone) tier that's on by default.
- Keep chatty traffic in-region and inside the same VPC to avoid cross-region/zone egress charges.
- Review Cloud NAT gateways (each bills hourly plus per-GB) and idle interconnect/VPN capacity.
- Front cacheable content with Cloud CDN to cut origin egress.
7. Tame Cloud Logging and monitoring
Observability is a stealth line-item. Cloud Logging bills per GB ingested beyond the free allotment.
- Add exclusion filters to the Log Router to drop high-volume, low-value logs before ingestion.
- Trim retention on log buckets, and route bulk logs to Cloud Storage instead of keeping them hot.
- Review custom metrics and high-frequency Cloud Monitoring uptime checks.
8. Optimize GKE (if you run Kubernetes)
Kubernetes cost hides in the gap between what pods request and what they use. On GKE:
- Use Autopilot to pay per pod resources instead of managing node headroom yourself.
- Right-size pod requests to real usage, and run interruptible work on Spot VMs (60–90% off).
- Let the cluster autoscaler and node auto-provisioning shrink the cluster; scale non-prod to zero.
9. Label and allocate so spend has an owner
You can't reduce what nobody owns. Apply a small set of labels (owner, environment, cost-center, application) consistently, enable the BigQuery billing export, and publish a per-team showback from it. When teams see their own number, waste falls on its own. (Remember: on GCP, cost-allocation labels must flow into the billing export to be usable for showback.)
10. Don't forget AI spend — and make it monthly
Vertex AI / Gemini is the fastest-growing line on many GCP bills, and it breaks classic cost checks because the money moves through tokens. Cap output tokens, use context caching, route to a smaller model where quality allows, and release idle provisioned throughput. (See detecting AI cost anomalies.)
Most importantly, make the whole review a monthly habit, not a once-a-year fire drill. Cloud churn never stops; your cadence shouldn't either.
Or do all ten in about ten minutes. The CloudFinOpsKit tool now covers Google Cloud alongside Azure and AWS — it reads your Active Assist recommenders and BigQuery billing export, finds every item above (idle resources, right-sizing, CUD/SUD coverage, Cloud Storage tiering, network tier, Vertex AI token waste), prices each from your actual billed cost, and adds a FinOps maturity score plus Cost Anomaly Watch. Read-only, nothing changed.
FAQ
What's the fastest way to reduce a Google Cloud bill?
Idle, zero-risk waste first: unattached persistent disks, unused static IPs, stale snapshots/images, and idle Cloud SQL. Active Assist's idle-resource recommenders surface most of it with a real projected saving, and there's no performance impact or sign-off needed.
CUDs or SUDs — which do I need?
Both, and they stack. SUDs are automatic for sustained usage; CUDs are a 1- or 3-year commitment for a deeper rate on your steady baseline. Let SUDs cover variable usage and buy CUDs (resource-based or spend-based) against workloads you're confident you'll keep running.
How much can I realistically save?
Most estates carry 25–35% waste; idle cleanup plus right-sizing and the right committed-use discounts typically recover 15–30% without re-architecting.
Related reading: cross-cloud cost anomaly detection · why did my cloud bill increase? · how to reduce your Azure bill · Kubernetes cost optimization (GKE)