R2 vs S3, OSS, and B2: choosing cost-efficient object storage
Compare R2, Amazon S3, Alibaba Cloud OSS, and Backblaze B2 across storage, requests, public egress, ecosystem, and region—and learn when R2 is cost-efficient.
Edited and verified by Orange Book Editorial Team ·

The short answer
R2 is cost-efficient mainly because R2 does not charge for egress, not because it always has the lowest storage rate. It is a strong fit when downloads for images, packages, user files, or public datasets greatly exceed stored capacity and the application already uses Cloudflare. Pure cold backup, deep AWS integration, or a China-region workload can make B2, S3, or OSS the better fit.
Do not compare storage dollars per GB alone
A useful monthly model starts with:
total = capacity + writes + reads + public outbound + retrieval/minimum retention + CDN/compute + operations/migration| Product | Core advantage | Main cost surfaces | Strong fit | Watch closely |
|---|---|---|---|---|
| Cloudflare R2 | S3-compatible API, Workers Binding, and no R2 egress charge | Capacity and Class A/B operations; composed services can still bill | Download-heavy Cloudflare apps, media, and public files | Infrequent Access has retrieval and minimum-duration rules; it is not the full AWS ecosystem |
| Amazon S3 | Mature storage classes, IAM, events, and AWS data integrations | Capacity, requests, transfer paths, and added features | AWS data platforms, enterprise permissions, complex lifecycle policy | Region, CloudFront, same-region paths, and discounts change the result |
| Alibaba Cloud OSS | China and Asia regions, Alibaba Cloud integration, resource packages | Capacity, requests, public outbound or origin traffic, added features | China-region workloads and existing Alibaba network/compliance workflows | Filing, region, transfer path, and package details are workload-specific |
| Backblaze B2 | Low storage rate and an outbound allowance tied to average storage | Capacity, outbound above allowance, and transactions | Backup, archive, and downloads inside the allowance | R2's zero egress does not erase B2's storage-price advantage |
Detailed description
- 01Storage
Model average and peak capacity plus Standard or infrequent-access classes.
- 02Operations
Map uploads, listings, reads, and deletes to each vendor's request classes.
- 03Delivery
Separate direct internet, same-region, CDN-origin, and partner paths.
- 04Composition
Price Workers, CDN, image processing, and logging as separate services.
Pricing snapshot: a scale model, not a quote
These public-price references were checked on 2026-08-27. They exclude tax, negotiated discounts, exceptional regions, CDN, and migration. Reopen every official price page before launch.
| Product and basis | Storage | Public outbound | Requests and allowance notes |
|---|---|---|---|
| R2 Standard | $0.015/GB-month | $0 for direct transfer via Workers API, S3 API, or public R2 delivery | Monthly allowance includes 10 GB, 1 million Class A, and 10 million Class B operations |
| S3 Standard, US East example | AWS examples use $0.023/GB-month for the first 50 TB | After AWS's shared first 100 GB/month, a US/Europe public-internet example is $0.09/GB | PUT, GET, and other requests are separate; CloudFront and same-region rules differ |
| OSS Standard LRS, official example | Example rate is $0.0173/GB-month | Internet outbound or CDN-origin traffic is commonly separate | Region and resource packages vary enough to require a target-region calculation |
| B2 pay as you go | Starts at $6.95/TB/30 days | Free outbound can reach 3× average monthly storage, then $0.01/GB | Recheck partner routes and transaction rules |
Sources: R2 Pricing, Amazon S3 Pricing, OSS billing overview, OSS traffic fees, and Backblaze B2 Pricing.
One download-heavy teaching model
Assume 1,000 GB average storage, 2,000 GB public downloads, 1 million write-class operations, and 10 million read-class operations per month. Use Standard storage and omit tax, discounts, CDN, and migration:
- R2 is about $14.85/month after the listed free capacity. The operation counts sit at the listed allowances, and R2 egress is zero.
- Using the US S3 examples above, storage is about $23 and 1,900 GB of billable public outbound is about $171, for roughly $194/month plus request charges.
- At $6.95/TB, if 2 TB of downloads is inside B2's 3×-storage allowance, B2 can be near $6.95/month. R2 is clearly not universally cheapest.
- OSS is intentionally not reduced to a fake global number. Enter the target region, outbound path, and resource package in the current calculator.
This is not a vendor quote
AWS's first 100 GB is a shared cross-service allowance, B2 outbound allowance depends on average storage, and Workers, image processing, or other Cloudflare services can add cost. Recalculate with your region, cache hit rate, request classification, contract, and migration volume.
When R2's cost efficiency is strongest
- Monthly downloads are multiples of average storage and files are public or delivered through a controlled Worker.
- The application already runs on Workers, so a Binding reduces connection, credential, and cross-platform network work.
- The team values a predictable bill more than managing multiple storage classes, origin pricing, and traffic packages.
- Images, PDFs, build artifacts, model files, or user uploads compose naturally with D1 metadata and Queue processing.
Do not translate “no R2 egress charge” into “R2 is mandatory” when:
- Data is rarely downloaded and the lowest storage or archive rate dominates.
- The system relies on S3 events, Lake Formation, IAM, or other AWS data services.
- Users, origin, and compliance workflow are primarily in China and OSS has the better regional fit.
- Petabytes of existing data, lifecycle rules, or enterprise discounts make migration risk larger than the headline difference.
Detailed description
Translate an AI-built app into storage constraints
AI can write an upload endpoint but does not know your download ratio, retention period, or compliance region. For a SaaS, CMS, image converter, or PDF tool, provide maximum file size, monthly growth, downloads, private authorization, deletion policy, content-type validation, retry behavior, and a cost ceiling.
For Cloudflare's internal KV, D1, R2, and Durable Objects boundary, see the storage decision guide. After selecting R2, continue with the migration playbook and production delivery recipe. Applied examples include the image transformer and PDF tool.
Official and vendor sources
Did this page help you complete your goal?
Beta feedback is generated in this browser and is never uploaded automatically.
Choosing KV, D1, R2, or Durable Objects
Choose Cloudflare storage by data shape, consistency, object size, and coordination needs.
D1 vs Supabase and Neon: edge SQLite or serverless Postgres
Compare Cloudflare D1, Supabase, and Neon across runtime model, SQL, capacity, consistency, platform scope, and billing dimensions.