Google Cloud · Cost
Our Google Cloud bill was $1,800. Real traffic cost $3.64.
BusTrans, our ticketing and GPS product for bus operators, runs a small backend on Google Cloud Run. Traffic is modest: about 400,000 requests in a year. The bill for that year was a little over $1,800, which felt wrong for an app that size.
Step 1: group the bill by SKU, not by project
The default billing report groups by project, which gives you one line: "BusTrans, $1,811". Useless. Switch Billing → Reports → Group by to SKU and every line gets a real name:
| What | Cost for the year |
|---|---|
| Cloud Run minimum instances (CPU + memory, idle) | ~$1,049 |
| Compute Engine VM and disk | ~$714 |
| Artifact Registry storage | ~$23 |
| Memorystore Redis (already deleted early in the period) | ~$22 |
| Cloud Run actual requests | $3.64 |
The work the app actually did cost $3.64. Everything else was capacity kept switched on.
Step 2: find where the warm instances come from
The deploy workflow asked for zero minimum instances. The bill said about five were running around the clock. The catch: Cloud Run has a minimum at the service level and one at the revision level, and a service-level value set in the console wins over what your deploy file says. This lists both:
gcloud run services list --format="table(metadata.name,region,
metadata.annotations.'run.googleapis.com/minScale':label=SERVICE_MIN,
spec.template.metadata.annotations.'autoscaling.knative.dev/minScale':label=REVISION_MIN)"
Step 3: decide how warm you need to be
Zero minimum instances is the cheapest, but the first request after a quiet stretch waits a few seconds for a container to start. For an app people use during working hours, one warm instance is the sweet spot: about $16 a month at our size, and nobody notices a cold start. We set it explicitly in the deploy workflow, with --cpu-boost for faster scale-up, so a console click can't quietly undo it.
Step 4: remove the leftovers
- The VM. A Container-Optimized OS instance behind a load balancer, left over from before the move to Cloud Run. Nothing in the code referenced it. Check before deleting: who calls it, what's on its disk.
- Old images. An Artifact Registry cleanup policy that keeps the last few images per repository.
- Staging. Any second service deployed with default settings and no instance cap.
Where we are
The single-warm-instance change is deployed and the leftovers are being removed. Based on the billing rates above, the bill should drop from roughly $150 a month to under $20. We'll update this post with the real numbers once a full billing cycle has passed.
If your Google Cloud bill feels too high for what your app does, it probably is. We do this as a fixed-price audit.
Tell us what you need connected.
A 30-minute call with Nicoleta, our CEO and lead engineer. You leave with a concrete plan and a fixed quote, whether or not you work with us.

