The short answer
For a small application, compute is almost never what costs you money. A containerised app on Cloud Run serving a million requests a month comes to roughly $0.48. The same app with a managed Postgres instance beside it comes to roughly $51.
That ratio — about 100:1 — surprises nearly everyone, and it is the single most useful thing to understand about Google Cloud pricing at small scale. The cost is not in serving traffic. It is in the things that run continuously whether or not anyone is using them.
Every figure below is us-central1, on-demand, no committed-use discount, and the arithmetic is shown so you can check it against Google’s Cloud Run pricing and Cloud SQL pricing yourself.
Four reference setups, monthly
Assumes a 512 MiB container averaging 200 ms per request, and for the database rows a single 1 vCPU / 3.75 GiB Cloud SQL instance with 10 GiB of SSD storage and no high availability.
| Setup | Traffic | Monthly cost |
|---|---|---|
| Static site on Cloud Storage | Any small volume | ~$0 — 5 GB storage and 100 GB egress from North America are in the Always Free tier |
| Cloud Run only | 50,000 requests | $0 — entirely inside the free tier |
| Cloud Run only | 1,000,000 requests | $0.48 — only vCPU-seconds exceed the free allowance |
| Cloud Run only | 10,000,000 requests | $48.48 — $43.68 CPU, $1.60 memory, $3.20 requests |
| Cloud Run + Firestore | 1,000,000 requests | ~$0.48 — Firestore’s free 50,000 reads/20,000 writes per day covers a lot |
| Cloud Run + Cloud SQL | 1,000,000 requests | ~$51 — the database is 99% of the bill |
| Cloud Run + Cloud SQL with HA | 1,000,000 requests | ~$100 — HA doubles vCPU and memory |
Unit prices used: Cloud Run request-based billing at $0.000024 per vCPU-second and $0.0000025 per GiB-second of active time, plus $0.40 per million requests. Cloud SQL Enterprise at $0.0413 per vCPU-hour and $0.007 per GiB-hour of memory, around $0.12 per GiB-month for SSD storage. Read from Google’s pricing pages on 19 September 2026; verify before relying on them.
Why Cloud Run is so cheap, and where that stops
Cloud Run scales to zero. A service with no traffic runs no instances, consumes no vCPU-seconds and no memory GiB-seconds, and therefore costs nothing. You are billed for the time your container is actually handling a request.
The Always Free tier then covers the first 2 million requests, 180,000 vCPU-seconds and 360,000 GiB-seconds each month. At 512 MiB and 200 ms per request, that works out to roughly 900,000 requests a month before you pay anything at all — the memory allowance is far more generous than the CPU one, which is why CPU is the first line to go over.
Two things break this. The first is setting a minimum instance count, which keeps a container warm to avoid cold starts and bills you for idle time at $0.0000025 per vCPU-second. One always-on instance costs roughly $6.50 a month in CPU alone — worth it for a production API, pure waste for a side project.
The second is not capping maximum instances. Scale-to-zero cuts both ways: a service that scales down to nothing will also happily scale up to hundreds of instances under a traffic spike or a request loop. Setting a maximum is the single most effective cost guardrail on Cloud Run.
What people forget to count
Egress. Data leaving Google Cloud is billed beyond the small free allowances, and it is the line that most often turns a predictable bill into a surprising one. A site serving large images or video to users outside North America can generate a bill with nothing to do with compute.
Idle static IP addresses. A reserved external IP is charged while it is *not* attached to a running instance. A stopped VM with a reserved IP still costs money, which is exactly the trap it sounds like.
Load balancer forwarding rules. These bill hourly from the moment they exist, whether or not traffic flows through them.
Logging above the free allowance. The first 50 GiB of log data per project per month is free. Verbose debug logging left on in production goes through that faster than teams expect.
Persistent disks. Billed on provisioned size, not on what you have written. A 100 GB disk holding 2 GB of data costs the same as a full one.
How to keep it genuinely cheap
Use Cloud Run and let it scale to zero. Set a maximum instance count. Avoid minimum instances until cold starts are a real problem rather than a theoretical one.
Avoid Cloud SQL until you actually need relational guarantees. Firestore’s free tier — 1 GiB of storage, 50,000 reads and 20,000 writes per day — covers a surprising amount of real application. If you do need Postgres, the database options are worth comparing properly.
Keep egress inside Google Cloud where you can, and put a CDN in front of anything media-heavy.
And set up billing alerts before any of this, remembering that a Google Cloud budget does not actually cap spending — it sends an email.
Common questions
- How much does it cost to run a small app on Google Cloud?
- A containerised app on Cloud Run serving 50,000 requests a month costs nothing — it sits inside the Always Free tier. At a million requests it is about $0.48. Adding a managed Postgres database takes it to roughly $51 a month, because Cloud SQL bills continuously and has no free tier.
- Is Google Cloud cheaper than a $5 VPS?
- For a low-traffic app with no relational database, yes — Cloud Run can genuinely cost $0 where a VPS costs $5 to $10 every month. Once you add Cloud SQL, a VPS running your own Postgres is cheaper in raw dollars. What you give up is backups, patching, failover and point-in-time recovery, which you then own.
- Why is my Google Cloud bill higher than I expected?
- The usual culprits are things that bill continuously rather than per use: a Cloud SQL instance, a reserved static IP not attached to anything, load balancer forwarding rules, a Cloud Run service with minimum instances set, or egress traffic. Compute for a small app is rarely the cause.
- Does Cloud Run really cost nothing when nobody is using it?
- Yes, provided you have not set a minimum instance count. Cloud Run scales to zero and bills for time spent handling requests, so an idle service consumes no vCPU-seconds or memory GiB-seconds. Setting minimum instances to keep a container warm reintroduces a continuous charge.
- What is the cheapest way to run a database on Google Cloud?
- Firestore has a genuine free tier and scales to zero, so for many small applications it costs nothing. If you need Postgres or MySQL, the cheapest managed option is a single small Cloud SQL instance at roughly $50 a month, and self-hosting on a free-tier e2-micro VM is cheaper still in dollars but shifts backups, patching and availability onto you.