Orange Book
Reference

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 ·

DECISION GUIDECOST & ARCHITECTURE26 minPricing checked: 2026-08-27
Technical illustration of object storage modules distributing files through a mesh to computers, tablets, and phones
A Codex ImageGen chapter illustration for the idea of storage plus high-volume delivery; pricing and topology facts live in the article and technical diagrams.

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:

One comparison basis
total = capacity + writes + reads + public outbound + retrieval/minimum retention + CDN/compute + operations/migration
ProductCore advantageMain cost surfacesStrong fitWatch closely
Cloudflare R2S3-compatible API, Workers Binding, and no R2 egress chargeCapacity and Class A/B operations; composed services can still billDownload-heavy Cloudflare apps, media, and public filesInfrequent Access has retrieval and minimum-duration rules; it is not the full AWS ecosystem
Amazon S3Mature storage classes, IAM, events, and AWS data integrationsCapacity, requests, transfer paths, and added featuresAWS data platforms, enterprise permissions, complex lifecycle policyRegion, CloudFront, same-region paths, and discounts change the result
Alibaba Cloud OSSChina and Asia regions, Alibaba Cloud integration, resource packagesCapacity, requests, public outbound or origin traffic, added featuresChina-region workloads and existing Alibaba network/compliance workflowsFiling, region, transfer path, and package details are workload-specific
Backblaze B2Low storage rate and an outbound allowance tied to average storageCapacity, outbound above allowance, and transactionsBackup, archive, and downloads inside the allowanceR2's zero egress does not erase B2's storage-price advantage
Comparison of public delivery cost paths for R2 and regional object storage
For download-heavy workloads, trace the billing path of every byte. Edges reveal once; reduced-motion users receive the same static diagram.Open original
Detailed description
The upper lane shows an object moving from R2 through an optional Worker or cache layer to a public reader. R2 itself has no egress charge, although Worker requests and other composed services can bill. The lower lane shows S3 or OSS where public outbound is commonly a separate meter whose amount depends on region, CDN, and transfer path.
  1. 01
    Storage

    Model average and peak capacity plus Standard or infrequent-access classes.

  2. 02
    Operations

    Map uploads, listings, reads, and deletes to each vendor's request classes.

  3. 03
    Delivery

    Separate direct internet, same-region, CDN-origin, and partner paths.

  4. 04
    Composition

    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 basisStoragePublic outboundRequests and allowance notes
R2 Standard$0.015/GB-month$0 for direct transfer via Workers API, S3 API, or public R2 deliveryMonthly allowance includes 10 GB, 1 million Class A, and 10 million Class B operations
S3 Standard, US East exampleAWS examples use $0.023/GB-month for the first 50 TBAfter AWS's shared first 100 GB/month, a US/Europe public-internet example is $0.09/GBPUT, GET, and other requests are separate; CloudFront and same-region rules differ
OSS Standard LRS, official exampleExample rate is $0.0173/GB-monthInternet outbound or CDN-origin traffic is commonly separateRegion and resource packages vary enough to require a target-region calculation
B2 pay as you goStarts at $6.95/TB/30 daysFree outbound can reach 3× average monthly storage, then $0.01/GBRecheck 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.
Object storage decision flow based on public delivery, cloud ecosystem, China-region needs, and storage priority
The flow selects a first candidate, not a substitute for a same-basis benchmark, load test, and migration review.Open original
Detailed description
Start by asking whether public downloads greatly exceed stored capacity; if so, evaluate R2. Otherwise test deep AWS integration, China-region and Alibaba Cloud requirements, and storage-price priority to bring S3, OSS, B2, or other object stores into the candidate set.

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.

On this page