Storage costs about the same everywhere — roughly a penny and a half per GB per month. The number that actually decides your bill is egress: what it costs to serve that data back out. And on that number, the three providers are not close.
| Storage /GB/mo | Egress to internet | |
|---|---|---|
| Cloudflare R2 | $0.015 | $0.00 |
| Backblaze B2 | ~$0.006 | free up to 3x stored data, then $0.01/GB (free via Cloudflare/Fastly) |
| Amazon S3 | ~$0.023 | $0.09/GB |
S3's $0.09/GB egress is the reason "we'll just use S3" becomes an expensive default for anything that serves files to users — images, downloads, video, a public API. At even modest serving volume it dwarfs the storage cost. R2's flat $0 egress is what forced this whole market to reckon with the issue; it's genuinely free to serve, with Cloudflare's edge delivering it.
Backblaze B2 splits the difference: cheapest raw storage, free egress up to three times your stored volume each month (fine for most workloads), then $0.01/GB — one-ninth of S3 — and unlimited free egress if you serve through Cloudflare or Fastly via the Bandwidth Alliance.
So the decision is really about serving pattern. If the data mostly sits there as backup or archive and rarely leaves, B2 is the cheapest on storage alone. If you're serving it to users at any real volume, R2's zero egress wins outright and it isn't a hard call — the bigger your serving volume, the wider the gap. S3 only makes sense if you're already deep in [AWS](/entry/eks-vs-gke-vs-aks-managed-kubernetes-pricing-and-the-part-that-isnt-the-control-) and the data never leaves the region, or you genuinely need a feature only S3 has.