Amazon S3 vs Cloudflare R2
Amazon S3 vs Cloudflare R2 compared on storage price, egress fees, request costs, S3 API compatibility and features, with real cost math for 2026 workloads.
Quick Answer
Cloudflare R2 charges nothing for egress, which makes it far cheaper for anything served to the public internet — media, downloads, user uploads, CDN origins. Amazon S3 remains the better choice for data that stays inside AWS, for analytics and lifecycle-heavy archives, and when you need its deep feature set and storage classes like Glacier.
Reviewed by TechLogHub Engineering Team. Last updated October 15, 2026. Pricing verified against Cloudflare's R2 pricing docs (Standard and Infrequent Access) and current S3 Standard storage, request and data-transfer rates as of October 2026.
| Feature | Amazon S3 | Cloudflare R2 |
|---|---|---|
| Standard Storage Price | $0.023/GB-mo (us-east-1, first 50 TB) | $0.015/GB-mo |
| Egress to Internet | $0.09/GB after 100 GB free | Free |
| Write Requests (PUT) | $0.005 per 1,000 | $4.50 per million (Class A) |
| Read Requests (GET) | $0.0004 per 1,000 | $0.36 per million (Class B) |
| Free Tier | 100 GB egress/mo; limited new-account credits | 10 GB + 1M Class A + 10M Class B/mo |
| Storage Classes | Standard, IA, One Zone, Intelligent-Tiering, Glacier, Express One Zone | Standard, Infrequent Access |
| S3 API Compatibility | Native | Compatible (most operations) |
| Region Selection | Choose any AWS region | Location hints / EU jurisdiction |
| Event Notifications | Via Queues/Workers | |
| Object Versioning | ||
| CDN Integration | CloudFront (free origin transfer) | Cloudflare CDN, custom domains |
Amazon S3
AWS's object storage service and the de facto standard S3 API, with multiple storage classes from Express One Zone to Glacier Deep Archive and deep integration across AWS.
Pros
- The reference S3 API — every tool and SDK supports it fully
- Wide range of storage classes including Intelligent-Tiering and Glacier for cheap archives
- Rich features: versioning, Object Lock, replication, lifecycle rules, S3 Tables, Inventory
- Event notifications to Lambda, SQS, SNS and EventBridge
- Free data transfer to CloudFront and to AWS services in the same region
- Explicit region choice for data residency and compliance
Cons
- Internet egress around $0.09/GB for the first 10 TB in us-east-1, after 100 GB free
- Pricing is complex: storage tiers, request classes, transfer and retrieval fees
- Standard storage ($0.023/GB) costs more than R2 ($0.015/GB)
- Surprise bills from public buckets, hotlinking or chatty clients are common
Best For
Data that is processed inside AWS, long-term archives, analytics lakes and compliance-heavy workloads needing versioning, Object Lock and replication.
Cloudflare R2
Cloudflare's S3-compatible object storage with zero egress fees, integrated with Workers and the Cloudflare CDN.
Pros
- Zero egress fees to the internet — the decisive cost advantage
- Cheaper standard storage at $0.015/GB-month
- Free tier: 10 GB storage, 1M Class A and 10M Class B operations per month
- S3-compatible API works with most existing SDKs and tools
- Native bindings from Workers and easy public buckets behind Cloudflare's CDN
- Simple pricing with only two storage classes
Cons
- Infrequent Access operations ($9/M writes, $0.90/M reads) and retrieval fees cost more than Standard
- Not every S3 API feature is implemented; edge cases in SDKs and tools can break
- Fewer storage classes — no deep-archive tier like Glacier
- Location hints and jurisdictions rather than precise region selection
- Smaller set of event integrations outside the Cloudflare ecosystem
Best For
Public-facing assets, user uploads, media, downloads and CDN origins where egress would dominate an S3 bill.
Egress pricing: the number that decides it
Storage is cheap on both platforms; moving data out is where they differ. S3 gives you 100 GB of free internet egress per month, then charges about $0.09/GB for the next 10 TB from us-east-1, tapering to $0.05/GB at very high volumes. R2 charges nothing for egress, whether data is fetched directly, through a public bucket or via Cloudflare's CDN. Consider 1 TB stored and 10 TB served per month. On S3 Standard that's roughly $23 for storage and around $890 for egress (10 TB minus the free 100 GB, at $0.09/GB) — before request charges. On R2 it's about $15 for storage and $0 for egress. Even if you add a few dollars of Class B read operations, R2 is more than 50x cheaper for this workload. The gap vanishes when data never leaves AWS. Transfers from S3 to EC2, Lambda or other services in the same region, and transfers to CloudFront, are free. If your pipeline reads objects inside AWS and only small results go to users, egress may be negligible and S3's richer feature set wins.
Requests, storage classes and hidden costs
Request pricing is close but structured differently. S3 Standard charges $0.005 per 1,000 PUT/COPY/POST/LIST requests ($5 per million) and $0.0004 per 1,000 GETs ($0.40 per million). R2 charges $4.50 per million Class A (writes, lists) and $0.36 per million Class B (reads), with DELETE free on both. For write-heavy workloads with millions of small objects, these operation costs can matter more than storage. S3's breadth of storage classes is a real advantage for cold data: Intelligent-Tiering moves objects automatically, and Glacier Instant, Flexible and Deep Archive offer far lower per-GB prices for archives you rarely read. R2 offers only Standard ($0.015/GB) and Infrequent Access ($0.01/GB, plus $0.01/GB retrieval and a 30-day minimum). For a petabyte of compliance archives, S3 Glacier Deep Archive will undercut R2 by a wide margin. For hot or warm data that's read by users, R2's simple model is cheaper and far easier to forecast. Model your read/write ratio and object sizes before assuming either platform is cheaper on operations alone.
S3 API compatibility and migration
R2 implements the S3 API, so most applications switch by changing the endpoint URL, credentials and region (set to 'auto'). The AWS SDKs, rclone, s3cmd and many backup tools work out of the box. Cloudflare also offers Super Slurper for bulk migration and Sippy for incremental migration, which copies objects from S3 on first request so you can move without a big-bang transfer. Compatibility isn't total. Some S3 features, such as certain ACL behaviours, object-level storage class transitions, S3 Select and parts of the notification and replication APIs, are missing or work differently. Tools that rely on obscure headers or bucket policies may need adjustments, so test your actual workflow before migrating production. Remember the one-time cost of leaving S3: migrating 50 TB out of AWS means paying S3 egress once. Sippy spreads that cost over time by moving only objects that are actually requested, which can make migration economical for large buckets with a long tail of rarely accessed data.
Features, compliance and ecosystem fit
S3 is the most feature-complete object store available. Versioning, Object Lock for WORM compliance, cross-region and same-region replication, lifecycle policies, S3 Inventory, Storage Lens, access points, S3 Tables for Iceberg, and event notifications to Lambda, SQS, SNS and EventBridge make it the backbone of many data platforms. You choose an exact region, which simplifies data-residency requirements. R2's strengths are simplicity and its place in Cloudflare's developer platform. Workers can read and write buckets through bindings without credentials, event notifications flow into Cloudflare Queues, and public buckets with custom domains get Cloudflare's CDN and caching automatically. R2 Data Catalog adds managed Apache Iceberg tables, aimed at analytics without egress fees. Location hints and an EU jurisdiction option cover common residency needs, but not every specific country requirement. If your architecture is AWS-centric and event-driven, S3 integrates more cleanly. If you are building on Workers, or your main problem is serving bytes to the internet cheaply, R2 fits naturally.
Verdict
Choose Cloudflare R2 for anything your users download over the internet — images, video, builds, backups served to customers, user-generated content — because zero egress removes the line item that dominates most S3 bills. Choose Amazon S3 when data is consumed by other AWS services in the same region, when you need Glacier-class archiving, Object Lock, replication or rich event triggers, or when compliance requires a specific region. A common pattern is to keep S3 as the system of record inside AWS and put R2 in front for public delivery.

