Cloudflare R2 vs S3: the egress math, and when R2 doesn’t win
For years, the charge for moving data out of a cloud (egress) worked as a quiet lock-in device: putting data in is free, but pulling it back out costs more the more you store, so the more you store the harder it is to leave. Cloudflare R2 broke that model with a flat zero egress rate. The real question is whether that is actually cheaper for your workload, or only for the headline. Let’s break it down.
Not sure whether R2 would lower your storage bill?
Book a free 30-min call
The short answer
R2 wins where a lot of data leaves the building: video streaming, public download APIs, artifact distribution, backup restores. S3 can still win when egress is modest but you write a lot or run huge numbers of small operations, when you need deep archival, or when you lean hard on AWS data services. Your access pattern decides this, not the zero-egress headline.
Where the gap comes from
Public clouds have long charged for data leaving their network. The stated reason is bandwidth cost, but the side effect is that the more data you accumulate with one provider, the more expensive it is to move out, and so the harder it is to switch. R2 removed that charge and shifted the weight onto storage and operations instead.
The regulatory backdrop matters too. The EU Data Act bans switching charges, including data egress fees, outright from 12 January 2027, and the major providers already announced free data transfer for customers leaving their platforms. This is context rather than legal advice: egress economics are changing, and that is worth factoring into a multi-year decision.
The real cost structure, side by side
Zero egress is only one line on the bill. Here is the fuller picture (rates are directional, as of November 2026, verify before budgeting):
| Line item | Cloudflare R2 | Amazon S3 (Standard) |
|---|---|---|
| Egress | $0/GB | ~$0.09/GB (first 10 TB; regional, up to ~$0.114 in some regions) |
| Storage | ~$0.015/GB-month | ~$0.023/GB-month |
| Operations | Writes and reads billed separately (Cloudflare labels these Class A and Class B) | Request pricing (PUT/GET, etc.) |
| Free tier | Standing, does not expire | 100 GB/month egress across services; 12-month intro tier |
| Deep archive | No cold-archive tier | Glacier tiers for cheap long-term archive |
| Data ecosystem | Standalone storage, S3-compatible API | Deep integration with Athena, Redshift, EMR, Lake Formation |
The key takeaway from this table: R2 is not free. It moves the cost from egress to storage and operations. Those per-operation charges for writes and reads (Class A and Class B on your Cloudflare bill) are the fine print, and they are what decide whether R2 actually comes out cheaper for your access pattern.
A worked example, and a counter-example
Take a workload that serves a lot of data: around 10 TB stored and around 50 TB of egress per month.
- On S3, egress dominates the bill: 50 TB at ~$0.09/GB lands around $4,400 a month (plus storage and requests).
- On R2, egress is zero, so the bill collapses to storage and operations, on the order of tens of dollars.
This is exactly the kind of scenario behind the headline savings numbers. The assumptions (egress volume, operation count) still have to be your own.
Now the counter-example, where R2 is not cheaper. Picture a write-heavy workload with millions of small objects created and overwritten constantly and very little egress. Write operations dominate the bill, and the lack of an egress charge buys you nothing because there is barely any egress. In that shape, an R2 bill can match S3 or come out higher.
When R2 wins
- Streaming and video, and anything that generates heavy download traffic.
- Public download APIs, where egress is the dominant cost line.
- Backup restores and disaster-recovery scenarios with large reads to the outside.
- Artifact distribution (builds, packages, application assets) to many consumers.
- Origin for multiple CDNs, when you want to avoid origin-pull egress charges.
When S3 still wins
- Deep AWS data-service integration (Athena, Redshift, EMR, Lake Formation), where data and compute sit together.
- Deep archival in Glacier tiers, which R2 has no equivalent for.
- Write-heavy and operation-heavy workloads, where per-write charges eat the zero-egress benefit.
- Low egress - if you barely serve data out, zero egress does not change the bill.
- Region and compliance breadth, where S3’s wide footprint and certifications matter.
Migration, in practice
R2 exposes an S3-compatible API, so for common cases switching comes down to changing client configuration and the endpoint, with no application rewrite. Budget for the cost of the initial data transfer into R2 and for the window where both services run in parallel during cutover. It is not zero work, but for a standard object store the barrier to entry is low. The step-by-step “how to move” is a separate technical piece.
How Devopsity approaches this decision
We do not start from a vendor; we start from your bill and your access pattern. We check how much data actually leaves, how many operations you run and how small they are, and where the data that feeds your compute lives. Only then do we calculate whether moving storage to R2 genuinely lowers the cost, or just trades an egress charge for an operation charge. That calculation is part of our FinOps and cost optimization practice, and in the wider picture it fits a multi-cloud strategy where each provider has the job it is actually good at.
Paying a fortune for S3 egress?
Book a free 30-minute call. We will cost your real storage spend against your current access pattern and tell you plainly whether moving to R2 pays off or not.
Frequently asked questions
Is Cloudflare R2 really free?
No. R2 charges nothing for egress, but you pay for storage (around $0.015/GB-month) and per operation for writes and reads (Cloudflare labels these Class A and Class B on your bill). R2 does not remove the cost so much as move it from egress to storage and operations. Whether it works out cheaper than S3 depends on your access pattern: for high-egress workloads the gap can be large, while for write-heavy workloads with many small operations it can disappear.
How much can R2 save versus S3?
It depends entirely on egress volume. For workloads that serve a lot of data out, the gap is large: at around 50 TB of egress a month, an S3 bill runs into the thousands of dollars (mostly egress), while on R2 it collapses to storage and operations, on the order of tens of dollars. For low-egress or write-heavy workloads the saving is small or none, because a zero egress rate changes nothing when there is barely any egress.
When is S3 still the better choice than R2?
S3 wins when you lean heavily on AWS data services (Athena, Redshift, EMR, Lake Formation), need deep archival in Glacier tiers, run a write-heavy or operation-heavy workload (per-write charges eat the zero-egress benefit), have low egress anyway, or need broad regional presence and compliance certifications. R2 is object storage without the deep data ecosystem around it.
Is R2 S3-compatible?
Yes. R2 exposes an S3-compatible API, so for common cases migration comes down to changing client configuration and the endpoint, with no application rewrite. Budget for the initial data transfer into R2 and for the window where both services run in parallel during cutover, but the barrier to entry for a standard object store is low.
How does the EU Data Act affect egress fees?
The EU Data Act bans cloud switching charges, including data egress fees, from 12 January 2027, and the major providers already announced free data transfer for customers leaving their platforms. This is business context rather than legal advice: a mechanism that worked as vendor lock-in for years is going away, which is worth factoring into multi-year decisions. Verify how the rules apply to your own situation.
Does R2 have a Glacier-equivalent deep-archive tier?
No. As of November 2026, R2 has no cold-archive tier comparable to Amazon S3 Glacier, which is built for cheap, long-term storage of rarely accessed data. For archival workloads this is a real gap, and in those cases S3 with Glacier tiers remains the cheaper option.