AWS S3 vs Cloudflare R2: Object Storage Comparison 2026
Compare AWS S3 and Cloudflare R2 object storage on pricing, egress fees, performance, and features to decide which fits your team's storage needs.
Updated 2026-10 · 2026
AWS S3
Industry-standard object storage with the deepest AWS ecosystem integration
Strengths
- +Deepest ecosystem integration with Lambda, CloudFront, Athena, and 200+ AWS services
- +Mature storage classes (Standard, Infrequent Access, Glacier) for tiered cost optimization
- +Extremely high durability (11 nines) and global multi-region replication options
Weaknesses
- -Egress (data transfer out) fees add up fast, especially for public-facing content
- -Pricing structure is complex with dozens of line items (requests, storage class, transfer tiers)
- -Requires AWS account setup and IAM knowledge, steeper learning curve for small teams
Best for
Teams already running infrastructure on AWS who need deep service integration and don't serve large volumes of public content
Cloudflare R2
S3-compatible object storage with zero egress fees
Strengths
- +Zero egress fees — the single biggest cost difference vs S3 for public content delivery
- +S3-compatible API makes migration mostly a config change, not a rewrite
- +Generous free tier: 10GB storage, 1M Class A and 10M Class B operations/month
Weaknesses
- -Smaller ecosystem than AWS — fewer native integrations outside Cloudflare's own stack
- -No storage class tiering (no Glacier-equivalent for cold archival)
- -Newer product (GA since 2022) with less third-party tooling maturity
Best for
Teams serving public content, media, or static assets where egress costs dominate the bill, and teams wanting predictable flat pricing
Feature Comparison
| Feature | ||
|---|---|---|
| Storage cost (per GB/month) | $0.023 (Standard tier) | $0.015 |
| Egress / data transfer out | $0.09/GB after 100GB free tier | Free, no egress charges |
| Free tier | 5GB storage for 12 months only | 10GB storage + 1M/10M ops, ongoing |
| API compatibility | Native S3 API | S3-compatible API |
| Cold storage / archival tier | Yes (Glacier, Glacier Deep Archive) | No |
| CDN integration | Via CloudFront (extra cost) | Native with Cloudflare CDN (included) |
| Compute integration | Lambda, extensive AWS service mesh | Cloudflare Workers |
| Durability | 99.999999999% (11 nines) | Not independently published, built on Cloudflare's infra |
| Multi-region replication | Yes, cross-region replication built-in | Limited, single global namespace |
| Request pricing | $0.005/1,000 PUT, $0.0004/1,000 GET | $4.50/million Class A, $0.36/million Class B |
| Console/UI maturity | Mature, feature-rich AWS console | Simpler, newer Cloudflare dashboard |
| Setup complexity for small teams | Higher (IAM, bucket policies) | Lower (simpler access tokens) |
The Verdict
If your app serves a lot of public content — images, video, downloads — R2's zero egress fees will beat S3 on total cost almost every time, often dramatically. Stick with S3 if you're deep in the AWS ecosystem and need storage tiering like Glacier for compliance archival; otherwise R2's S3-compatible API makes switching low-risk and worth trying.
How to switch from AWS S3 to Cloudflare R2
- 1Export your S3 bucket contents using `aws s3 sync s3://your-bucket ./local-backup` to pull files locally, or run an S3 Batch Operations job with a manifest CSV for very large buckets to copy objects directly to another destination.
- 2Create a Cloudflare R2 bucket in the Cloudflare dashboard and generate an S3-compatible API token (Account ID, Access Key ID, Secret Access Key) from the R2 settings page.
- 3Use `rclone` or the AWS CLI pointed at R2's S3-compatible endpoint (`https://<account_id>.r2.cloudflarestorage.com`) to sync your local backup or directly transfer bucket-to-bucket.
- 4Update application code and environment variables to point at the new R2 endpoint and credentials, keeping the same S3 SDK calls since the API is compatible.
- 5Recreate any lifecycle rules, CORS policies, and public access settings manually in R2's dashboard since these don't transfer automatically from S3.
- 6Run both buckets in parallel for a short period, verify object counts and checksums match, then update DNS/CDN configs to route traffic to R2 and decommission the S3 bucket.
AWS S3 vs Cloudflare R2: common questions
How do I export my data out of AWS S3?+
Use the AWS CLI `aws s3 sync` command to copy entire buckets to local disk or directly to another S3-compatible endpoint, or use S3 Batch Operations for large-scale exports with a manifest file (CSV or JSON). Files keep their original format and folder structure, so no conversion is needed since R2 reads standard S3 objects.
What do I lose moving from S3 to Cloudflare R2?+
You lose Glacier-style cold storage tiers for cheap long-term archival, so if you rely on lifecycle policies to move old data to deep archive, you'll need to handle that manually or keep a cold-archive bucket in S3. You also lose some AWS-native integrations like Athena querying directly over S3 data and tight IAM policy granularity.
Is Cloudflare R2's free tier enough for a small team?+
For most small teams serving a website's images, documents, or app assets, yes — 10GB storage and 10 million Class B (read) operations per month covers moderate traffic. If you're storing large media libraries or running high-volume batch processing, you'll exceed the free tier and move to R2's pay-as-you-go pricing, which is still cheaper than S3 for egress-heavy workloads.
Can I keep using my existing S3 SDK and tools with R2?+
Yes, R2 implements the S3 API, so most S3 SDKs (boto3, aws-sdk-js, etc.) work by just changing the endpoint URL and credentials. Tools that rely on AWS-specific features like S3 Select, Glacier transitions, or IAM-based bucket policies won't work and need to be reconfigured or dropped.
Does switching to R2 actually save money over time?+
If your workload has significant data egress (public downloads, media streaming, API responses with file attachments), R2 will almost always cost less over time because egress is the line item that scales fastest on S3 bills. If your usage is mostly internal storage with minimal public transfer, the savings are smaller since R2's storage rate ($0.015/GB) is only modestly cheaper than S3's ($0.023/GB).
Related comparisons
More Dev Tools tools people are leaving
All Dev Tools alternatives →What would you save without Amazon S3 or Cloudflare?
Pick your team size and see the yearly number.