Quick verdict
R2 is compelling for internet delivery where egress dominates. S3 is often the simpler choice inside an AWS architecture or when its storage classes and integrations matter more. Test compatibility and total cost.
Cloudflare R2 vs Amazon S3 turns on one ratio: how much you egress per gigabyte stored. Cloudflare publishes R2 Standard storage at “$0.015 / GB-month” and states that direct egress “does not incur data transfer (egress) charges and is free.” S3 charges egress above a free allowance at region-dependent rates.
On this page
The ratio that decides it
Object storage bills have two dominant components — what you keep and what you send — and they scale independently. Storage cost tracks your data volume; egress cost tracks your traffic. The choice between providers therefore hinges on the ratio between them, not on either figure alone.
Compute yours before comparing anything. Take your monthly egress in gigabytes and divide by your average stored gigabytes. A public media library serving each stored file many times a month lands high — a ratio of ten or more is ordinary. A backup archive that is written and rarely read lands near zero.
Then apply the arithmetic. On R2 Standard, storing one terabyte costs about $15 a month at the published $0.015 per GB-month, and sending any amount of it out costs nothing. Under a metered egress model at a rate of E dollars per gigabyte, sending one terabyte costs 1,000 × E — so even a modest per-gigabyte rate overtakes the storage line quickly once traffic is a multiple of volume.
That is the entire structural argument in Cloudflare R2 vs Amazon S3, and it is why the answer differs so sharply between a download site and a backup target rather than being a general verdict.
R2’s published rates
Cloudflare’s R2 pricing documentation publishes figures you can put directly into a model:
| Item | Standard | Infrequent Access |
|---|---|---|
| Storage | $0.015 / GB-month | $0.01 / GB-month |
| Class A operations (writes, lists) | $4.50 / million | $9.00 / million |
| Class B operations (reads) | $0.36 / million | $0.90 / million |
| Egress | Free | Free |
Note the inversion in the Infrequent Access column: storage is a third cheaper while operations cost roughly double. That tier only pays off below a certain access frequency, and the break-even is computable from your own read counts rather than a rule of thumb.
Note also that Class A operations cost more than twelve times Class B. A workload that lists buckets frequently or writes many small objects can be dominated by operations rather than by storage or transfer — a third cost axis that neither provider’s headline mentions.
Cloudflare R2 and Amazon S3 both store objects behind API-driven services. R2 supports S3-compatible tooling and advertises no charge for direct data egress, which is the crux of Cloudflare R2 vs Amazon S3. S3 is the established object-storage layer across a large AWS service ecosystem. The cheaper choice depends on traffic, requests, storage class and integration work.
Data transfer is the clearest difference
Cloudflare says direct egress from R2 through its Workers API, S3 API and r2.dev domains does not incur data-transfer charges. R2 still charges for storage and classes of operations, and infrequent-access retrieval can add a processing fee. Connected metered services can also create charges.
AWS says S3 charges according to usage, with pricing varying across storage, requests, retrieval and data transfer. AWS documentation notes strong read-after-write consistency and a range of storage classes, including intelligent tiering and archival options.
API compatibility needs testing
S3 compatibility can reduce migration work, but it should not be assumed to cover every behavior or surrounding service. Test the SDK operations, presigned URLs, multipart uploads, checksums, lifecycle needs, event integrations and access-control patterns used by the application.
Model the workload
- Average and peak stored gigabytes.
- Write, read, list and delete operations.
- Internet, regional and cross-cloud transfer.
- Retrieval frequency and minimum storage duration.
- CDN, compute, logging and support costs.
- Migration engineering and operational training.
For a public media library with heavy downloads, R2’s egress policy can be decisive. For an application deeply integrated with AWS identity, analytics, eventing and archival tiers, S3 may reduce architecture complexity. A multi-cloud design should include the cost of additional monitoring and failure handling. Framed this way, Cloudflare R2 vs Amazon S3 is an arithmetic exercise rather than a preference.
Exit cost and lock-in
The asymmetry worth naming is that egress pricing is also exit pricing. Moving a large dataset off a provider is, by definition, a large egress event, so a metered egress model charges you to leave in proportion to how much you stored.
Three practical consequences:
- Model the migration before you need it. Multiply your total stored volume by the egress rate. For a multi-terabyte dataset that figure can be a meaningful capital cost, and it is worth knowing on the day you choose a provider rather than the day you want to leave.
- S3-compatible does not mean drop-in. Test the specific operations your application uses — presigned URLs, multipart uploads, checksums, conditional requests, lifecycle rules and event notifications. Compatibility usually covers the common path and diverges at the edges.
- Count the surrounding services. A bucket deeply wired into one platform’s identity, eventing, analytics and archival tiers is not really a bucket; it is part of an architecture, and replacing it means replacing the integrations too.
None of that argues for either provider. It argues for making the Cloudflare R2 vs Amazon S3 decision with the migration arithmetic already written down, because the cost of being wrong is proportional to how long you wait to check it.
Sources and methodology
This comparison uses current Cloudflare R2 architecture and pricing documentation plus the Amazon S3 user guide. Prices and included usage change, so the live provider calculators should be used before purchase. R2 rates quoted here were re-verified against Cloudflare’s pricing page in August 2026; AWS publishes region-dependent rates in tables that must be read per region, and this article deliberately does not quote a single S3 egress figure for that reason.
Join the discussion
Add useful context, ask a focused question or share relevant experience. Comments are moderated to protect readers from spam and promotional links.



Leave a thoughtful comment