All posts

Egress on Google Cloud, explained

Google Cloud egress: free in, free inside a region, $0.02 to $0.08 per GiB between regions, about $0.105 to users in Europe and North America. When a load balancer or CDN lowers the bill.

Egress on Google Cloud is the data your app sends out, metered per GiB and priced by destination. Traffic in is free, and so is traffic inside one region. Between regions it costs $0.02 per GiB inside Europe or North America. To users, Cloud Run pays about $0.105 per GiB on its own continent, and virtual machines and load balancers $0.12. Only North America gets a free GiB.

In short

  • Cloud Run serving users on its own continent pays $0.105 per GiB up to 10 TiB a month, against the $0.12 the network pricing page lists for virtual machines.
  • Between regions, traffic costs $0.02 per GiB inside Europe or North America, and $0.08 on Cloud Run's intercontinental SKU after a free GiB.
  • 1 TiB a month to European users costs $107.52 from Cloud Run directly, $149.32 behind a global load balancer, $96.48 on Standard Tier and $117.18 with Cloud CDN.
  • A static outbound IP through Cloud NAT adds $0.045 per GiB and $3.65 a month for the address.
  • A nightly dump of a 5 GiB database to a server outside Google is 150 GiB a month, about $18.

Prices are Google's list prices read on October 11, 2026, from the region europe-west1 (Belgium). A GiB is 1,024 MiB and a TiB is 1,024 GiB; Google bills network traffic in GiB.

Three distances, three prices

Traffic into Google Cloud is free. Requests, uploads and the responses your app receives from other APIs cost nothing to receive. Google's network pricing page says it plainly, and adds the part that matters: "Responses to requests count as data transfer out and are charged."

What leaves a resource is priced by how far it goes:

  • Inside one region. Cloud Run to Cloud SQL, to a Cloud Storage bucket, to Firestore, to another Cloud Run service, all in the same region: free. The Cloud Run pricing page says there is "no charge for data transfer to Google Cloud resources in the same region".
  • To another Google Cloud region. Cents per GiB: $0.02 inside Europe or inside North America, more between continents.
  • To the internet. That is your users, your laptop, another cloud, a third-party API. This is the expensive path, from about $0.105 per GiB to $0.23 depending on the destination.
A diagram of where data goes from a Cloud Run service: requests in are free, traffic to Cloud SQL, Cloud Storage and Firestore in the same region is free, traffic to another region costs $0.02 to $0.08 per GiB, and traffic to users on the internet costs about $0.105 per GiB in Europe and North America
What Cloud Run pays per GiB by destination, from europe-west1. List prices of October 11, 2026

The third path grows with your traffic, and on a server rented by the month it is a line you never see, because the plan includes a few terabytes. In the worked examples it passes Cloud Run itself at ten million requests a month.

What Cloud Run charges for traffic to users

Cloud Run's pricing page says outbound internet traffic "uses the Premium Network Service Tier and is charged at Google Cloud networking pricing", with 1 GiB a month free within North America. Premium is the default of Google's two network tiers; the load balancer section below explains the other. The networking pricing page then lists Premium Tier traffic to Europe and to North America at $0.12 per GiB for the first TiB, $0.11 up to 10 TiB, and less above.

The bill tells a slightly different story. Cloud Run is billed under its own price lines (SKUs), and Google's Cloud Billing Catalog API, the machine-readable price list, gives them as:

  • Europe to Europe: $0.105 per GiB up to 10 TiB a month, $0.08 to 150 TiB, $0.06 above.
  • North America to North America: the first GiB free, then the same $0.105, $0.08 and $0.06.
  • Between continents (for example Belgium to users in the United States): $0.12, $0.085, $0.08.
  • To or from Oceania, and to China: $0.19 for the first 10 TiB.
  • Within Asia Pacific, South America or Africa: $0.12.

Our own bill for October 1 to 11, 2026, charged 1.485 GiB of Cloud Run traffic from Europe to European users at $0.1552, which is $0.1045 per GiB, while a virtual machine on the same billing account paid $0.120 per GiB for the same kind of traffic. So the network pricing page's $0.12 is the price for virtual machines and load balancers, and Cloud Run serving users on its own continent pays about $0.105. Planning with $0.12 overestimates by 14%, which is the safe side.

The free GiB is the only free tier for Cloud Run egress, and only for traffic from a North American region to North American users. An app in Belgium pays from the first byte.

Two details about how the meter counts:

  • Everything in the response counts, headers and body. Compressing responses is the cheapest egress saving there is: text formats such as JSON, HTML and JavaScript shrink to a fraction of their size with gzip or Brotli, which your framework or a middleware turns on.
  • The tiers count per SKU per month. Traffic to Europe and traffic to North America climb their own tiers separately, so a few TiB split across continents stay in the first tier of each.

You can read these prices yourself. The Catalog API needs only a token, and the command below prints every internet egress line of Cloud Run with its tiers. The token goes through a file only you can read, so it stays out of your shell history:

(umask 077; gcloud auth print-access-token | sed 's/^/Authorization: Bearer /' > token)
curl -s -H @token \
  "https://cloudbilling.googleapis.com/v1/services/152E-C115-5142/skus?pageSize=5000" |
  jq -r '.skus[] | select(.description | test("Internet Data Transfer Out")) |
    (.description | sub("Cloud Run Network Internet Data Transfer Out "; "")) as $d |
    .pricingInfo[0].pricingExpression.tieredRates |
    map("\(.startUsageAmount)+ $\((.unitPrice.units | tonumber) + .unitPrice.nanos / 1e9)") |
    [$d, join("  ")] | @tsv' | sort |
  awk -F'\t' '{printf "%-34.34s %s\n", $1, $2}'
rm token

152E-C115-5142 is Cloud Run's service ID in the Catalog. Each line is a destination, then the tiers: "10240+ $0.08" means $0.08 per GiB from 10,240 GiB (10 TiB) a month.

A terminal showing the Catalog API command and its output: Cloud Run internet egress prices per destination, Europe to Europe $0.105 then $0.08 from 10240 GiB, North America to North America free for the first GiB then $0.105, intercontinental $0.12, Oceania and China $0.19
Cloud Run's internet egress price lines, read from the Catalog API on October 11, 2026. The jq and awk parts of the command are shortened

Traffic inside Google Cloud

Inside one region, almost everything a Cloud Run app talks to is free: Cloud SQL, Cloud Storage, Firestore, Artifact Registry, Pub/Sub, other Cloud Run services. Our bill shows 33.7 GiB of container image pulls from Artifact Registry in the same region at $0 for the first eleven days of October. That is why Google's cost guide for Cloud Run starts its network advice with "co-locate your resources", and why the region guide asks for one region for the service and its data.

The second path, between regions, appears like this:

  • A database in another region. Cloud Run in europe-west1 and Cloud SQL in us-central1 pay for the traffic that crosses the Atlantic: $0.05 per GiB on the network page (the price for virtual machines), $0.08 on Cloud Run's own intercontinental SKU after a free GiB. The latency costs more than the money, because every query now crosses the ocean and back.
  • A bucket in a multi-region. Cloud Storage's pricing page says a region is not the same location as a multi-region, "even if the region is within the geographic limits of a multi-region". A service in europe-west1 reading from a bucket in the EU multi-region pays $0.02 per GiB. Put the bucket in the same region as the service unless you need the multi-region's redundancy.
  • Images built in one region and run in another. Artifact Registry in us and Cloud Run in Europe pay to move the image across the ocean whenever Cloud Run pulls it. Keep the repository in the service's region.

Google's network page prices traffic from virtual machines to Cloud SQL in the same region like traffic between machines, $0.01 per GiB across zones. For Cloud Run, the pricing page says same-region traffic is free, and our bill agrees: those lines are at $0.

Traffic your code sends out

Egress is any byte that leaves, so it includes what your app sends to other services: a call to a payment API, an email API, an AI model's API, a Redis hosted outside Google (priced per command in do you still need Redis on Cloud Run), a webhook to a customer's server. Only the request bytes count, because the response comes in, and inbound is free. For most apps these calls are a few KiB each and the egress is cents. The exception is uploading: an app that pushes user files or backups to another provider's storage pays internet egress on every byte. A nightly pg_dump of a 5 GiB database to a server outside Google is 150 GiB a month, about $18 at $0.12 from a virtual machine and more from Cloud SQL itself, which charges $0.19 per GiB to the internet (the Cloud SQL guide has the numbers).

Some APIs only accept calls from known IP addresses. Cloud Run's outbound requests come from Google's shared addresses, so for a fixed address you route outbound traffic through your own VPC network (a private network inside your project) and a Cloud NAT gateway (a service that sends that traffic out from one reserved IP address). Google's page on static outbound IPs gives the steps; the last one is a deploy with these flags, which exist in gcloud 587.0.0:

gcloud run deploy SERVICE --image IMAGE --region europe-west1 \
  --network default --subnet default --vpc-egress all-traffic

This changes the price of what goes through it. Cloud Run's pricing page says traffic into a VPC network is "billed as Data transfer from a VM", so it pays the virtual machine rate of $0.12 per GiB to the internet, not Cloud Run's $0.105, and Cloud NAT adds $0.045 per GiB processed and $0.005 an hour for the address, $3.65 a month, plus an hourly gateway charge. For 100 GiB a month that is $12.00 plus $4.50 against $10.50 without NAT. It also has a cost in time: Google's Direct VPC egress page warns of cold start delays of 30 seconds or more with Cloud NAT. Send only the traffic that needs the fixed address through it if you can; with --vpc-egress private-ranges-only, the default, only traffic to private addresses enters the VPC.

Load balancer, Standard Tier and Cloud CDN

A Cloud Run service answers on its own run.app address, and that is enough for many apps. A load balancer is a Google-run front door that receives requests and passes them to your service. Teams add a global external Application Load Balancer for a custom domain without the Preview domain mappings, for Cloud Armor (Google's web firewall), for several regions behind one address, or for Cloud CDN (a cache that keeps copies of your files near users). Each of these changes the egress price, and the change is not always down.

A global load balancer in front of Cloud Run. Google's load balancing page says that with Cloud Run behind it "you will not be charged for serverless outbound data transfer. Only internet outbound data transfer rates apply." That means the virtual machine rate, $0.12 per GiB for the first TiB, instead of Cloud Run's $0.105. On top come $0.008 per GiB of outbound data processing and $0.025 an hour for the forwarding rule (the load balancer's entry point), $18.25 a month. For 1 TiB a month to European users that is $149.32 against $107.52 without the load balancer.

Standard Tier. Google Cloud has two network tiers. Premium, the default, carries traffic on Google's own network to the point closest to the user. Standard hands it to the public internet near the region, with a 99.9% SLA instead of 99.99%. Standard Tier traffic is $0.085 per GiB, and the first 200 GiB a month on the billing account are free. Cloud Run cannot use Standard Tier on its own; a regional external Application Load Balancer can, and Google's page on serverless network endpoint groups, the way a load balancer points at Cloud Run, says regional external load balancers "are always Standard Tier". At 1 TiB a month that is $96.48, below Cloud Run's direct price, and it stays below from about 190 GiB a month, as long as nothing else on the account uses the free 200 GiB. Users far from the region notice the slower path more than users nearby.

Cloud CDN. With a global load balancer, Cloud CDN can cache responses at Google's edge. Cached bytes to Europe or North America cost $0.08 per GiB, plus $0.0075 per 10,000 cache lookups and $0.01 per GiB to fill the cache. Responses that cannot be cached still go through the load balancer at $0.12 plus $0.008. With 80% of bytes cacheable (images, scripts, fonts of about 100 KiB each), 1 TiB a month costs $117.18. The CDN beats serving directly only from about 2,200 GiB a month, because the forwarding rule and the uncached traffic at the higher rate eat the saving below that. Its real benefit at small scale is speed for far-away users, not price.

A bar chart of the monthly cost of sending 1 TiB to users in Europe from Cloud Run in europe-west1 four ways: Cloud Run directly $107.52, a global external load balancer $149.32, a regional external load balancer on Standard Tier $96.48, a global load balancer with Cloud CDN and 80% of bytes cached $117.18
1 TiB a month to European users, four ways. List prices of October 11, 2026, from europe-west1; requests assumed small

The same comparison at two other volumes, in the same order (direct, global load balancer, regional on Standard Tier, CDN):

  • 100 GiB a month: $10.50, $31.05, $19.05, $27.91. Below a few hundred GiB, serve directly.
  • 5 TiB a month: $537.60, $632.65, $477.41, $512.90.

These numbers assume small requests, all users in Europe and nothing else on the account using the Standard Tier's free 200 GiB.

Large files (images, video, downloads) streamed by Cloud Run also cost instance time. A Cloud Storage bucket read through a signed URL pays $0.12 per GiB and no instance time; behind Cloud CDN its transfer charge is waived and cache prices apply. Files and uploads with Cloud Storage sets up the signed URLs.

What leaving your current provider costs

If you are moving to Cloud Run, two egress bills matter: the one on Google Cloud after the move, and the one your current provider sends when you copy your data out. Here is what the same 1,000 GB a month (931 GiB) of traffic to users costs on the platforms people move from, read from their own pricing pages on October 11, 2026:

A table of egress prices on other providers and what 1,000 GB a month to users costs: Cloud Run $97.79, AWS $81.00 after 100 GB free, Vercel Pro included up to 1 TB, Render $149.25 on Hobby, Railway $50.00, Fly.io $20.00, a DigitalOcean $4 Droplet $4.31, Hetzner cloud in the EU included up to 20 TB, Heroku with no per-GB price and a 2 TB soft limit per app
1,000 GB a month to users in Europe or North America on each provider's list prices, read October 11, 2026. Plans' own prices are not included

Cloud Run's egress is among the dearest per GiB in that picture, and a virtual server with terabytes included is far cheaper for a bandwidth-heavy app. If your app sends a lot of data and little else, this line can decide the move, and Exodus's report says so when it does. For most web apps, egress at today's volume is a few dollars, and the comparison that matters is the whole bill.

Copying your data out of the old provider is usually small and one-off: a 20 GB database dump from AWS fits inside AWS's 100 GB free a month, the allowance the ECS on Fargate guide counts for a running service. For larger moves, AWS offers free transfer out to customers who move all their data off AWS or off one service. Google has had the same program since January 2024 for customers who later leave Google Cloud, with an Exit Notice filed before the copy. For customers in the EU and UK, Google's Data Transfer Essentials, launched in September 2025, carries traffic between Google Cloud and another cloud of the same organization at no charge, for workloads that run on both in parallel; you opt in and declare the traffic.

Measure before you move

The estimate is only as good as the number of GiB you put into it. Three places give that number:

  • Your current provider's bandwidth graph or invoice. Most hosting platforms show outbound traffic per month, because most of them bill for it past an included amount. Take the last three months, not the last week.
  • Your access logs. Response size times request count, plus the headers. The worked examples show a gcloud logging read command that does this for a Cloud Run service that already runs.
  • Where the users are. Traffic to your own continent and traffic across an ocean have different prices, and Oceania, South America, Korea, Indonesia and China cost $0.19 to $0.23 per GiB from a virtual machine. Your analytics tool knows the split.

Decide where large files live before the move: a bucket with signed URLs, or a CDN, is easier to set up on day one than to retrofit.

Read egress on your bill

Once the app runs, the bill is the truth. If you export billing to BigQuery (the free tier guide shows how to find the table), one query lists every Cloud Run network line for the month. Save it as egress.sql, with your own project and table name:

SELECT
  LEFT(REGEXP_REPLACE(REGEXP_REPLACE(sku.description,
    r'^(Cloud Run )?(Network )?', ''), r' Data Transfer( Out)?', ''), 40) AS sku,
  ROUND(SUM(usage.amount_in_pricing_units), 3) AS gib,
  ROUND(SUM(cost), 4) AS usd
FROM `PROJECT.billing_export.gcp_billing_export_v1_XXXXXX_XXXXXX_XXXXXX`
WHERE service.description = 'Cloud Run'
  AND usage.pricing_unit = 'gibibyte'
  AND invoice.month = '202610'
GROUP BY sku
ORDER BY usd DESC

Then run bq query --nouse_legacy_sql --format=pretty < egress.sql. Our own output for October 1 to 11 is below. "Internet Europe to Europe" is traffic to users; "Intercontinental" is users on another continent; "Carrier Peering" is traffic Google hands to a user's internet provider at a peering point, billed at $0.02; "Inter Region" lines are traffic to another region; "Intra Region" and "GOOGLE-API" are traffic to Google services in the same region and to Google's APIs, both free. Remove the service.description line to see every service's network lines; Cloud Storage, Cloud SQL and Firestore bill egress under their own names.

A terminal showing the bq query of Cloud Run network lines for October 2026: Internet Europe to Europe 1.485 GiB $0.1552, Internet Intercontinental 0.037 GiB $0.0042, carrier peering 0.017 GiB, inter-region, Google API and intra-region lines at $0
Cloud Run's network lines on our own bill, October 1 to 11, 2026. The table name is masked

Egress has no ceiling of its own. A scraper downloading your images in a loop, a bug that returns a whole table, or a large file linked from a busy page all bill at full price, and nothing stops them. A budget with alerts on the billing account is the guard; budget alerts and the billing export sets one up.

Where Exodus comes in

When Exodus audits a repository, it reads how much the app sends and where: response sizes, static files the app serves itself, files it uploads elsewhere, outbound API calls, and the region of each data store. The report prices egress at the SKU Cloud Run will bill, next to what the current provider charges for the same traffic, and flags paths that would cross a region or the ocean: a database or bucket in another region, a multi-region bucket, a distant image repository. When a load balancer, Standard Tier or a CDN would change the bill, it shows by how much in each direction.

FAQ

Is data transfer into Google Cloud free?

Yes. Requests, uploads and the responses your app receives from other APIs cost nothing to receive. Google's network pricing page adds that responses to requests count as data transfer out and are charged, so what your app sends back to users is the paid part.

Is traffic between Cloud Run and Cloud SQL free?

In the same region, yes: Cloud Run's pricing page says there is no charge for data transfer to Google Cloud resources in the same region, and our bill shows those lines at $0. A database in another region pays per GiB, $0.08 on Cloud Run's intercontinental SKU after a free GiB.

Does Cloud CDN lower egress costs?

Only at volume. Cached bytes to Europe or North America cost $0.08 per GiB, but the forwarding rule and the uncached traffic at $0.12 eat the saving below about 2,200 GiB a month. At 1 TiB a month with 80% of bytes cached, the CDN costs $117.18 against $107.52 served directly.

How much does a static outbound IP cost on Cloud Run?

Cloud NAT adds $0.045 per GiB processed and $3.65 a month for the address, plus an hourly gateway charge, and traffic through the VPC pays the virtual machine rate of $0.12 per GiB. For 100 GiB a month that is $12.00 plus $4.50, against $10.50 without NAT.

Can I cap egress spending on Google Cloud?

Egress has no ceiling of its own: a scraper downloading images in a loop or a bug that returns a whole table bills at full price. A budget with alerts on the billing account is the guard that tells you in time.

Sources

26
  1. cloud.google.comCloud Run pricing, Google
  2. cloud.google.comNetwork pricing, Google
  3. cloud.google.comNetwork Service Tiers pricing, Google
  4. docs.cloud.google.comNetwork Service Tiers overview, Google
  5. docs.cloud.google.comServerless network endpoint groups overview, Google
  6. cloud.google.comCloud Load Balancing pricing, Google
  7. cloud.google.comCloud CDN pricing, Google
  8. cloud.google.comCloud NAT pricing, Google
  9. docs.cloud.google.comStatic outbound IP address, Cloud Run, Google
  10. docs.cloud.google.comDirect VPC egress with a Shared VPC network, Cloud Run, Google
  11. cloud.google.comCloud Storage pricing, Google
  12. docs.cloud.google.comBest practices for cost-optimized Cloud Run services, Google
  13. cloud.google.comCloud switching just got easier: Removing data transfer fees when moving off Google Cloud, Google Cloud blog
  14. cloud.google.comApplying for free data transfer when exiting Google Cloud, Google
  15. cloud.google.comIntroducing no-cost, multicloud Data Transfer Essentials for EU and U.K. customers, Google Cloud blog
  16. aws.amazon.comAmazon EC2 On-Demand pricing, data transfer, AWS
  17. aws.amazon.comAmazon S3 pricing, AWS
  18. vercel.comPricing and regional pricing, Vercel
  19. render.comOutbound bandwidth, Render
  20. docs.railway.comPricing, Railway docs
  21. fly.ioResource pricing, Fly.io
  22. docs.digitalocean.comBandwidth billing, DigitalOcean
  23. digitalocean.comDroplet pricing, DigitalOcean
  24. docs.hetzner.comTraffic, Hetzner docs
  25. devcenter.heroku.comLimits, Heroku Dev Center
  26. Exodus team: Cloud Billing Catalog API read Oct 11, 2026 for Cloud Run

Exodus moves your app to Cloud Run.

A free web cabinet and an open-source CLI. With your coding agent, they audit your app, show what it costs today and on Google Cloud Run, and move it there step by step.

Sign up for freeSee a sample report
  1. Install the CLIOne line in your terminal, once per machine.
  2. Give the prompt to your agentSign in with Google and copy one prompt. Your agent audits the app on your machine.
  3. Read the report, then moveThe bill today and on Cloud Run, what to change and in what order. The agent does the moving.

Read next

Consult an expert

For a move that is hard to make alone: many services, a large database, no room for downtime. An engineer who has moved production apps to Cloud Run reads what you send and replies by email.

Optional.

What the app does and what it runs on today.

Optional. Anything that would change the plan: compliance, regions, a contract that ends.

Your email goes to our engineers and nowhere else.