Cloud Infrastructureintermediate

Cloudflare R2 vs Backblaze B2

Cloudflare R2 and Backblaze B2 compared for S3-compatible object storage: storage and API prices, egress rules, free tiers, S3 API gaps, versioning and object lock, regions and data residency, event notifications, lifecycle rules and migration tools, as of November 2026.

Quick Answer

Both are S3-compatible object stores sold as cheaper alternatives to Amazon S3, but they price the opposite way. Cloudflare R2 charges $0.015 per GB-month for Standard storage plus per-request fees ($4.50 per million Class A writes and lists, $0.36 per million Class B reads), and egress is free with no cap. Backblaze B2 charges $6.95 per TB per month (about $0.007 per GB), makes Class A, B and C API calls free for pay-as-you-go accounts, and includes free egress up to 3x your average stored data, then $0.01 per GB. Egress to partner CDNs and compute providers such as Cloudflare, Fastly and bunny.net is unlimited and free. Both give the first 10 GB free. R2 is cheaper when you serve a lot of data straight to the internet relative to what you store, and it plugs into Workers, Queues and Cloudflare's CDN. B2 costs about half as much per stored terabyte, supports S3 Object Lock and file versioning that backup tools expect, and is the better home for backups and archives.

Last updated November 7, 2026. Covers R2 pricing, limits and S3 compatibility as documented by Cloudflare in October 2026, and Backblaze B2's $6.95/TB pay-as-you-go pricing, 3x free egress and API pricing from Backblaze's pricing pages, read in November 2026.

Feature comparison of Cloudflare R2 vs Backblaze B2
FeatureCloudflare R2Backblaze B2
Storage Price
$0.015/GB-month Standard; $0.01/GB-month Infrequent Access
$6.95/TB/month (per byte-hour); volume and term discounts on annual capacity
Egress to Internet
Free, no cap, for every storage class
Free up to 3x average monthly storage, then $0.01/GB; unlimited free via partner CDNs/compute
API Request Pricing
Class A $4.50/M, Class B $0.36/M (Standard); $9.00/M and $0.90/M on IA; deletes free
Class A, B, C free on pay-as-you-go; Class D (event notification calls) 2,500/day free then $0.004 per 10,000
Free Tier
10 GB-month storage, 1M Class A, 10M Class B per month (Standard only)
First 10 GB storage always free
Storage Classes
Standard; Infrequent Access (30-day minimum, $0.01/GB retrieval)
One always-hot class (B2 Overdrive is a separate high-throughput product from $15/TB)
Main S3 API Gaps
No ACLs, object tagging, PutBucketVersioning, Object Lock headers, bucket website config or SSE-KMS (SSE-C supported)
No object-level ACLs, IAM roles, object tagging, website configuration or POST browser uploads; SSE-B2 and SSE-C supported
Object Versioning
Not supported through the S3 API (PutBucketVersioning unimplemented)
Yes: every upload of the same name creates a new version; hide/delete via lifecycle rules
Immutability / Object Lock
Bucket lock rules by prefix: retention period or indefinite (R2 API/Wrangler/dashboard, not S3 Object Lock)
S3-compatible Object Lock: governance and compliance modes, legal hold, default bucket retention, 1-3,000 days
Max Object Size
4.995 TiB; single upload up to 4.995 GiB; 10,000 parts
10 TB large files (parts 5 MB-5 GB); 5 GB per standard upload
Buckets per Account
100,000 included, then $0.10 per bucket per month
100 per account (Support can raise)
Regions & Data Residency
Automatic placement; best-effort location hints (wnam, enam, weur, eeur, apac, oc); EU, US and FedRAMP jurisdictions
US West, US East, EU Central or CA East, fixed per account at creation
Public Access / Custom Domain
Custom domain (zone in same Cloudflare account) with Cloudflare cache/WAF; r2.dev for testing only
Public buckets on Backblaze URLs; custom domains via Cloudflare or another CDN
Event Notifications
Cloudflare Queues: object-create / object-delete, up to 100 rules per bucket
Webhooks with optional signing secret; quickstart says to request access from Support
Lifecycle Rules
Expire objects or transition to Infrequent Access; up to 1,000 rules; default 7-day multipart abort
Hide and delete file versions, cancel unfinished large files; up to 100 rules per bucket
Migration Tools
Super Slurper (bulk) and Sippy (on demand), both free apart from R2 Class A ops
Assisted migration; Universal Data Migration add-on with qualifying commitment
Replication
Not covered on the pages we read
Cloud Replication within or between regions (Native API / web console); you pay storage only
Built-in Compute Integration
Workers binding, Queues, Cloudflare cache in front of custom domains
None built in; free egress to partners such as Vultr, CoreWeave, Equinix Metal and phoenixNAP

Cloudflare R2

Cloudflare's S3-compatible object storage with zero egress fees. Buckets are reachable through the S3 API, a Workers binding and public custom domains on Cloudflare's network. Pricing is per GB-month of storage plus per-million Class A and Class B operations, with a Standard and an Infrequent Access storage class.

Pros

  • No egress charges from R2 itself, whether data leaves through the S3 API, a Worker or an r2.dev domain, so read-heavy public workloads have no bandwidth line on the bill
  • Strong global consistency for read-after-write, metadata updates, deletes and listings, per Cloudflare's consistency model
  • Native Workers binding, Queues-based event notifications and Cloudflare cache, WAF and access controls on custom domains
  • Infrequent Access class at $0.01 per GB-month with lifecycle rules that move objects from Standard automatically
  • Free migration tooling: Super Slurper for one-off bulk copies and Sippy for copying objects on first request, paying only R2's own Class A operations
  • 100,000 buckets per account included, which suits per-tenant bucket designs

Cons

  • Per-request pricing adds up for small-object or chatty workloads: $4.50 per million writes or lists and $0.36 per million reads after the free tier
  • Standard storage at $0.015 per GB-month costs roughly twice B2's rate, so capacity-heavy data such as backups costs more
  • S3 API gaps that matter for backup tools: no bucket versioning API, no S3 Object Lock headers, no ACLs or object tagging
  • Custom domains must be a zone in the same Cloudflare account, and r2.dev URLs are rate-limited and not meant for production

Best For

Apps and sites that serve a lot of data to the internet (user uploads, media, downloads, static assets), especially teams already on Cloudflare Workers, where free egress outweighs per-request fees.

Backblaze B2

Backblaze's always-hot object storage with an S3-compatible API and its own Native API. One storage class, billed per byte-hour at $6.95 per TB per month, with free Class A/B/C API calls on pay-as-you-go, free egress up to 3x stored data and unlimited free egress to partner CDNs. B2 Overdrive is a separate high-throughput tier for multi-petabyte buyers.

Pros

  • About half R2's storage price: $6.95 per TB per month, with no minimum file size and no minimum storage duration
  • Class A, B and C API calls are free for pay-as-you-go customers, so chatty and small-object workloads don't pay per request
  • Free egress up to 3x average monthly storage, and unlimited free egress through partners including Cloudflare, Fastly, bunny.net, CacheFly, Vultr and CoreWeave
  • S3 Object Lock with governance and compliance modes, legal hold and default bucket retention (1 to 3,000 days), which Veeam-style backup tools use
  • File versions kept per name with lifecycle rules to hide and delete old versions, plus Cloud Replication within or between regions
  • Fixed regional placement (US West, US East, EU Central, CA East) chosen at sign-up, with the same price in every region

Cons

  • Egress past 3x stored data to non-partner destinations costs $0.01 per GB, which matters for download-heavy sites not behind a partner CDN
  • You can't map a domain straight to a bucket; Backblaze points you to Cloudflare or another CDN for vanity URLs
  • One region per account, fixed at creation; multi-region means separate accounts plus Cloud Replication
  • S3 API gaps: no object-level ACLs, IAM roles, object tagging, bucket website config or browser POST uploads to pre-signed URLs
  • 100 buckets per account by default; event notifications are webhooks that the docs say need Support to enable

Best For

Backups, archives, media libraries and other capacity-heavy data, especially anything that needs S3 Object Lock or versioning, or that is served through a partner CDN such as Cloudflare.

What each one costs at real sizes

R2 Standard costs $0.015 per GB-month, Class A operations (writes, lists, multipart steps) $4.50 per million, and Class B operations (reads, heads) $0.36 per million. The monthly free tier is 10 GB-month, 1 million Class A and 10 million Class B. Deletes are free, and usage is rounded up to the next billing unit. B2 bills $6.95 per TB per 30 days by the byte-hour, with the first 10 GB free and Class A, B and C calls free on pay-as-you-go. Some worked examples using decimal GB, list prices and the US West region for B2. 1 TB stored, 1 TB served, 1 million writes, 10 million reads: R2 is about $14.85 (operations fall inside the free tier) and B2 about $6.88. 10 TB stored with 20 TB served direct to users: R2 about $150 and B2 about $69.50, since 20 TB is inside B2's 30 TB of free egress. 10 TB stored with 50 TB served: R2 still about $150 plus operations, while B2 adds 20 TB of overage at $0.01 per GB, about $200, for roughly $270. Put that B2 bucket behind Cloudflare, a free-egress partner, and it drops back to about $70. On request-heavy workloads, 50 million small writes a month cost about $220 on R2 and nothing on B2.

Egress rules: free with no cap vs free up to 3x

Cloudflare's pricing footnote says egress straight from R2 is free whether it goes through the S3 API, the Workers API or an r2.dev domain. Other metered Cloudflare services in front of the bucket can still bill you. B2's base rule is free egress up to three times your average monthly storage, measured in byte-hours across the billing cycle, then $0.01 per GB. Backblaze also lists partners where egress is unlimited and free: Fastly, Cloudflare, bunny.net, CacheFly, CoreWeave, Equinix Metal, Vultr and phoenixNAP. B2 Overdrive, sold from $15 per TB a month with a multi-petabyte commitment, has unlimited free egress to any destination. For a site served through Cloudflare, both options end up with no bandwidth bill: R2 natively, or B2 through the Cloudflare partnership Backblaze documents. The real split is direct downloads without a CDN, such as API clients, CI runners pulling artifacts, or customers fetching large files from pre-signed URLs. There R2 never charges, and B2 starts charging once monthly downloads pass three times what you store. A 1 TB bucket that serves 5 TB of direct downloads a month pays about $20 in B2 overage, on top of $6.95 of storage.

S3 compatibility, versioning and object lock

Both claim S3 compatibility, and both have gaps. Cloudflare's compatibility table marks PutBucketVersioning, GetBucketVersioning, PutObjectLockConfiguration, bucket ACLs, object tagging and bucket website configuration as unimplemented. On PutObject it rejects x-amz-object-lock-* headers and AWS SSE-KMS headers but accepts SSE-C and the STANDARD and STANDARD_IA storage classes. R2's immutability feature is bucket locks: prefix-based rules with a retention period or indefinite retention, set from the dashboard, Wrangler or the Cloudflare API rather than the S3 Object Lock calls. B2's S3-Compatible API lists PutObjectLockConfiguration, PutObjectRetention and PutObjectLegalHold among its Class A calls. Object Lock supports governance and compliance modes, legal holds and default bucket retention from 1 to 3,000 days, and once enabled on a bucket it can't be disabled. B2 also keeps a version for every upload of the same file name and exposes them through b2_list_file_versions and ListObjectVersions. Backblaze's own gaps are object-level ACLs, IAM roles, object tagging, website configuration and browser POST uploads to pre-signed URLs. In practice, backup software that turns on S3 Object Lock for ransomware protection works against B2 and not against R2's S3 endpoint.

Regions, residency and where the data sits

R2 places a new bucket automatically in the closest available region to the request that created it. Location hints (wnam, enam, weur, eeur, apac, oc) let you steer that, but Cloudflare calls them best effort, not a guarantee, and a hint only counts the first time a bucket name is created. For hard requirements, R2 jurisdictions (eu, us and fedramp) guarantee objects are stored within that jurisdiction, chosen per bucket. Reads are strongly consistent everywhere: a write, metadata change, delete or listing is visible globally as soon as it completes. Only API token permission changes are eventually consistent, taking up to a minute. B2 fixes residency at the account level. At sign-up you choose US West (Sacramento and Phoenix), US East (Reston, Virginia), EU Central (Amsterdam) or CA East (Toronto), and you can't change it later. Prices don't vary by region. Data in a second region means a second account and Cloud Replication, which copies between buckets within or across regions. Backblaze charges only for storing the extra copy, not for the transfer. If one product needs EU-only buckets beside US buckets, R2 handles that in one account. With B2 you manage two accounts.

Events, lifecycle, compute and migration

R2 event notifications publish object-create and object-delete events (including lifecycle deletions) to a Cloudflare Queue, consumed by a Worker or pulled over HTTP from outside Cloudflare. Each bucket allows up to 100 rules, and Cloudflare advises splitting rules across queues past 5,000 messages a second. B2 posts events to a webhook, optionally signed with a secret. Its quickstart says you request access from Support, and outbound notification calls are Class D: 2,500 a day free, then $0.004 per 10,000. Lifecycle rules differ too. R2 can expire objects or move them to Infrequent Access, allows up to 1,000 rules, and aborts unfinished multipart uploads after seven days by default. B2 rules hide and delete file versions and cancel unfinished large files, up to 100 per bucket, with no storage tiers to move between. R2 is the one with built-in compute, through Workers bindings and Cloudflare's cache and WAF on custom domains. For moving data in, R2 has Super Slurper for bulk copies and Sippy, which copies each object from the old provider the first time it's requested. Both are free apart from the Class A operations they cause on R2. Backblaze offers assisted migration and a Universal Data Migration add-on with qualifying commitments.

Verdict

Pick by what you do more of: storing data or serving it. If the bucket backs a public app (user uploads, images, video, downloads, static assets) and monthly egress regularly runs past three times what you store, use Cloudflare R2. Egress is free with no ceiling, the free tier covers 10 million reads a month, and on Workers you get a native binding, Queues events and Cloudflare's cache in front of a custom domain. Watch the request count: millions of tiny writes or list calls are where R2 bills climb. For backups, archives, NAS offsite copies, media libraries and data you write once and read rarely, use Backblaze B2. Storage costs $6.95 per TB against R2's $15, API calls are free on pay-as-you-go, and its S3 Object Lock and file versioning work with backup tools that expect them. R2's bucket locks aren't exposed through the S3 Object Lock API. If you want B2's storage price and R2-style free delivery together, put B2 behind Cloudflare's CDN: Backblaze documents the setup, and egress to Cloudflare is free. If you need EU or FedRAMP data residency on a per-bucket basis, R2's jurisdictions are more flexible. B2 fixes the region per account.

All Comparisons

Cloudflare R2 vs Backblaze B2 — FAQ

Common questions answered from the comparison above

Is Cloudflare R2 egress really free?

Yes, from R2 itself. Cloudflare says egress through the S3 API, Workers API and r2.dev domains incurs no data transfer charge, for both storage classes. You still pay for storage and operations, and other metered Cloudflare services you put in front of a bucket can bill separately.

How does Backblaze B2's 3x free egress work?

Each month you can download up to three times your average stored data for free, with the average calculated in byte-hours over the billing cycle. Beyond that, egress costs $0.01 per GB. Downloads to partner CDNs and compute providers such as Cloudflare, Fastly and bunny.net don't count and are unlimited.

Which is cheaper for backups, R2 or B2?

Usually B2. Storage is $6.95 per TB against about $15 per TB on R2 Standard, API calls are free on pay-as-you-go, and restores rarely exceed 3x your stored data. B2 also supports S3 Object Lock, which many backup tools use for immutable backups. R2 doesn't support it through the S3 API.

Can I use Backblaze B2 with Cloudflare's CDN?

Yes. Backblaze documents serving public B2 buckets through Cloudflare, with no download fees from Backblaze thanks to the partnership. It's also the route Backblaze suggests for custom domains, because you can't map a domain directly to a B2 bucket.

Does Cloudflare R2 support object versioning or Object Lock?

Not through the S3 API. Cloudflare's compatibility table lists PutBucketVersioning and PutObjectLockConfiguration as unimplemented, and Object Lock headers on PutObject aren't supported. R2 has its own bucket lock rules instead, which set retention periods or indefinite locks by prefix through the dashboard, Wrangler or the Cloudflare API.

What do R2 and B2 give you for free?

R2's free tier covers 10 GB-month of Standard storage, 1 million Class A operations and 10 million Class B operations a month, with free egress. B2 gives the first 10 GB of storage free, plus free Class A, B and C calls on pay-as-you-go and free egress up to 3x stored data.

Get the next comparison by email

One email a week: new and trending developer tools, fresh comparisons, and what shipped. Unsubscribe in one click.