How to Move Data from Azure Blob Storage to Cloudflare R2
· 3 min read · Updated

Azure Blob Storage charges $0.087 per GB for data leaving its network. If you serve 1 TB of files per month to users or external systems, that is $87/month in egress alone, on top of storage costs.
Cloudflare R2 charges $0 for egress. You pay for storage ($0.015/GB/month) and operations, and downloading data from R2 is free. For applications that serve files to users, APIs, CDNs, or other services, switching to R2 can cut the cloud bill significantly.
Cost is the most common reason. If your Azure Blob account mostly serves static assets, media files, API responses, or backups that get restored often, the egress fees can dwarf the storage costs. On R2 that part of the bill goes away.
The other reason is that R2 is S3-compatible, so any tool or SDK that works with S3 works with R2. Many applications already use the AWS SDK or another S3 client, even on Azure. For those, the migration is mostly moving the data, then changing the endpoint URL and credentials, often with no SDK changes or API rewrites.
Blober supports both Azure Blob Storage and Cloudflare R2 as native providers, and it talks to R2 over the same S3 protocol. The transfer works like any other Blober workflow: connect both accounts, select the files, and run it.
Add Azure Blob as a provider with your connection string. Blober lists your containers and their contents.
Add Cloudflare R2 as a provider. You will need your Account ID along with an S3-compatible Access Key ID and Secret Access Key from the Cloudflare dashboard. A Cloudflare API token is optional. If your account has many buckets, add one and Blober lists them faster.
Set Azure Blob as the source and Cloudflare R2 as the destination. Browse your Azure containers, select the files or containers you want to migrate, and choose the destination bucket in R2.
Blober streams the data from Azure through your computer to R2. If the transfer is interrupted, Blober resumes from where it stopped.
Moving data out of Azure means paying Azure's egress, and there is no way around it. For the initial migration you pay $0.087/GB to get your data from Azure to the computer running Blober, which then uploads it to R2.
For 1 TB, that is about $87 in egress fees, paid once. After the migration, your ongoing egress from R2 is $0.
If you were paying $87/month in Azure egress, the migration pays for itself in the first month.
| Data size | Azure egress cost (one-time) | Monthly savings on R2 |
|---|---|---|
| 500 GB | ~$43 | Depends on egress pattern |
| 1 TB | ~$87 | Up to $87/month |
| 5 TB | ~$435 | Up to $435/month |
| 10 TB | ~$870 | Up to $870/month |
R2 works well for serving files without egress charges. Azure has features that R2 does not:
- Four storage tiers (Hot, Cool, Cold, Archive) for lifecycle cost optimization, where R2 has two classes (Standard and Infrequent Access)
- Geo-redundant replication built into the platform
- Azure Functions and event triggers tied to blob operations
- Enterprise compliance certifications that some industries require
If you need those features, Azure is worth the egress premium. Many teams keep some data on Azure for processing and compliance, and move the served or public data to R2 to save on egress.
Does Cloudflare R2 charge for egress? No. R2 bills storage ($0.015/GB/month) and operations, and downloads are free.
How much does it cost to move 1 TB out of Azure? About $87, at Azure's rate of $0.087 per GB. You pay it once, during the migration.
Do I have to change my application code after moving to R2? Often not much. R2 is S3-compatible, so an app that already uses the AWS SDK or another S3 client usually needs only a new endpoint URL and credentials.
Can I move only part of my Azure data to R2? Yes. Select only the files or containers you want in the workflow. Many teams keep processing and compliance data on Azure and move the files they serve to R2.