Checking actual GCP prices
How to look up the real price of a GCP resource — direct from Google’s billing catalog, not from third-party blog posts, calculator widgets, or guesses.
The source of truth: the Cloud Billing Catalog API
Every SKU you can be charged for is in https://cloudbilling.googleapis.com/v1/services/{service-id}/skus. The catalog is read-only, free to query, region-aware, and the same data that drives the official pricing pages on cloud.google.com. No registration required beyond a normal authenticated GCP identity.
The API response includes, for each SKU:
- A human description (e.g.
"E2 Custom Instance Core running in Dammam") - The list of regions it applies to
- A
pricingExpressionwithtieredRates, each tier having aunitPrice(units + nanos) and ausageUnit(h,mo,GiBy.mo,count, etc.)
The price is units + nanos / 1e9 USD per usageUnit.
The reusable script: scripts/gcp-prices.py
scripts/gcp-prices.py queries the catalog for a curated set of services and prints a markdown table. Authenticates as the active gcloud user (you).
# Default: every service we care about, in me-central2
python3 scripts/gcp-prices.py
# A specific service:
python3 scripts/gcp-prices.py --service Storage
# Compare a region (us-central1 is usually the cheapest baseline):
python3 scripts/gcp-prices.py --region us-central1
# Free-text filter on top of the curated set:
python3 scripts/gcp-prices.py --grep "L4"
# Or: dump every SKU in the region (ignore curated filters):
python3 scripts/gcp-prices.py --service Memorystore --all-skus To find the service ID for something not yet in the script:
curl -sS -H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://cloudbilling.googleapis.com/v1/services?pageSize=2000"
| python3 -c 'import json,sys
for s in json.load(sys.stdin)["services"]:
if "filebeat" in s["displayName"].lower(): # adjust the substring
print(s["serviceId"], s["displayName"])' Then add it to SERVICE_IDS in the script.
Real me-central2 prices (verified 2026-05-13)
Hard numbers for the things we actually use or are about to use. Use this table over any external blog post / calculator.
Compute Engine
| Resource | Price |
|---|---|
| E2 Custom Instance Core, on-demand | $0.036643/h (~$26.75/mo per core) |
| E2 Custom Instance RAM, on-demand | $0.004912/GiB·h (~$3.59/mo per GiB) |
| G2 Custom Instance Core (for L4 GPU node) | $0.041980/h (~$30.65/mo per core) |
| G2 Custom Instance RAM | $0.004918/GiB·h (~$3.59/mo per GiB) |
| N2 Custom Instance Core | $0.053106/h (~$38.77/mo per core) |
| Spot E2 Core | $0.015360/h (~58% discount) |
| Spot G2 Core | $0.018060/h (~57% discount) |
Persistent Disks
| Type | Price |
|---|---|
| pd-balanced, capacity | $0.16/GiB·mo |
| pd-balanced, regional (HA, dual-zone) | $0.32/GiB·mo |
| PD Snapshot storage | $0.08/GiB·mo |
GPUs
| GPU | On-demand | Spot |
|---|---|---|
| NVIDIA L4 (the only one available in me-central2) | $0.896064/h (~$654/mo always-warm) | $0.448/h (~$327/mo) |
| 1-year committed L4 | $0.564521/h (~$412/mo, 37% off on-demand) | — |
| 3-year committed L4 | $0.403229/h (~$294/mo, 55% off) | — |
T4 and other GPU types appear in the catalog but are not actually available in me-central2 zones — the plan doc’s §0 of 01-architecture-summary confirms only L4 in zones -a and -c.
External IPs
| What | Price |
|---|---|
| Static IP attached to a Standard VM | $0/h (free at this scale) |
| External IP on a Spot VM | $0.0025/h ($1.83/mo) |
(Stale blog posts mention $0.005/h. The current catalog says $0 for standard VMs.)
Cloud Storage (Dammam)
| Class | Price |
|---|---|
| Standard | $0.030/GiB·mo |
| Nearline | $0.018/GiB·mo |
| Coldline | $0.006/GiB·mo |
| Archive | $0.0027/GiB·mo |
Cloud Memorystore (Redis)
Tiered by node size — M1 (largest, cheapest per GB) to M5 (smallest, most expensive per GB):
| Tier | Standard | Basic |
|---|---|---|
| M5 (smallest) | $0.0256/GiB·h (~$18.69/mo per GiB) | $0.0256/GiB·h |
| M4 | $0.0304/GiB·h | $0.0304/GiB·h |
| M3 | $0.0368/GiB·h | $0.0368/GiB·h |
| M2 | $0.0432/GiB·h | $0.0432/GiB·h |
| M1 | $0.0480/GiB·h (~$35/mo per GiB) | (Standard only) |
So the plan’s “M1 Standard 4 GB” → ~$140/mo.
Cloud SQL
| Resource | Price |
|---|---|
| Postgres custom CORE, regional (HA) | (looked up per-instance; see --service CloudSQL for full list) |
KMS (global pricing, no regional premium)
| Key class | Price |
|---|---|
| Active software keys | $0.06/mo per active version |
| Active HSM symmetric | $1.00/mo |
| Active HSM asymmetric (RSA / ECDSA / etc.) | $1.00-$2.50/mo |
| Software crypto operations | $0.000003/operation (~$3 per million) |
Pub/Sub
- Message delivery (basic): free tier, then ~$50/TiB after exceeding limits
- Trivial cost at our pilot scale
Artifact Registry
- Storage: $0.10/GiB·mo (above 0.5 GB free tier)
- Egress within region: free
How to use this in practice
When sizing infrastructure or sanity-checking a cost estimate:
- Run
python3 scripts/gcp-prices.py --service <X>to get the current numbers - Multiply by quantity (cores, GB, hours, etc.)
- Sum across resources
- Add the cost-guardrails buffer (~10-20%) for incidentals (egress, ops, surprises)
Don’t trust calculators, blog posts, or memory. The catalog is the truth.
How often to refresh
The catalog changes infrequently — maybe a price change every quarter or so. We refresh this doc when:
- We’re sizing a new milestone’s infrastructure
- We see a billing-alert threshold cross
- It’s been more than 6 months since the last verification
Always include the fetch date in any cost estimate that references these numbers.