AWS S3 vs Cloudflare R2: Real Cost at 1TB, 5TB and 10TB
Storage is only part of an object-storage bill. This model adds requests and internet egress to show when R2 saves hundreds of dollars and when S3 still makes sense.

- With monthly downloads equal to stored data, R2 costs about $15 at 1TB while S3 costs about $116.
- At 10TB, the same model reaches roughly $153 on R2 and $1,157 on S3. Internet egress creates almost the entire gap.
- S3 still wins when the application depends on AWS eventing, storage classes, IAM depth or service-to-service transfers that never leave AWS.
Object storage comparisons often stop at $0.023 versus $0.015 per GB. That misses the bill that hurts: data leaving the platform. A media archive that is rarely opened behaves very differently from a download service that serves its entire stored volume every month.
This model uses US-region S3 Standard and R2 Standard rates checked October 4, 2026. It assumes 1 binary TB equals 1,024GB, data transferred to the internet equals stored volume, one million writes and 10 million reads per month. Taxes, support, CDN, Workers and compute are excluded.
The rates behind the calculation
| Charge | AWS S3 Standard | Cloudflare R2 Standard |
|---|---|---|
| Storage | $0.023/GB-month | $0.015/GB-month |
| Write requests | $5.00/million | $4.50/million Class A |
| Read requests | $0.40/million | $0.36/million Class B |
| Internet egress | $0.09/GB in the first paid tier | $0 |
| Monthly free allowance | Account/program dependent; model gives 100GB egress | 10GB storage, 1M A, 10M B |
Real monthly cost at 1TB, 5TB and 10TB
| Stored + downloaded | S3 storage | S3 egress | S3 total* | R2 total* | R2 saving |
|---|---|---|---|---|---|
| 1TB | $23.55 | $83.16 | $115.71 | $15.21 | $100.50 |
| 5TB | $117.76 | $451.80 | $578.56 | $76.65 | $501.91 |
| 10TB | $235.52 | $912.60 | $1,157.12 | $153.45 | $1,003.67 |
*Totals include one million writes and 10 million reads. R2’s free request allowance covers that exact request profile; S3 adds $9 for requests. S3 egress gives the first 100GB free in this model.
R2 wins public delivery because the cost curve is flat
R2’s bill barely changes when a stored file becomes popular. Reads can add request charges, and a cache miss still generates a Class B operation, but the bytes leaving R2 remain free. That makes video, software downloads, public datasets, model files and user-generated media the clearest R2 workloads.
One R2 user reported serving roughly $2,500 worth of S3-equivalent transfer for $10.80. Another reported moving all S3 usage and cutting the bill by about 90%, primarily by removing egress. Those are not guarantees, but they expose the same cost mechanism as the table.
S3 wins when storage is part of an AWS system
S3 is not merely a bucket. It connects directly to Lambda, EventBridge, Athena, CloudFront, replication, extensive storage classes, access points, inventory and mature IAM controls. If data moves among AWS services without crossing the public-internet billing boundary, a simple egress comparison exaggerates R2’s advantage.
S3 also offers archival tiers that can undercut R2 Standard for data that is rarely retrieved. The correct comparison for a compliance archive is Glacier or an infrequent-access design, not S3 Standard versus R2 Standard.
R2’s S3 compatibility is broad, not identical
R2 works with the AWS SDK by changing the endpoint, account credentials and region setting. Common object operations migrate cleanly. Applications using specialized S3 events, bucket policies, object Lambda, access points or AWS-specific identity flows need an explicit compatibility test.
Production reports also mention sporadic latency spikes and slower support escalation. S3 has outages too, but AWS offers a longer operational history and more mature support structure. Keep a tested export path and do not let a low bill become the only copy of critical data.
Use this decision rule
| Workload | Better default | Reason |
|---|---|---|
| Public downloads, media, datasets | R2 | Zero direct egress dominates the bill |
| AWS application data and events | S3 | Native integrations and IAM |
| Long-term cold archive | S3 archival tiers | Lower storage in exchange for retrieval rules |
| Cloudflare Workers application | R2 | Native binding and one billing ecosystem |
| Maximum portability | R2 with tested S3-compatible client | Lower exit cost, but verify APIs |
If users download the data, R2 wins the price comparison. If AWS services process the data, S3 may still win the architecture.
Calculate storage, operations and destination-specific transfer together. A price per stored gigabyte alone is not an object-storage bill.
Frequently asked questions
Is Cloudflare R2 cheaper than AWS S3?
For public-download workloads, usually yes. R2 storage and request rates are slightly lower and direct internet egress is free. An AWS-native workload with little egress may value S3 integrations more than the price difference.
Does Cloudflare R2 really have free egress?
Cloudflare charges $0 for data transferred directly from R2 through the S3 API, Workers API, r2.dev or a custom domain. Connected metered services can still add their own charges.
Can R2 replace S3 without code changes?
R2 supports the S3 API and common SDKs, but it is not a perfect implementation of every S3 feature. Test the exact APIs, eventing, lifecycle, policy and consistency assumptions your application uses.