Backblaze B2 vs Cloudflare R2

Choose Cloudflare R2 if you serve files to the public internet — egress is free, which is the entire argument. Choose Backblaze B2 if storage volume dominates and traffic is modest, because B2 stores bytes more cheaply and gives free egress through Bandwidth Alliance partners including Cloudflare.

Editorial judgement last reviewed

Is Cloudflare R2 or Backblaze B2 cheaper for object storage?

Both of these exist because AWS charges roughly nine cents per gigabyte to send you your own data, and both attack that from opposite ends.

R2's pitch is zero egress fees, full stop. Not discounted, not capped, not conditional on a partner CDN — you pay to store bytes and to make API calls, and downloads cost nothing. For anything with a public read path — image hosting, video, game assets, package registries, a large model download — this converts a variable, frightening line item into a fixed, boring one.

B2's pitch is cheap storage plus generous free egress. Storage per terabyte is meaningfully below R2's, and egress is free up to a multiple of your stored data, with Bandwidth Alliance partners (Cloudflare among them) waiving it entirely for traffic that goes through them.

The rule of thumb: if your egress-to-storage ratio is high, R2 wins; if you're storing a lot and serving a little, B2 wins. Backups, archives and media libraries with a long tail favour B2. Public asset delivery, an image CDN origin or anything user-facing favours R2.

The tiebreaker is usually the rest of the stack. If you already run Cloudflare, R2 binds directly to Workers with no per-request egress and no extra network hop, and that integration is worth more than the storage rate difference. If you don't, B2 is a plain S3-compatible bucket that behaves the way you expect from anywhere.

Which one should you pick?

Choose Cloudflare R2 if…

  • Your files are served to end users. Egress is free and that dominates every other number on the page.
  • You already use Cloudflare Workers or Pages — R2 bindings remove a network hop and a set of credentials.
  • Your traffic is unpredictable and you need the bill to be predictable. Free egress means a viral moment costs you nothing extra.
  • You're serving large downloads: installers, model weights, datasets, video.
  • You want a CDN in front of your bucket without configuring one, because Cloudflare's network is already the delivery path.
  • You can live with a minimum billable object size and with Class A operations being the meter that actually moves.

Choose Backblaze B2 if…

  • Storage volume is your main cost: backups, archives, media masters, log retention.
  • You want the lowest published price per terabyte stored among mainstream providers.
  • Your egress is modest relative to what you store, or it flows through a Bandwidth Alliance partner and is therefore free.
  • You want object lock and WORM for ransomware protection or compliance retention.
  • You want a vendor whose whole business is storage, with published durability figures and a long operating history.
  • You'd rather use standard S3 tooling against a plain bucket than adopt a platform.

Run the actual numbers, not the headline rate

The only comparison that means anything is total monthly cost for your workload. Our storage hub computes one standard scenario — 1 TB stored, 5 TB egress, 10 million requests per month — in both USD and AUD, precisely because the headline per-gigabyte rates are designed to be incomparable.

At that shape, R2 wins comfortably, because five terabytes of egress is where every traditional provider makes its margin and R2 charges nothing for it. Flip the shape to 50 TB stored and 500 GB egress and B2 wins just as clearly, because you're now paying for storage fifty times over and barely touching the network.

Work out your own ratio before reading any further. Divide monthly egress by stored bytes. Under roughly 1x, storage price dominates and B2 leads. Over roughly 5x, egress dominates and R2 leads. In between, the operations count and your existing stack decide it.

Then check the two costs that don't appear in the headline: Class A operations (writes, lists — the expensive ones on both platforms) and minimum billable object size. If you're storing tens of millions of small files, per-object minimums and per-request charges can quietly exceed your storage line entirely. That is the single most common surprise in this category.

S3 API compatibility: close, but verify the edges

Both implement the S3 API well enough that the AWS SDK, rclone, restic and most tooling work unchanged. Neither is a complete reimplementation of S3, and the gaps are in the same neighbourhoods.

The things to test against your own code, in rough order of how often they bite: multipart upload edge cases with unusual part sizes; conditional requests and ETag semantics, especially for multipart objects where the ETag is not an MD5; versioning behaviour; lifecycle rule expressiveness; event notifications and how you receive them; and per-object ACL semantics, which both simplify relative to S3's baroque model.

R2 additionally has bindings — direct object access from a Worker without an HTTP request or signed URL. That is a genuinely different capability, not an S3 feature, and it is the main reason R2 users stop caring about API parity: the hot path stops going through the S3 API at all.

B2 has both a native API and an S3-compatible one. Use the S3-compatible endpoint unless you have a specific reason not to; the native API's advantages are narrow and the tooling ecosystem assumes S3.

Our compatibility figure comes from running a fixed S3 test suite against each provider rather than from anyone's documentation, so the differences it reports are the ones your code will hit.

Latency, regions and the Australian angle

R2 does not ask you to pick a region in the usual sense; you choose a location hint and Cloudflare places the bucket, then serves reads from its global network. For an Australian audience that is a strong default — the edge is in Sydney, Melbourne, Perth and Brisbane, and first-byte latency reflects that even when the bucket doesn't live nearby.

B2 runs a smaller set of discrete regions and, as of this review, none of them is in Australia. Serving Australian users directly from a US or EU B2 bucket means a Pacific round trip on every uncached request. The standard fix is to put Cloudflare in front — which is free egress under the Bandwidth Alliance and gives you edge caching — but it is a second component to configure and reason about.

If data residency is a hard requirement rather than a latency preference, neither is your answer and you should look at the providers with actual Sydney regions on the storage hub. If it's a latency preference, R2 fronted by its own network is the least-effort path, and B2 behind Cloudflare is the cheapest one at volume.

We cover this properly on the Australian storage page, which filters the same roster to Sydney-region availability and AUD billing.

Durability, retention and the things you only notice during an incident

Both publish eleven-nines durability figures. Treat those as an engineering statement about replication, not a promise you'll never lose data — the overwhelming majority of real data loss is a delete you asked for, a credential that leaked, or a bucket policy someone loosened.

That makes object lock the feature worth checking. B2 supports it, including compliance mode, which is the specific control that survives a compromised root credential and is increasingly a hard requirement in backup and regulated contexts. Verify R2's current object lock support against your requirement rather than assuming parity; this is an area where both platforms have been shipping.

Minimum retention periods matter for workloads that churn. Some providers in this category bill a floor of thirty or ninety days per object no matter how quickly you delete it, which makes them a terrible fit for short-lived data. Check the minimum retention and minimum billable object size fields on the hub before you pick, because a cache of small, short-lived objects can cost several times its apparent price.

Finally: whichever you choose, test your restore path. A backup you have never restored is a hypothesis.

Frequently asked questions

Is R2 really free egress with no catch?

Egress genuinely costs nothing. The meter that runs is operations — Class A (writes, lists) are the expensive ones — plus storage. Workloads with enormous request counts against small objects can still surprise you; workloads that download a lot cannot.

Is B2 egress actually free?

Free up to a multiple of the data you store, and free without limit for traffic served through Bandwidth Alliance partners such as Cloudflare. Direct downloads beyond the allowance are billed, so the practical answer is that B2 plus Cloudflare is free egress and B2 alone is not.

Can I use the AWS SDK with both?

Yes. Point the client at the provider's S3 endpoint, set the region string it expects, and most code works unchanged. Test multipart uploads, conditional requests and ETag handling — those are where the edges are.

Which is better as a CDN origin?

R2, if the CDN is Cloudflare, because there's no egress charge and no third-party hop. With another CDN, B2's cheaper storage plus a Bandwidth Alliance partner can be the better economics — just confirm your CDN is on the partner list before assuming free transfer.

What about AWS S3 itself?

S3 remains the most feature-complete object store and the right answer when you need the surrounding AWS ecosystem or features neither of these implements. It is also several times more expensive once egress is involved, which is exactly why this comparison exists.