Cloud Infrastructureintermediate

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 comparison of Amazon S3 vs Cloudflare R2
FeatureAmazon S3Cloudflare 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.

All Comparisons

Amazon S3 vs Cloudflare R2 — FAQ

Common questions answered from the comparison above

Is Cloudflare R2 really free egress?

Yes. R2 does not charge for data transferred out to the internet on either storage class. You still pay for storage and for Class A and Class B operations, and Infrequent Access adds a $0.01/GB retrieval fee.

How much does S3 egress cost in 2026?

The first 100 GB per month of internet egress is free across regions; after that, us-east-1 charges about $0.09/GB for the next 10 TB, with lower rates at higher volumes. Transfers to CloudFront and to AWS services in the same region are free.

Is Cloudflare R2 fully S3 compatible?

Mostly. Core operations such as PUT, GET, LIST, multipart uploads and presigned URLs work with standard S3 SDKs by changing the endpoint. Some advanced S3 features like certain ACLs, S3 Select and storage-class lifecycle transitions are missing or differ.

Is R2 cheaper than S3 for storage?

Yes for standard storage: R2 is $0.015/GB-month versus S3 Standard's $0.023/GB-month in us-east-1. For cold archives, S3 Glacier classes are much cheaper than either R2 tier.

How do I migrate from S3 to R2?

Use Cloudflare's Super Slurper for a one-time bulk copy, or Sippy to copy objects lazily from S3 as they are requested. Then point your S3 SDK at the R2 endpoint with R2 API tokens; most code needs only configuration changes.

Get the next comparison by email

One email a week: new and trending developer tools, fresh comparisons, and what shipped. Unsubscribe in one click.