S3 vs Azure Blob vs GCS — Object Storage Cost Comparison
Three object stores, similar sticker prices, wildly different bills once retrieval and egress hit. Here is where the money actually goes.
Key takeaways
- Three object stores, similar sticker prices, wildly different bills once retrieval and egress hit.
- Here is where the money actually goes.
On this page
S3 vs Azure Blob vs GCS — Object Storage Cost Comparison
Every few months someone drops a bucket price into a spreadsheet, sees $0.023 per GB, and declares the storage decision "basically the same everywhere." Then the invoice shows up and the storage line is a rounding error next to retrieval and egress. That gap between sticker price and real bill is the whole story with object storage, and it is where I keep watching teams get burned.
We run workloads across all three clouds, so I have paid these bills with my own budget. Here is how S3, Azure Blob, and Google Cloud Storage actually compare once you stop looking at the headline $/GB.
The tiers, and what they cost per GB#
All three vendors sell the same rough ladder: a hot tier for data you touch constantly, a cool/infrequent tier for stuff you read occasionally, a cold tier for rarely-touched archives, and a deep archive tier for compliance dead weight. The names differ. AWS uses S3 Standard, Standard-IA, Glacier Instant/Flexible, and Glacier Deep Archive. Azure uses Hot, Cool, Cold, and Archive access tiers. Google uses Standard, Nearline, Coldline, and Archive.
Here is the per-GB-month picture for a US region, rounded to what you can plan against. Prices drift, so treat these as ratios rather than gospel.
| Tier | AWS S3 | Azure Blob | Google GCS |
|---|---|---|---|
| Hot / Standard | $0.023 | $0.018 | $0.020 |
| Cool / IA / Nearline | $0.0125 | $0.010 | $0.010 |
| Cold / Coldline | $0.004 | $0.0036 | $0.004 |
| Archive / Deep | $0.00099 | $0.00099 | $0.0012 |
| PUT (per 1k) | $0.005 | $0.0055 | $0.005 |
| GET (per 1k) | $0.0004 | $0.00044 | $0.0004 |
| Retrieval (cold, per GB) | ~$0.01 | ~$0.02 | ~$0.02 |
| Egress to internet (per GB) | ~$0.09 | ~$0.087 | ~$0.12 |
| Min storage duration (cool) | 30 days | 30 days | 30 days |
| Min storage duration (archive) | 180 days | 180 days | 365 days |
Two things jump out. Azure Blob Hot is genuinely cheaper per GB than the other two, by a meaningful 15-20% at the hot tier. If your bill is dominated by warm data that sits in the top tier, Azure wins on paper. Second, the archive tiers converge to nearly identical numbers, so nobody is choosing a cloud based on deep-archive storage price.
Where the surprises live: requests, retrieval, minimums#
The per-GB number is the part everyone reads and the part that matters least for active workloads. The fees that wreck budgets are the ones attached to touching your data.
Request pricing punishes small objects. PUTs run around $0.005 per thousand, GETs about a tenth of that. Store ten million tiny thumbnails and the PUT cost alone is $50 before you have stored a single byte of value. This is why I push teams to pack small objects into larger blobs when access patterns allow it.
Retrieval fees are the trap on cold tiers. Storing in Glacier or Archive is cheap precisely because reading is not. AWS Glacier Flexible and Azure Archive both bill retrieval per GB plus per-request, and Azure's cold-tier retrieval runs roughly double AWS at around $0.02/GB. Pull 10TB back out of archive and you can pay more in one retrieval than a year of storing it. Cold storage is for data you are betting you will not read.
Minimum storage durations quietly bill you for data you already deleted. Put an object in Azure Cool or S3 Standard-IA and delete it after a week, and you still pay the 30-day minimum. Archive tiers stretch this to 180 days on AWS and Azure, and a full 365 days on Google. Churning data through cold tiers is a classic own-goal.
The number that dominates: egress#
Here is the uncomfortable truth for anyone serving content. Storage is cheap, requests are cheap, and egress is the bill. All three charge roughly $0.09-0.12 per GB to send data to the internet, and Google is the priciest of the three at the top of the tier.
Serve 100TB of images a month and egress alone is $9,000-12,000. The storage under it might be $2,000. You are not running a storage service at that point, you are running an egress service with a storage cache attached. This is exactly why CDN offload and origin-shield caching pay for themselves so fast, and it is the first lever I reach for in any cloud cost optimization review.
Concrete: 1TB and 100TB#
Let me make it real. Assume hot-tier storage plus one full read of the data served to the internet each month, which is a reasonable shape for a media or asset workload.
Store and serve 1TB/month:
- Storage: AWS $23, Azure $18, GCS $20
- Egress (1TB served): AWS ~$92, Azure ~$89, GCS ~$122
- Requests (assume 2M GETs): ~$0.80 each
AWS lands near $116, Azure near $108, GCS near $143. Azure wins, and it wins on both storage and egress. GCS loses almost entirely on egress.
Store and serve 100TB/month:
- Storage: AWS $2,300, Azure $1,800, GCS $2,000
- Egress (100TB served): AWS ~$8,200 (egress tiers down at volume), Azure ~$8,000, GCS ~$11,000
AWS and Azure sit around $10,000-10,500, GCS closer to $13,000. At scale the storage line is under a quarter of the bill and egress is everything. If this were my workload I would front it with a CDN and cut the origin egress by 80-90%, which changes the vendor math entirely because CDN egress is priced separately and negotiable.
Tier-selection guidance#
The rules I actually apply:
- Serving content to users? Hot tier, and put a CDN in front. The storage tier barely matters next to egress. Azure Hot is the cheapest floor if you have a free hand.
- Backups and logs you read a few times a year? Cool/Nearline. The 30-day minimum is fine because backups outlive it easily.
- Compliance archives you pray you never read? Archive/Deep. But respect the 180-365 day minimums and never put churning data here.
- Millions of tiny objects? Watch request costs, and pack them if you can. The per-GB tier is a distraction.
- Read-heavy from cold storage? Stop. You picked the wrong tier. Retrieval fees will exceed what hot storage would have cost.
The call we'd make#
For pure storage economics on warm data, Azure Blob Hot is the cheapest of the three and it is not especially close. For most real workloads the vendor choice barely moves the needle, because egress dominates and the fix is architectural, not a bucket-price hunt. Pick the cloud your compute already lives in to avoid cross-cloud egress, push everything user-facing behind a CDN, and reserve cold tiers strictly for data you are confident you will not read. Chasing a 20% storage discount while paying full freight on egress is optimizing the wrong line item.
Get the DevOps Troubleshooting Cheat Sheet
Subscribe and get our free one-page reference for the errors that eat an afternoon — CrashLoopBackOff, OOMKilled, Terraform state locks, and more — plus new guides as we publish them.
GitHub Actions Best Practices in 2026: Workflows You Can Trust
A production-focused GitHub Actions guide: reusable workflows, least-privilege permissions, keyless OIDC to the cloud, SHA-pinned actions, environments with approvals, concurrency-safe deploys, and CodeQL/Dependabot gates — with copy-paste examples.
Kubernetes Workload Identity — Projected Tokens and OIDC to Cloud IAM
How pods can talk to AWS, GCP, and Azure with no static keys — using audience-bound projected ServiceAccount tokens and the cluster OIDC issuer.
More from Cloud
Explore more articles in this category
Best Serverless Databases in 2026 (Compared)
A practitioner comparison of the leading serverless databases by use case, cold-start behavior, branching, pricing model, and lock-in.
Cloudflare D1: The Edge SQLite Database Guide (2026)
A practitioner's look at Cloudflare D1, the serverless SQLite database built for Workers, covering setup, read replication, limits, and fit.
Neon vs PlanetScale: Serverless SQL Compared (2026)
A practitioner comparison of Neon's serverless Postgres against PlanetScale's Vitess-backed MySQL to help you pick the right database.
You might have missed
Evergreen posts worth revisiting.