Amazon S3 vs Cloudflare R2 vs Backblaze B2: Storage Costs Compared
Founder and Tech Writer, CodeNexon
Key Takeaways
- ▪Cloudflare R2: $0.015 per GB-month with free egress.
- ▪Backblaze B2: $6.95 per TB-month, with free egress up to 3 times stored data.
- ▪Amazon S3 Standard: about $0.023 per GB-month, with downloads about $0.09 per GB after 100 GB.
- ▪For backups B2 is cheapest. For frequently downloaded files R2 usually wins.
In this guide
For storing files and serving them to the public, Cloudflare R2 is usually the cheapest of the three because it charges nothing for data downloaded from it, while storage costs $0.015 per GB a month. Backblaze B2 has the lowest storage price at $6.95 per TB a month and includes free downloads up to three times the amount you store, which makes it ideal for backups. Amazon S3 costs the most for storage and downloads but connects directly to the rest of AWS. For a site serving 1 TB of downloads a month from 100 GB of files, that works out to about $1.35 on R2, about $7.87 on B2 and about $85 on S3.
This guide explains how object storage pricing works, compares the three on the same workloads, and helps you pick one.
What object storage is
Object storage holds files, called objects, in containers called buckets. Each object has a key, which works like a file path, and you reach it over the internet with an API or a URL. It is different from the disk on a web server:
| Server disk | Object storage | |
|---|---|---|
| Size | Fixed. You resize the server to get more | Effectively unlimited |
| Pricing | Included in the server price | Per GB stored, per request, and sometimes per GB downloaded |
| Access | Only from that server | From anywhere, over HTTPS |
| Durability | One disk or array | Copies spread across devices and facilities |
| Best for | The running application | Backups, uploads, images, video, downloads, archives |
Typical small business uses include website backups, user uploads, product images, video and podcast files, and large downloads such as PDFs or software installers.
All three services here speak the S3 API, the interface Amazon created that most tools now support. A backup plugin, a command-line tool or an app library that works with S3 will usually work with R2 and B2 by changing the endpoint address and keys.
The four parts of an object storage bill
| Charge | What it is | Why it matters |
|---|---|---|
| Storage | Monthly cost per GB kept | Grows steadily with your data |
| Egress | Cost per GB downloaded out of the service | Can dwarf storage for files people download often |
| Requests | Cost per thousand or million API calls | Matters with many small files |
| Minimum terms | Minimum storage duration or file size | Can make short-lived files more expensive |
Egress is the line that surprises people. Storing 100 GB is cheap almost everywhere. Serving those files to visitors, thousands of times a month, is where costs differ by a factor of fifty or more.
Prices side by side
| Cloudflare R2 Standard | Backblaze B2 | Amazon S3 Standard, US East | |
|---|---|---|---|
| Storage | $0.015 per GB-month | $6.95 per TB-month, about $0.007 per GB | About $0.023 per GB-month, first 50 TB |
| Free storage | 10 GB-month | First 10 GB | Not part of the ongoing price |
| Egress to the internet | Free | Free up to 3 times your average stored data, then $0.01 per GB | First 100 GB a month free across AWS, then about $0.09 per GB |
| Write-type requests | $4.50 per million (Class A) | Free (Classes A, B and C) | Charged per 1,000 requests |
| Read-type requests | $0.36 per million (Class B) | Free (Classes A, B and C) | $0.0004 per 1,000 GET requests |
| Free requests | 1 million Class A and 10 million Class B a month | First 2,500 Class D calls a day | None ongoing |
| Minimum storage duration | None on Standard. 30 days on Infrequent Access | None | None on Standard |
R2 also has an Infrequent Access class at $0.01 per GB-month, with higher request prices, a retrieval charge of $0.01 per GB and a 30-day minimum storage duration. It suits data you rarely read, such as older backups.
On B2, the more expensive Class D calls cost $0.004 per 10,000, with 2,500 free a day. Most backup and file-serving tools use the free classes.
The same workloads on all three
These totals use the prices above. They assume Standard storage, a 30-day month and requests within the free allowances unless stated.
Workload 1: Website backups
You store 200 GB of nightly backups and rarely download them.
| Service | Storage | Egress | Monthly total |
|---|---|---|---|
| Cloudflare R2 | 190 GB billable at $0.015 = $2.85 | $0 | About $2.85 |
| Backblaze B2 | 190 GB at about $0.00695 = $1.32 | $0 | About $1.32 |
| Amazon S3 | 200 GB at $0.023 = $4.60 | $0 | About $4.60 |
For backups, B2's low storage price wins. A restore of the full 200 GB would also be free on B2, since it is within three times your stored data. On S3, the first 100 GB of a restore would be free and the next 100 GB would cost about $9.
Where backups are concerned, keep at least one copy in storage your web host cannot touch. How to Back Up a WordPress Site covers the full approach.
Workload 2: Serving downloads
You store 100 GB of files and visitors download 1 TB a month.
| Service | Storage | Egress | Monthly total |
|---|---|---|---|
| Cloudflare R2 | 90 GB at $0.015 = $1.35 | $0 | About $1.35 |
| Backblaze B2 | 90 GB at about $0.00695 = $0.63 | Free allowance is 3 x 100 GB = 300 GB. The other 724 GB at $0.01 = $7.24 | About $7.87 |
| Amazon S3 | 100 GB at $0.023 = $2.30 | 924 GB beyond the free 100 GB at about $0.09 = $83.16 | About $85.46 |
Request charges would add a little on each service with many small files. Here R2's free egress makes a large difference. S3's bill is almost entirely downloads.
Note the B2 line. Once downloads exceed three times your stored data, B2 charges $0.01 per GB, which is still far below S3. Backblaze also notes that many CDN and compute partners waive the overage, so serving B2 files through a partner CDN can keep egress free.
Workload 3: Many small image files
You store 20 GB across 2 million product images, upload 50,000 a month and serve 30 million image requests a month, totalling 300 GB of downloads.
| Service | Storage | Egress | Requests | Monthly total |
|---|---|---|---|---|
| Cloudflare R2 | 10 GB billable = $0.15 | $0 | 30 million reads: 20 million beyond the free 10 million at $0.36 per million = $7.20. Writes within the free million | About $7.35 |
| Backblaze B2 | 10 GB billable = $0.07 | Free allowance 60 GB. 240 GB at $0.01 = $2.40 | Free for these classes | About $2.47 |
| Amazon S3 | 20 GB = $0.46 | 200 GB beyond free 100 GB at $0.09 = $18 | 30 million GETs at $0.0004 per 1,000 = $12, plus upload requests | About $30 or more |
In practice, you would put a CDN in front of images, so most requests never reach the storage service at all. What Is a CDN? explains how caching cuts request and egress charges.
Choosing between them
Choose Cloudflare R2 if
- People download your files often, and egress would be your largest cost.
- You already use Cloudflare for DNS or as a CDN.
- You want predictable bills where download spikes do not change the price.
The trade-off is a higher storage price than B2, and charges per million operations once you pass the free allowance.
Choose Backblaze B2 if
- You store a lot and download little, such as backups and archives.
- You want the lowest storage price and no request charges for common operations.
- You serve files through a CDN partner that waives B2 egress.
The trade-off is that downloads beyond three times your stored data are charged, and B2 is a single-purpose service without the wider platform of AWS or Cloudflare.
Choose Amazon S3 if
- Your application already runs on AWS and uses other AWS services.
- You need specific S3 features, storage classes or compliance tools.
- Your files are mostly read by other AWS services in the same region rather than downloaded to the public internet.
The trade-off is cost, especially egress to the internet.
Practical tips for any provider
- Set lifecycle rules to delete old backups automatically. Keeping 30 days of nightly backups is a common target, and older copies only cost money.
- Do not make buckets public by default. Share files through a CDN, a custom domain or signed URLs, and keep private data private.
- Use a custom domain for public files, such as
files.example.com. If you ever switch providers, your links keep working. - Turn on versioning for backup buckets, so an overwrite or deletion can be undone.
- Set a budget alert on any usage-billed account. A misconfigured public bucket or a hotlinked file can generate a surprising bill.
- Encrypt sensitive backups before upload, especially database exports containing customer data.
Moving between providers
Because all three support the S3 API, moving data is mostly a matter of copying. Tools such as rclone copy between any S3-compatible services:
rclone sync s3remote:my-bucket r2remote:my-bucket --progressPlan the copy carefully on S3, since downloading everything counts as egress. Moving 1 TB out of S3 would cost roughly $83 at about $0.09 per GB beyond the first free 100 GB. That one-off cost is worth knowing before you choose where to start.
Estimating your own bill
You can estimate any of the three in five minutes with three numbers from your own site.
- How much do you store? Check the size of your uploads folder, backup archives or media library. A small business site with a few years of images is often 5 to 30 GB. Nightly backups kept for 30 days multiply your site size by 30 unless the backups are incremental.
- How much is downloaded each month? Your hosting control panel or CDN dashboard shows bandwidth. Count only the files you would move to object storage, not your HTML pages.
- How many files are requested? Roughly the number of image and file views a month. Your analytics page views multiplied by images per page is a reasonable estimate.
Then apply each provider's prices:
| Step | Cloudflare R2 | Backblaze B2 | Amazon S3 |
|---|---|---|---|
| Storage | (GB minus 10) x $0.015 | (GB minus 10) x about $0.00695 | GB x about $0.023 |
| Egress | $0 | (downloads minus 3 x stored) x $0.01, if positive | (downloads minus 100 GB) x about $0.09, if positive |
| Requests | Reads above 10 million x $0.36 per million | Usually $0 | GET requests x $0.0004 per 1,000 |
If one line dominates, that tells you which provider suits you. When egress is the big number, R2 is usually the answer. When storage is the big number and downloads are small, B2 usually is.
Recheck your estimate after the first full month of real usage. Every provider's dashboard shows actual storage, egress and request counts.
Frequently asked questions
Is Cloudflare R2 cheaper than Amazon S3?
For files that are downloaded often, yes. R2 charges $0.015 per GB a month for storage and nothing for egress, according to Cloudflare's pricing page. S3 Standard storage costs about $0.023 per GB a month, and downloads beyond the first free 100 GB cost about $0.09 per GB.
What does Backblaze B2 cost?
Backblaze lists B2 storage at $6.95 per TB per month, with the first 10 GB free. Egress is free up to three times your average monthly stored data, then $0.01 per GB. Class A, B and C API calls are free, and there are no minimum storage duration fees.
Which is best for website backups?
Backblaze B2 is usually cheapest for backups because it has the lowest storage price and restores within three times your stored data are free. Cloudflare R2 is also inexpensive. Keep backups in storage separate from your web host, and use lifecycle rules to delete old copies.
What is egress in cloud storage?
Egress is data transferred out of the storage service, such as visitors downloading files. Many providers charge per GB for it, and for frequently downloaded files it can cost far more than storage. Cloudflare R2 charges no egress fees, and Backblaze B2 includes three times your stored data free.
Do R2 and B2 work with tools built for S3?
Generally, yes. Both support the S3 API, so backup plugins, command-line tools and code libraries designed for S3 usually work by changing the endpoint address, access key and secret key. Check the tool's documentation for S3-compatible storage settings.
Should I put a CDN in front of object storage?
Usually, for public files. A CDN caches files near visitors, which speeds up delivery and reduces the number of requests and downloads billed by the storage service. Cloudflare R2 integrates with Cloudflare's CDN, and Backblaze notes that many CDN partners waive B2 egress.
What is the free tier for Cloudflare R2?
Cloudflare lists 10 GB-month of Standard storage, 1 million Class A operations and 10 million Class B operations free each month. Egress is free at all levels. Infrequent Access storage has no free tier and a 30-day minimum storage duration.
Sources
Prices were read on October 10, 2026.
Update history
- First published.