Head to head · Storage object · October 2026 research run

Amazon S3 vs Cloudflare R2

Amazon S3 has a score of 79.3 (A) against Cloudflare R2's 78.4 (A). Both do storage object. The largest gap is reliability, 13 points.

Which one, for what

Pick Amazon S3 for

  • reliability (+13)
  • transparency & trust (+5)

Pick Cloudflare R2 for

  • agent ergonomics (+7)
  • payments & pricing (+10)

Score by category

CategoryWeight this runAmazon S3Cloudflare R2Edge
Reliability16%209582Amazon S3 +13
Performance10%pendingpendingpendingnot scored in this run
Schema & documentation13%16.29292even
Agent ergonomics13%16.28390Cloudflare R2 +7
Security & auth14%17.58683Amazon S3 +3
Payments & pricing10%12.52030Cloudflare R2 +10
Task success10%pendingpendingpendingnot scored in this run
Maintenance & community7%8.88387Cloudflare R2 +4
Transparency & trust7%8.88075Amazon S3 +5
Negative events≤1500
Total79.3 · A78.4 · A

Facts side by side

FactAmazon S3Cloudflare R2
KindHTTP APIHTTP API
VendorAmazon Web ServicesCloudflare
Hosted endpointhttps://s3.us-east-1.amazonaws.comhttps://<account-id>.r2.cloudflarestorage.com
TransportsHTTPHTTP, Streamable HTTP
AuthAPI keyAPI key
PricingPay per useFreemium
x402nono
LicenceApache-2.0Apache-2.0 or MIT (wrangler)
Tools exposednonenone
Context cost (tools/list)n/an/a
p95 latencynot measured yetnot measured yet
Availability (30d)not measured yetnot measured yet
Read-only variant documentednono
llms.txtnoyes
MCP registrynot listednot listed
Last release2026-09-302026-09-24
Popularity3.7k stars, 44.8M npm/wk, 578.4M PyPI/wk4.5k stars, 27M npm/wk
Agent reviews3.4/5 (8)3.5/5 (8)

Verdicts

Amazon S3

STS session credentials with session policies, so an agent can hold one prefix for an hour. Egress to the internet is billed per GB after 100 GB a month.

Cloudflare R2

Free egress and a free tier of 10 GB-month plus 1 million writes a month. No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules.

Before you call either

Amazon S3

  1. Hold STS session credentials scoped by a session policy, never a long-lived IAM user key
  2. Sign presigned URLs with credentials that outlive the URL; a URL signed with a one-hour session token dies with the token
  3. Send If-None-Match with * on PutObject so a retry can't overwrite a file another call wrote
  4. Page ListObjectsV2 with MaxKeys and ContinuationToken, and always pass a Prefix
  5. On 503 SlowDown back off and spread keys over more prefixes, since each prefix gets 3,500 writes a second

Cloudflare R2

  1. Set region to auto and the endpoint to https://<account-id>.r2.cloudflarestorage.com. us-east-1 also works, other region names fail
  2. Ask the operator for temporary credentials scoped to your bucket and prefix rather than a long-lived token
  3. For public reads put a custom domain or an r2.dev subdomain on the bucket; presigned URLs only sign the S3 hostname
  4. On 429 TooManyRequests check for concurrent writes to one key; R2 allows one write a second per key
  5. Send If-None-Match with * on PutObject so a retried upload can't overwrite someone else's object

Other comparisons with Amazon S3 or Cloudflare R2

Machine-readable

For companies

Do agents find, use and choose your tools?

An agent-readiness audit runs our probes, task suite and eight reviewer agents against your public and internal tools, and comes back with a scorecard, the transcripts of what failed, and a fix list in priority order. From $2,500, re-run included. We never take payment to move a rank. We do help companies earn one.