Where your cloud storage bill actually goes: storage vs egress vs requests

Where your cloud storage bill actually goes: storage vs egress vs requests

I have looked at enough cloud bills to know the pattern by now. Someone's storage volume barely changed month to month, but the bill went up anyway, sometimes by a lot. Nine times out of ten, the actual data sitting in storage was never the problem. 

Cloud storage billing is not one number. It is at least three separate charges stacked together, and most people only ever look at the first one. Let me break down where the rest of that bill actually comes from.


Why does your bill keep changing even when your data is not growing?


Because storage capacity is only one of several billing dimensions on a typical invoice.

  • Storage capacity: the straightforward per-GB-per-month charge

  • Egress: the cost of moving data out of the provider's network

  • API requests: charges for every PUT, GET, LIST, and DELETE operation your applications make

  • Retrieval fees: apply specifically to cold storage tiers when you actually access that data

Cloud bills in 2026 commonly run 30% to 40% over what teams originally forecasted, and the overshoot almost always comes from data access charges, not storage volume growth.

Which of these usually causes the biggest surprises?

Egress, by a wide margin. It is the line item most people underestimate when they first set up a storage bucket, and the one that grows fastest once real traffic or automated processes start moving data around.


What exactly are you paying for on the "storage" line?


This part is genuinely simple. It is a per-GB, per-month rate, and it varies mainly by which storage tier you choose.

Provider

Standard tier storage rate

AWS S3 Standard

$0.023 per GB per month

Google Cloud Storage Standard

$0.020 per GB per month

Cloudflare R2

$0.015 per GB per month

Wasabi

$0.00699 per GB per month

Backblaze B2

$0.006 per GB per month

Does moving to a cheaper cold storage tier actually save you money?

Only if you rarely touch the data. Cold tiers like Nearline, Coldline, and Archive charge separately for retrieval, ranging from roughly $0.01 to $0.05 per GB depending on the tier, plus early deletion penalties if you remove data before a minimum retention period, typically 30, 90, or 365 days. If your data gets accessed more than once a month on average, a standard or cool tier often ends up cheaper once you count retrieval fees honestly.


What is egress, and why does it usually cost more than people expect?


Egress is the fee charged for data leaving a provider's network, whether that is to the internet, to your users, or to another cloud entirely. Ingress, meaning data coming in, is free everywhere. Egress is where providers make a meaningful share of their margin.

Provider

Standard internet egress rate

AWS S3

Around $0.09 per GB

Azure Blob Storage

Around $0.087 per GB

Google Cloud Storage

$0.08 to $0.12 per GB

Oracle Cloud Infrastructure

$0.0085 per GB after 10TB free monthly

Cloudflare R2, Backblaze B2, Wasabi

$0, no egress charge

A team moving 10TB out to the internet in a single month on a standard hyperscaler can expect to pay somewhere around $1,100 to $1,200 in egress alone, often more than the underlying storage cost for that same data.

Are there real ways to avoid egress fees entirely?

Yes, and this is worth taking seriously if your workload is genuinely egress heavy. Zero-egress providers like Cloudflare R2, Backblaze B2, and Wasabi remove this cost dimension completely. Putting a CDN in front of storage that does charge egress also helps significantly, since transfer from origin storage to a CDN edge is often free or discounted compared to serving content directly.

What are "requests," and how do they quietly add up?

Every API call your application makes to read, write, or list objects in storage carries its own small charge, usually priced per thousand or ten thousand operations.

  • AWS charges roughly $0.005 per 1,000 PUT requests and $0.0004 per 1,000 GET requests

  • Google Cloud charges around $0.05 per 10,000 Class A operations and $0.004 per 10,000 Class B operations

  • LIST operations are typically billed at the more expensive PUT rate, not the cheaper GET rate

An application generating 10 million PUT requests in a single month pays roughly $50 in request fees alone, entirely separate from whatever storage or egress it uses.

When do request costs actually become a meaningful line item?

Mainly for applications writing or listing large numbers of small objects, things like backup jobs, logging pipelines, or sync tools that touch thousands of files repeatedly. Structuring your storage key namespace to minimize unnecessary LIST calls is one of the simplest ways to keep this cost dimension under control.

So which of the three actually drives most of your bill?

It depends entirely on your workload, which is exactly why the raw per-GB storage rate is such a misleading number on its own.

  • Egress usually dominates for internet-facing applications, media delivery, or anything moving data between clouds

  • Storage cost dominates for large archival datasets with genuinely low access frequency

  • Request costs dominate for applications generating huge volumes of small objects or frequent writes

Real-world total spend commonly runs two to five times higher than the raw storage rate once all of this gets counted together, and at high volumes with heavy egress, total costs between providers can differ by more than seven times for functionally similar service.


How do you actually audit your own bill instead of guessing?


A short, practical process works better than trying to memorize every provider's pricing page.

  • Pull 30 days of access logs before assuming a cold tier will save money

  • Break your last invoice into storage, egress, and request line items separately, rather than looking at the total

  • Check whether you are regularly paying to move data out of the same cloud storage provider you also pay to keep it in

  • If egress is your biggest line item, seriously evaluate a zero-egress provider or a CDN in front of your current setup

Doing this once tells you which of the three dimensions is actually worth optimizing, instead of cutting storage costs while egress quietly keeps climbing in the background.


Where this leaves you


The per-GB storage rate on a pricing page is the least useful number for predicting your actual bill. Storage, egress, and request costs behave completely differently, scale with different parts of your workload, and often move in opposite directions depending on how you structure your setup. Breaking your invoice into those three categories, rather than treating it as one number, is the fastest way to find out what is actually driving your costs and where there is real room to bring them down.

Frequently asked questions

1. Is egress always the most expensive part of a cloud storage bill? 

Not always, but it is the most commonly underestimated. For workloads that rarely serve data externally, storage and request costs can matter more. For anything user-facing or cross-cloud, egress usually ends up being the largest and most volatile line item.

2. Are zero-egress providers actually cheaper overall, or just cheaper on that one line item? 

It depends on your access pattern. Zero-egress providers sometimes charge a slightly higher per-GB storage rate, but for any workload where data leaves the bucket frequently, the removed egress cost usually outweighs that difference by a wide margin.

3. Do request costs matter for smaller teams, or is this mainly an enterprise problem? 

They can matter surprisingly quickly, particularly for applications with automated processes like backups, syncing, or logging that generate large volumes of small requests. It is worth checking request volume even at smaller scale, since the cost per operation looks tiny until it is multiplied by millions of calls.

0 Comments

No comments yet — be the first to respond.