Cloudflare R2 alternatives: where to go, and how to get your data out

Eight S3-compatible storage services compared, three cost scenarios worked out, and an eight-step exit plan.

The short answer: go with Backblaze B2 or Hetzner Object Storage if your R2 bill comes from operations, since neither charges for API calls. Pick IDrive e2 or B2 for backups you rarely read, at $6 and $6.95 per TB per month versus $15 on R2. Choose Hetzner or OVHcloud if your data has to sit with a European provider, and Bunny Storage plus its CDN if you serve files to a big audience. Only move to AWS S3 if you need versioning or Object Lock and can live with paid egress. One thing before you start: Super Slurper, Cloudflare's migration tool, only moves data into R2. To get out, you use rclone. We compared all eight destinations against their official 2026 pricing.

Romain CochardCEO of Hack'celeration
Updated 20268destinations compared8migration steps2026prices checked

The ranking is editorial: a sponsored spot is always labeled on its card, and no affiliate link changes a score.

The real reasons

Why teams leave R2, free egress and all

R2 charges $0.015 per GB-month for Standard storage and never bills outbound bandwidth. For a site that serves lots of files, that's often unbeatable. People leave for other workloads: an app that writes constantly, archives nobody reads, or a team that needs specific S3 features. Here are the six reasons that keep coming up, each with the numbers.

Class A operations run up the bill

R2 splits requests into two classes. Class A covers anything that changes state: writing an object, creating a bucket, and also listing a bucket. It costs $4.50 per million requests on Standard. Class B (reading an object) costs $0.36 per million. The monthly free tier covers 1 million Class A and 10 million Class B operations. So an app writing 50 million objects a month pays (50 − 1) × $4.50 = $220.50 in writes alone. Backup tools that chunk files into small blocks, thumbnail generators and anything that lists a bucket every minute all fall into this trap. In Cloudflare community threads, one user reports a Class A line above $10 while believing they never left the free tier; others run a kill-switch Worker that checks their Class A and Class B counts every ten minutes and cuts traffic before the bill does.

Twice the price for cold data

At $15 per TB per month, R2 costs about double Backblaze B2 ($6.95), IDrive e2 ($6), Wasabi ($7.99) or Hetzner (€6.49 with 1 TB of egress included). For backups or archives you almost never read, free egress buys you nothing, and you pay twice for a perk you don't use. R2's Infrequent Access class drops to $10 per TB, but it has a 30-day minimum per object, a $0.01 per GB retrieval fee, and no free tier.

Missing S3 features

R2 speaks the S3 API, but not all of it. R2 has its own bucket locks, which block deleting or overwriting objects for a set period or indefinitely. But Cloudflare's docs list these as unimplemented in its S3 API: versioning, the S3 Object Lock API (the one backup tools call to set immutable copies against ransomware), ACLs and bucket policies, replication, object tagging, static website hosting, SSE-KMS encryption and S3 event notifications. If your backup tool requires S3 Object Lock, or your security audit asks for a bucket policy or versioning, it won't work with R2.

Everything with one vendor

Plenty of teams run DNS, CDN, Workers and storage on the same Cloudflare account. When R2 goes down, everything that depends on it goes with it. In 2025, a human error while blocking a phishing site took R2 offline for 59 minutes, and every operation failed. No data was lost, but an hour without files is enough to break a site or an app. Splitting storage from the rest of your setup cuts that dependency.

Limits you find in production

The public r2.dev URL is rate limited, and Cloudflare says it isn't meant for production: you need your own custom domain. R2 accepts one write per second to the same object key, and returns a 429 error beyond that. Single-part uploads cap at 5 GiB, so anything bigger needs multipart. None of this is a dealbreaker, but each one has forced teams to rework their code.

Data residency with a European provider

R2 offers an "eu" jurisdiction that guarantees objects stay in the EU. Without it, location hints are best effort, not a guarantee. Either way, the vendor is a US company. If a client, a privacy officer or a public tender asks for a European host, Hetzner (Germany and Finland), OVHcloud (France) or Bunny (Slovenia) answer that question better.

The 8 alternatives

Cloudflare R2 alternatives, one by one

For each service: why move there, who it's for, its catch, how to migrate from R2, and what it costs. All of them speak the S3 API unless noted, which means rclone can copy to them. Prices are what each vendor lists in 2026, before tax: in dollars for US vendors, in euros for Hetzner and OVHcloud, which bill in euros.

01

Backblaze B2: the drop-in replacement with free API calls

Best default pick

Why move to B2. Backblaze charges $6.95 per TB per month, less than half of R2. More important, Class A, B and C transactions are free: writing, listing and reading cost nothing. Only Class D (a handful of management calls) is billed, at $0.004 per 10,000, with 2,500 free per day. For a write-heavy app, the operations line on your bill disappears.

Who it's for. Teams storing several TB of backups, exports or media, and teams whose R2 bill comes from writes.

Who it's not for. A site that serves ten times what it stores each month: free egress stops at three times your average storage, then costs $0.01 per GB.

The catch. Egress isn't unlimited, and performance depends on the workload. One self-hoster found B2 far too slow as Nextcloud external storage. The Overdrive plan ($15 per TB with unlimited egress) targets very large volumes, not a small team.

How to migrate. Create a bucket and an application key, then add B2 as a second S3 remote in rclone. B2 has no minimum storage duration, so you can trial one folder and delete it with no penalty. The first 10 GB are free.

Price. $6.95 per TB per month, 10 GB free, free egress up to 3x your storage, then $0.01 per GB.

Storage
$6.95/TB/month
Operations
Class A, B, C free
Best for
backups, apps
Catch
free egress up to 3x storage
See Backblaze B2 pricing →
02

Hetzner Object Storage: the cheapest in Europe

European pick

Why move to Hetzner. For €6.49 a month before VAT, you get 1 TB stored and 1 TB of egress. Past that, storage runs about €6.49 per TB and egress €1 per TB. Ingress and API requests are free. Your data stays in Falkenstein or Nuremberg (Germany) or Helsinki (Finland), with a German host.

Who it's for. Teams that want a low, readable price and data in Europe, serving reasonable volumes. With 1 TB stored and 10 TB of egress, the bill lands around €15.49. If you already run Hetzner servers, our Hetzner alternatives guide covers the rest of the platform.

Who it's not for. Apps storing millions of tiny files: every object under 64 KB is billed as 64 KB. And very large projects: a bucket caps at 100 TB and 50 million objects, with 100 buckets per account.

The catch. Account approval has a reputation for being strict, and status notes have warned that high Object Storage traffic may lead to timeouts. Billing starts as soon as a bucket exists, even an empty one.

How to migrate. Create the bucket in the region closest to your users, generate S3 keys in the console, and use rclone's generic S3 remote. Bundle small files first if you can.

Price. €6.49 a month before VAT with 1 TB stored and 1 TB egress; then about €6.49 per TB stored and €1 per TB of egress.

Base
€6.49/month, 1 TB + 1 TB egress
API
free
Best for
EU data residency
Catch
objects under 64 KB billed as 64 KB
See Hetzner Object Storage →
03

IDrive e2: the cheapest TB for backups

Cheapest per TB

Why move to IDrive e2. It has the lowest per-TB price on this list: $6 a month. API calls aren't charged, and egress is free up to three times what you store. Paid yearly, 1 TB costs $59.50 a year, and the first year is often on sale at half price.

Who it's for. Server, NAS and workstation backups, plus multi-TB archives you keep for a long time. 5 TB comes to $30 a month, versus $75 on R2.

Who it's not for. Small volumes: the minimum charge is 1 TB, so 50 GB costs the same as 1 TB.

The catch. Past three times your storage, egress costs $0.01 per GB. A site serving 10 TB a month from 1 TB stored would pay $6 + $70 = $76.

How to migrate. Start the 10 GB free trial to validate your rclone setup on one folder, then run the full copy. rclone's generic S3 remote works with the endpoint of your region.

Price. $6 per TB per month (1 TB minimum), or $59.50 a year for 1 TB; free egress up to 3x your storage.

Storage
$6/TB/month
Minimum
1 TB billed
Best for
backups, archives
Catch
overpriced under 1 TB
See IDrive e2 pricing →
04

Wasabi: flat pricing, if you store more than you serve

Most predictable bill

Why move to Wasabi. Wasabi charges $7.99 per TB per month with no egress or API fees as long as your monthly downloads don't exceed what you store. Your bill is one line: storage.

Who it's for. Backups and archives over 1 TB, kept longer than three months and rarely read. 5 TB comes to $39.95 a month.

Who it's not for. A busy public site: if egress exceeds storage, Wasabi may throttle your service. And small projects: the minimum charge is 1 TB. One developer ended up paying about $8 a month to store 10 GB.

The catch. Every object is billed for at least 90 days. A file deleted after a week still costs three months, so it's a poor fit for temp files.

How to migrate. rclone has a ready-made Wasabi profile. Before copying, check that your lifecycle rules don't delete anything before 90 days, or you'll pay for ghost storage.

Price. $7.99 per TB per month, 1 TB minimum, 90-day minimum per object; egress and API free within your stored volume.

Storage
$7.99/TB/month
Egress
free up to stored volume
Best for
archives over 1 TB
Catch
90-day minimum per object
See Wasabi pricing →
05

OVHcloud Object Storage: free egress, hosted in France

French pick

Why move to OVHcloud. On one key point it's the closest thing to R2: OVHcloud markets its S3-compatible Object Storage with no egress fees. Standard storage in a single zone runs about €0.0071 per GB-month, roughly €7 per TB. The three-zone version costs about €0.014 per GB, close to R2's price, with better resilience.

Who it's for. Companies that want a French host, and sites serving lots of files without paying for egress. 1 TB stored and 10 TB served comes to about €7.10 a month.

Who it's not for. Teams that want a dead-simple console and a five-minute setup: the service lives inside OVHcloud's Public Cloud, with its own projects and vocabulary.

The catch. Pricing is spread across several classes and zones, and the gap between them is two to one, so read carefully. The single-zone option doesn't survive a data center outage.

How to migrate. OVHcloud publishes an official guide for migrating S3 data to its Object Storage with rclone. Create a Public Cloud project, an S3 user and a bucket, then follow the guide with your R2 remote as the source.

Price. About €0.0071 per GB-month in one zone, about €0.014 across three zones; no egress fees advertised.

Storage
≈ €7/TB/month (1 zone)
Egress
advertised as free
Best for
hosting in France
Catch
complex price grid
See OVHcloud Object Storage →
06

Bunny Storage: built to serve files through a CDN

Best for delivery

Why move to Bunny. If you use R2 to serve images, video or downloads behind a CDN, Bunny gives you both pieces from a European (Slovenian) company. Standard storage costs $0.01 per GB per region, traffic from storage to Bunny CDN is free, and there are no API fees. CDN delivery costs $0.01 per GB in Europe and North America.

Who it's for. Media sites, image-heavy stores and video course platforms that want one vendor to store and deliver. Our CDN comparison puts Bunny next to the other networks.

Who it's not for. Heavy delivery volumes: 1 TB stored and 10 TB delivered in Europe cost about $10 + $100 = $110 a month, while R2 stays at $15. Bunny wins on having one vendor for storage and delivery, not on this case.

The catch. The pricing page doesn't present Bunny Storage as S3-compatible, so check the access method before planning your migration. Replication costs extra: $0.02 per GB for two regions, $0.025 for three. Edge SSD storage runs $0.02 per GB per region.

How to migrate. Create a storage zone, connect it to a CDN pull zone, copy your files, then point your subdomain at the CDN. A 14-day trial with no credit card lets you test the path.

Price. $0.01 per GB per month for one region, $1 monthly minimum; CDN at $0.01 per GB in Europe and North America.

Storage
$0.01/GB per region
To the CDN
free traffic
Best for
media served to a big audience
Catch
delivery billed per GB
See Bunny Storage pricing →
07

Tigris: free egress, designed for many regions

Closest to R2

Why move to Tigris. Tigris follows R2's model (free egress, billed operations) without depending on Cloudflare. It adds what R2 lacks for cold data: an archive tier at $0.004 per GB-month, on top of Standard at $0.02 and Infrequent Access at $0.01. It's designed to serve data across regions worldwide.

Who it's for. Apps serving lots of files to users on several continents that want to keep egress free. 1 TB stored and 10 TB served cost $20.

Who it's not for. Write-heavy apps: Class A costs $5 per million, a bit more than R2. 50 million writes a month come to about $250. One developer left Tigris for exactly that reason: per-request charges.

The catch. Standard storage costs $20 per TB, more than R2. The free tier is small: 5 GB, 10,000 Class A and 100,000 Class B requests. Archive has a 90-day minimum, Infrequent Access 30 days.

How to migrate. Tigris speaks S3, so one rclone remote is enough. For archives, copy straight into the archive tier rather than moving objects later.

Price. Standard $0.02 per GB-month, archive $0.004; Class A $5 per million, Class B $0.50 per million; free egress.

Storage
$0.02/GB/month
Egress
free
Best for
multi-region delivery
Catch
writes at $5/million
See Tigris pricing →
08

AWS S3: every S3 feature, and paid egress

Most complete

Why move to S3. S3 is the original: versioning, Object Lock, bucket policies, replication, tags, notifications, archive classes. Everything R2 doesn't do exists here. If you already live in AWS (EC2, Lambda, RDS), keeping storage next to your compute simplifies things.

Who it's for. Teams facing a security audit, teams that need immutable backup copies, and teams already on AWS.

Who it's not for. A site that serves lots of files. In the Paris region (eu-west-3), data transfer out to the internet costs $0.09 per GB for the first 10 TB, after 100 GB free per month. 1 TB stored and 10 TB served cost about $915 a month, versus $15 on R2. If you're weighing the move the other way, see our AWS alternatives guide.

The catch. An S3 bill has many lines: storage, requests, egress, cross-region transfer. It's the hardest bill on this page to predict.

How to migrate. rclone copies from R2 to S3 like any other target. Ingress into S3 is free; just budget for write requests, $0.0053 per 1,000 in Paris.

Price. Paris region: $0.024 per GB-month (first 50 TB), writes $0.0053 per 1,000, reads $0.0042 per 10,000, egress $0.09 per GB.

Storage
$0.024/GB/month (Paris)
Egress
$0.09/GB
Best for
versioning, Object Lock, AWS
Catch
hard-to-predict bill
See AWS S3 pricing →
Side by side

The 8 alternatives at a glance

Three scenarios, worked out from official prices, before tax and excluding requests unless noted. A 5 TB archive you rarely read: $75 a month on R2 ($50 on Infrequent Access, plus $0.01 per GB read), $30 on IDrive e2, $34.75 on B2, about €32 on Hetzner, about €36 on OVHcloud (one zone), $39.95 on Wasabi, $100 on Tigris ($20 on its archive tier, 90-day minimum), about $120 on S3 in Paris. A site with 1 TB stored and 10 TB served per month: $15 on R2, about €7.10 on OVHcloud, €15.49 on Hetzner, $20 on Tigris, $76 on IDrive e2, $76.95 on B2, $110 on Bunny with its CDN, about $915 on S3; Wasabi falls outside its egress policy. An app writing 50 million objects a month: $220.50 in writes on R2, about $250 on Tigris, $0 on B2, Wasabi, IDrive e2 and Hetzner.

Storage and egressOperations and catches
Cloudflare R2Where you start$15/TB/month; free egressWrites $4.50/million, reads $0.36/million; no versioning or S3 Object Lock API (R2 has its own bucket locks)
Backblaze B2Default pick$6.95/TB/month; free egress up to 3x storageClass A, B, C free; no minimum duration
HetznerEurope€6.49/month with 1 TB + 1 TB egress; then €1/TB egressFree API; objects under 64 KB billed as 64 KB; 100 TB per bucket
IDrive e2Backups$6/TB/month; free egress up to 3x storageFree API; 1 TB minimum
WasabiArchives$7.99/TB/month; free egress up to stored volumeFree API; 1 TB minimum, 90 days per object
OVHcloudFrance≈ €7/TB/month (1 zone), ≈ €14 (3 zones); no egress fees advertisedOfficial rclone migration guide; read the price grid closely
Bunny StorageDelivery$10/TB per region; CDN $0.01/GB (Europe, North America)No API fees; check S3 compatibility
TigrisFree egress$20/TB/month (archive $4); free egressWrites $5/million, reads $0.50/million
AWS S3 (Paris)Full features$24/TB/month; egress $0.09/GBWrites $5.30/million; versioning, Object Lock, policies

Starting prices before tax, subject to change. 1 TB counted as 1,000 GB for vendors that bill per TB. Always rerun the math with your real storage and egress.

Migration plan

Get out of R2 with rclone in eight steps

Super Slurper, Cloudflare's migration tool, only copies into R2; Cloudflare's docs point to rclone for everything else. The good news: R2 egress is free, so the copy itself costs almost nothing. The order of these steps protects your files, your site and your bill.

01

Inventory everything that depends on R2

Day 1

List every bucket with its size and object count. Note which ones are public, and through what URL: your own domain or an r2.dev address. Find the Workers that read or write R2 through a binding, plus your lifecycle rules and CORS settings (the rules that let another site load your files).

Search your code and database for "r2.dev" too. A hard-coded URL in an email template or an old blog post will break the day you delete the bucket.

Time
an hour to a day
If rushed
broken links
02

Open the target account and check its minimums

Day 1

Create the bucket and an S3 key pair at your destination. Before copying, review what gets billed from day one: a 1 TB minimum on Wasabi and IDrive e2, 90 days per object on Wasabi, and billing as soon as a bucket exists on Hetzner.

Pick the region closest to your users, or to your servers if it's an app reading its own files.

Time
30 minutes
Watch for
1 TB minimum
03

Set up two rclone remotes

Day 1

In rclone, create an S3 remote with provider "Cloudflare", region "auto" and the endpoint https://ACCOUNT_ID.r2.cloudflarestorage.com, where ACCOUNT_ID is your Cloudflare account ID. Use keys from a read-only R2 API token: you don't need write access to leave.

Then create the destination remote. rclone ships presets for several providers; otherwise the generic S3 profile with the vendor's endpoint works.

Time
20 minutes
Tip
read-only R2 token
04

Copy, never sync at first

Days 2 to 5

Run rclone copy with --dry-run first to see what would move, without sending anything. Then run the real copy with --checksum. Don't use sync yet: get the direction wrong and it deletes files.

For big volumes, go folder by folder with moderate concurrency. Users who moved roughly 250 TB out of R2 did exactly that to avoid being throttled. Don't trust the ETags of multipart uploads: they aren't a checksum of the whole file.

Time
depends on volume
Command
rclone copy --checksum
05

Estimate what the copy costs

Before copying

R2 egress is free, but each copied object is a Class B read and each list page a Class A operation. Past the monthly free tier (10 million reads, 1 million Class A), reads cost $0.36 per million. A bucket with 20 million objects costs about (20 − 10) × $0.36 = $3.60 in reads. Not a big deal, but worth knowing.

On the destination side, ingress is free with every vendor on this page; only S3 and Tigris bill the writes.

R2 reads
$0.36/million
R2 egress
free
06

Switch your application

Week 1

If your code talks S3, switching storage means changing four settings: endpoint, access key, secret and bucket name. Test in staging, then deploy.

If you use Workers with an R2 binding, it takes longer: bindings only exist on Cloudflare. You'll rewrite those calls as signed S3 requests to the new destination, or keep a Worker as a proxy.

Time
an hour to a few days
Watch for
Worker R2 bindings
07

Switch the public domain

Week 1

Point your files subdomain (say, cdn.yourdomain.com) at the new destination or its CDN: Bunny CDN for Bunny Storage, or any CDN in front of B2, Hetzner or OVHcloud. Nothing stops you from keeping Cloudflare as the CDN in front of another storage provider.

Recreate your CORS rules at the destination before the switch, or fonts and images loaded from another domain will stop showing.

Time
an hour
Watch for
missing CORS rules
08

Catch up, verify, and only then delete

Weeks 2 and 3

Run rclone copy again to pick up files created during the switch, then rclone check to compare both sides. Watch your error logs for one to two weeks: a missing file points to a forgotten URL.

Only then empty and delete the R2 buckets. As long as they exist, storage above the 10 GB free tier keeps billing.

Time
one to two weeks
Command
rclone check

Is your tool missing from this page? Email us: hello@hackceleration.com

Migration pitfalls

What breaks an R2 migration

Storage migrations rarely fail during the copy. They fail afterward, on a forgotten detail: a URL, a Worker, a billing rule at the destination. These are the six that come up most.

Deleting R2 before verifying

A clean rclone check is the only proof everything arrived. Keep your R2 buckets for two weeks after the switch: the cost is small, and it's your only copy if a folder is missing.

Forgetting r2.dev URLs

r2.dev URLs don't redirect. If they're baked into sent emails or old posts, those links will break. Find them everywhere and swap in your own domain before deleting the bucket.

Forgetting Workers

A Worker writing to R2 through its binding keeps writing to the old bucket. You think you've migrated, but new files are still landing on Cloudflare.

Picking Wasabi for a busy site

Wasabi's free egress stops at your stored volume. A site serving ten times what it stores falls outside the policy and risks throttling. For that case, look at OVHcloud, Tigris or a CDN.

Paying for 1 TB to store 10 GB

Wasabi and IDrive e2 bill a 1 TB minimum. For a small project, R2 (10 GB free) or B2 (10 GB free, no minimum duration) stay cheaper.

Comparing dollars to euros

Hetzner and OVHcloud list euro prices before VAT, US vendors list dollars. Convert at today's rate, and add VAT where it applies to you.

  • Inventory of buckets, sizes, object counts and public URLs
  • Search for r2.dev URLs in code and database
  • List of Workers bound to R2, lifecycle rules and CORS rules
  • Destination minimums checked (1 TB, 90 days, billed buckets)
  • R2 remote on a read-only token, target remote checked on one folder
  • rclone copy --dry-run, then the copy with --checksum
  • App switched: endpoint, keys, bucket name
  • Public domain and CORS rules switched
  • rclone check clean after the catch-up copy
  • R2 buckets emptied and deleted after two error-free weeks
FAQ · 8 questions

Cloudflare R2 alternatives: FAQ

  • Is Cloudflare R2 really free?

    Up to a point. Each month R2 gives you 10 GB of storage, 1 million Class A and 10 million Class B operations, on Standard storage only: Infrequent Access has no free tier. Egress is free with no cap. Past that, you pay $0.015 per GB stored.

  • Why is my R2 bill high when egress is free?

    Almost always Class A operations. Listing a bucket counts as a write, at $4.50 per million. A backup tool that lists your bucket on every run, or chunks files into thousands of small blocks, burns through the free million in days. Check the Class A line in your R2 dashboard before shopping around.

  • Is R2 cheaper than S3?

    For a site serving files, yes, by a wide margin. Storage is close ($0.015 versus $0.024 per GB in AWS's Paris region), but S3 bills egress at $0.09 per GB and R2 bills nothing. For archives nobody reads, egress hardly matters and the gap comes down to storage alone.

  • What's the cheapest S3-compatible storage?

    Per TB, IDrive e2 at $6 a month, then Hetzner at €6.49 with 1 TB of egress included, and Backblaze B2 at $6.95. Below 1 TB, IDrive e2 and Wasabi stop being cheap because of their 1 TB minimum; B2 and R2 both give you 10 GB free.

  • How do I migrate from R2 to Backblaze B2?

    With rclone: one remote for R2 (provider Cloudflare, region auto), one for B2, then rclone copy --checksum and rclone check. B2 doesn't bill writes, so the copy costs nothing on its side. Our Backblaze alternatives guide covers the reverse question.

  • Does R2 support versioning or Object Lock?

    Partly. R2 has no versioning, and its S3 API doesn't support Object Lock, so a backup tool that sets locks through that API will fail. R2 does have its own bucket locks, though: a rule on the bucket blocks deleting or overwriting objects for a set period, or indefinitely. That protects an archive, but you set the lock in Cloudflare, not from your backup tool.

  • Is there a European alternative to R2?

    Yes: Hetzner (Germany, Finland), OVHcloud (France), Bunny (Slovenia), and Scaleway, another French host with S3-compatible storage. R2 does offer an "eu" jurisdiction that guarantees storage in the EU, but the vendor stays a US company.

  • Can I keep Cloudflare as a CDN in front of another store?

    Yes. You can leave R2 without leaving Cloudflare: your subdomain stays behind Cloudflare's CDN and points to B2, Hetzner or OVHcloud. You keep caching and protection and only change where the files live. To leave Cloudflare entirely, see our Cloudflare alternatives guide.

Hack'celeration Labs

Get the next migration guide in your inbox

One tool to leave, one destination, one migration plan. Nothing else.

No spam. Unsubscribe in one click.