Cloudflare's zero-egress strategy: R2, Workers, Pages
Cloudflare R2 charges $0.00/GB for egress. Not a typo. AWS charges $0.09, GCP $0.12. Cloudflare built an entire stack around eliminating egress fees, R2 storage, Workers compute, Pages hosting, CDN bandwidth. This is the honest assessment of what R2 does well and where S3 still wins. Use the calculator to compare your specific scenario.
R2 vs S3 Pricing Breakdown
R2 is cheaper than S3 across every pricing dimension, but the egress savings are the most dramatic. Here is the line-by-line comparison.
| Item | Cloudflare R2 | AWS S3 | R2 savings |
|---|---|---|---|
| Storage | $0.015/GB/month | $0.023/GB/month | 35% |
| Egress (data transfer out) | $0.00/GB | $0.09/GB | 100% |
| Class A operations (PUT, POST, LIST) | $0.36/million | $5.00/million | 93% |
| Class B operations (GET, HEAD) | $0.036/million | $0.40/million | 91% |
Sources: Cloudflare R2 Pricing, AWS S3 Pricing. Verified April 2026.
S3 vs R2: Real-World Cost Comparison
At scale, the savings from R2 are substantial. Here are four real-world scenarios showing the monthly cost difference.
| Scenario | R2 cost | S3 cost | Savings |
|---|---|---|---|
| 1TB stored, 1TB egress/mo | $15 | $113 | $98/mo ($1,176/yr) |
| 1TB stored, 10TB egress/mo | $16 | $923 | $907/mo ($10,884/yr) |
| 10TB stored, 50TB egress/mo | $152 | $4,530 | $4,378/mo ($52,536/yr) |
| 100TB stored, 100TB egress/mo | $1,500 | $10,000 | $8,500/mo ($102,000/yr) |
The Zero-Egress Ecosystem
Workers (Edge Compute)
Cloudflare Workers runs JavaScript/TypeScript at the edge with zero egress charges for responses. The free plan includes 100,000 requests/day. The paid plan ($5/month) includes 10 million requests/month with no per-request bandwidth charges. Workers can read from R2 without egress fees, process data at the edge, and return responses globally, all without data transfer charges.
Pages (Static Hosting)
Cloudflare Pages provides unlimited bandwidth for static site hosting. No egress fees, no bandwidth limits, no CDN charges. The free plan supports unlimited sites with 500 builds/month. The Pro plan ($20/month) adds more build minutes and analytics. For static sites, this is the most cost-effective hosting platform available, with global CDN delivery included.
CDN (Content Delivery)
Cloudflare's CDN is included free on all plans with unlimited bandwidth. This is in stark contrast to AWS CloudFront ($0.085/GB) and Azure CDN ($0.081/GB). For websites and applications, proxying through Cloudflare eliminates CDN egress charges entirely. The CDN operates across 300+ edge locations worldwide, providing low-latency delivery without per-GB costs.
Bandwidth Alliance
The Cloudflare Bandwidth Alliance provides free or discounted egress between Cloudflare and partner providers including Backblaze B2, DigitalOcean, Linode, and others. Backblaze B2 egress through Cloudflare is completely free, making the B2 + Cloudflare combination a powerful zero-egress storage solution for backup and archival workloads.
What R2 Lacks vs S3: Honest Assessment
R2 is not a full S3 replacement. Here are the features and capabilities where S3 still has a clear advantage. Consider these carefully before migrating production workloads.
S3 advantages over R2
- *Full lifecycle policies (R2 has limited support)
- *Cross-region replication (R2 is single-region)
- *S3 Object Lock and compliance modes
- *Deep AWS service integration (Lambda triggers, Athena, Glue)
- *S3 Inventory and analytics
- *Mature ecosystem with extensive tooling
- *More storage classes (Glacier, Deep Archive)
When to stay on S3
- *Compliance requires specific AWS certifications
- *Deep Lambda/Athena/Glue integration needed
- *Data residency requires specific regions
- *Minimal egress (storage-heavy, read-light workloads)
- *Need for Glacier/Deep Archive tiers
- *Existing S3 event-driven architectures
How to Migrate from S3 to R2
R2 uses the S3-compatible API, making migration straightforward. Here is the step-by-step process.
Create an R2 bucket
Create your R2 bucket via the Cloudflare dashboard or API. Note the account ID and generate R2 API credentials (Access Key ID and Secret Access Key).
Sync data using rclone or AWS CLI
Use rclone or the AWS CLI with a custom endpoint (https://<account-id>.r2.cloudflarestorage.com) to sync your S3 data to R2. For large datasets, consider using Cloudflare Sippy for gradual migration.
Update application endpoints
Change your application's S3 endpoint URL to the R2 endpoint. Since R2 is S3-compatible, most SDKs work with just an endpoint change. Test thoroughly in a staging environment first.
Configure custom domain (optional)
Bind a custom domain to your R2 bucket via Cloudflare DNS for a clean URL. This also enables Cloudflare's CDN caching in front of R2.
Verify and cut over
Run both S3 and R2 in parallel for a testing period. Verify data integrity, access patterns, and performance. Once validated, switch production traffic to R2 and decommission S3.
Related Guides
Frequently Asked Questions
Does Cloudflare R2 have egress fees?
No. Cloudflare R2 charges $0.00 per GB for egress (data transfer out). You pay only for storage at $0.015 per GB per month, Class A operations at $0.36 per million, and Class B operations at $0.036 per million. There are no bandwidth charges for reading data from R2, regardless of volume. This makes R2 dramatically cheaper than AWS S3 for egress-heavy workloads.
How does Cloudflare R2 compare to AWS S3?
For a workload storing 1TB and serving 10TB/month of egress: S3 costs approximately $23 for storage plus $900 for egress, totalling $923/month. R2 costs $15 for storage plus $0 for egress, totalling approximately $15-20/month including operations. R2 uses the S3-compatible API, so migration is straightforward. R2 has fewer features than S3: limited lifecycle policies, no cross-region replication, and a smaller ecosystem. But for egress-heavy use cases, the cost difference is dramatic.
What is the catch with Cloudflare R2 zero egress?
The main catches are: R2 has fewer features than S3 including limited lifecycle policies and no native cross-region replication; operation costs can add up for workloads with many small requests; R2 is a newer platform with less ecosystem maturity; and you become dependent on Cloudflare's infrastructure. That said, for most egress-heavy storage use cases, these trade-offs are well worth the cost savings. R2's S3 compatibility means you can migrate back if needed.
How do I migrate from S3 to Cloudflare R2?
R2 uses the S3-compatible API, so migration tools like rclone, the AWS CLI (with custom endpoint), or Cloudflare's migration tool work directly. The basic process is: create an R2 bucket, configure API credentials, sync data using rclone or the AWS CLI with the R2 endpoint, update your application to use the R2 endpoint URL, and verify all data and access patterns work correctly. For large datasets, Cloudflare offers Sippy for gradual migration that serves from R2 when available and falls back to S3.
When should I NOT use Cloudflare R2?
Do not use R2 when you need: S3-specific features like S3 Object Lock, complex lifecycle policies, or S3 Inventory; tight integration with other AWS services (Lambda triggers, Athena queries, Glue ETL); cross-region replication for data residency requirements; regulatory compliance that mandates specific cloud providers; or when you have minimal egress and S3's lower operation costs are more important. R2 is optimised for egress-heavy read workloads, not for every S3 use case.
Prices verified from Cloudflare R2 Pricing. Last verified April 2026.