The meter that decides the bill is not the one on the pricing page
Ask three vendors what a terabyte of storage costs and you get three answers that look comparable: 15 dollars, 23 dollars, and 7 dollars a month. Ask what a terabyte costs after the data is actually used — stored, read, and downloaded by real customers — and the answers diverge by a factor of fifty. The storage meter is the smallest line on the bill. The egress meter decides the month: 16 dollars or 3,000.
Cloudflare R2, Amazon S3, and Backblaze B2 sell the same product — S3-compatible object storage — on three different meters. R2 charges for storage and operations and nothing for egress. S3 charges the highest storage rate and 9 cents for every gigabyte that leaves. B2 charges the lowest storage rate and gives away egress up to three times the volume stored, then charges a penny a gigabyte beyond it.
> [!KEY TAKEAWAY]
> At 1 TB stored and 1 TB downloaded a month, B2 costs 7.12 dollars, R2 costs 16.17 dollars, and S3 costs 116.61 dollars — and 92.16 dollars of the S3 bill is egress alone. Choose the vendor by how much data leaves, not by how much data sits.
Who this guide is for, and who should stop here
This guide is for a founder or engineering lead choosing object storage for an application that serves files to the public — product images, user uploads, video, software downloads, backups that get restored. It assumes the reader will store at least a terabyte and will serve a meaningful share of it every month.
It is not for a cold archive that is written once and never read. An archive workload has no egress, so the decision collapses to the storage rate alone, and B2 at 6.95 dollars per terabyte a month wins that comparison without a worked example. It is also not for a workload already locked into the AWS ecosystem by compliance, IAM, or a data pipeline that cannot move — that buyer is paying the ecosystem price, and the math below tells them what it costs.
The three meters, stated plainly
Cloudflare R2 prices storage at 0.015 dollars per GB-month for Standard storage and 0.01 dollars per GB-month for Infrequent Access storage, on its pricing page last updated October 30, 2026. Class A operations — writes, lists, and other state-mutating calls — cost 4.50 dollars per million requests on Standard and 9.00 dollars per million on Infrequent Access. Class B operations — reads — cost 0.36 dollars per million on Standard and 0.90 dollars per million on Infrequent Access. Egress is free on both storage classes. The free tier covers 10 GB-months of Standard storage, 1 million Class A operations, and 10 million Class B operations a month. Cloudflare rounds billable usage up to the next billing unit, so 1.1 GB-months is billed as 2 GB-months.
Amazon S3 Standard, in US East (N. Virginia), prices storage at 0.023 dollars per GB for the first 50 TB a month, 0.022 dollars for the next 450 TB, and 0.021 dollars beyond 500 TB, per the AWS Price List published November 4, 2026. Requests cost 0.005 dollars per 1,000 PUT, COPY, POST, or LIST requests and 0.0004 dollars per 1,000 GET and all other requests. Data transfer out to the internet costs 0.09 dollars per GB — the figure AWS own pricing page works in its example, where 20 GB transferred out costs 1.80 dollars.
Backblaze B2 prices storage at 6.95 dollars per TB per month — 0.00695 dollars per GB-month — with no minimum file size and no minimum storage duration fees, on its pricing page fetched this cycle. Egress is free up to three times the average monthly data stored, then 0.01 dollars per GB for additional egress. Transactions are free. B2 Overdrive, the high-throughput tier for AI, machine learning, and high-performance workloads, starts at 15 dollars per TB per month with unlimited free egress, and requires a multi-petabyte commitment.
| Meter | Cloudflare R2 Standard | Amazon S3 Standard | Backblaze B2 | Authority |
| :--- | :--- | :--- | :--- | :--- |
| Storage, per GB-month | 0.015 dollars | 0.023 dollars, first 50 TB | 0.00695 dollars | Vendor pricing pages |
| Egress, per GB | 0 dollars | 0.09 dollars | 0 dollars to 3x stored, then 0.01 dollars | Vendor pricing pages |
| Write operations, per 1,000 | 0.0045 dollars | 0.005 dollars | 0 dollars | Vendor pricing pages |
| Read operations, per 1,000 | 0.00036 dollars | 0.0004 dollars | 0 dollars | Vendor pricing pages |
| Free tier | 10 GB-months, 1M Class A, 10M Class B | None beyond new-account free tier | Egress free to 3x stored; transactions free | Vendor pricing pages |
| Infrequent-access storage | 0.01 dollars per GB-month, retrieval 0.01 dollars per GB | 0.0125 dollars per GB-month | Not offered as a separate class | R2 and S3 pricing pages |
Worked math, profile one: 1 TB stored, 1 TB downloaded
Scenario: a small application stores 1 TB of user uploads and serves 1 TB of downloads a month, with 1 million reads and 100,000 writes.
Cloudflare R2:
$
\text{R2} = (1{,}024 \times \$0.015) + (0.1 \times \$4.50) + (1 \times \$0.36) + \$0 = \$15.36 + \$0.45 + \$0.36 = \$16.17
$
Amazon S3:
$
\text{S3} = (1{,}024 \times \$0.023) + (100 \times \$0.005) + (1{,}000 \times \$0.0004) + (1{,}024 \times \$0.09) = \$23.55 + \$0.50 + \$0.40 + \$92.16 = \$116.61
$
Backblaze B2:
$
\text{B2} = (1{,}024 \times \$0.00695) + \$0 + \$0 = \$7.12
$
B2 egress is free because 1 TB downloaded is inside the free allowance of three times the 1 TB stored. S3 egress alone, 92.16 dollars, is nearly six times the entire R2 bill.
Worked math, profile two: 10 TB stored, 30 TB downloaded
Scenario: a media application stores 10 TB and serves 30 TB a month — three times the stored volume, the exact edge of the B2 free egress allowance. Reads are 10 million, writes 1 million.
Cloudflare R2:
$
\text{R2} = (10{,}240 \times \$0.015) + (1 \times \$4.50) + (10 \times \$0.36) + \$0 = \$153.60 + \$4.50 + \$3.60 = \$161.70
$
Amazon S3:
$
\text{S3} = (10{,}240 \times \$0.023) + (1{,}000 \times \$0.005) + (10{,}000 \times \$0.0004) + (30{,}720 \times \$0.09) = \$235.52 + \$5.00 + \$4.00 + \$2{,}764.80 = \$3{,}009.32
$
Backblaze B2:
$
\text{B2} = (10{,}240 \times \$0.00695) + \$0 = \$71.17
$
At this profile B2 egress is still free, because 30 TB downloaded equals exactly three times the 10 TB stored. B2 costs less than half of R2.
Worked math, profile three: 10 TB stored, 100 TB downloaded
Scenario: the same 10 TB store, now serving 100 TB a month — ten times the stored volume, a viral video month or a popular download.
Cloudflare R2 is unchanged: 161.70 dollars, because egress is free at any volume.
Amazon S3:
$
\text{S3} = \$235.52 + \$5.00 + \$4.00 + (102{,}400 \times \$0.09) = \$9{,}460.52
$
Backblaze B2: storage is 71.17 dollars. Egress is free for the first 30 TB and charged at 0.01 dollars per GB for the remaining 70 TB, which is 71,680 GB:
$
\text{B2} = \$71.17 + (71{,}680 \times \$0.01) = \$71.17 + \$716.80 = \$787.97
$
The crossover between B2 and R2 is derivable from the two meters: B2 total equals R2 total when the billable egress charge equals the storage saving, which happens when egress is about 3.8 times the stored volume:
$
\text{Egress}_{\text{crossover}} \approx 3.8 \times \text{Stored}
$
Below about 3.8 times stored, B2 is cheaper. Above it, R2 is cheaper, because R2 egress is free at any volume while B2 charges a penny a gigabyte past the free allowance. S3 never wins on price at any of these profiles. S3 is bought for its ecosystem, not its meter — and the price of the ecosystem is 9,460.52 dollars a month against 161.70 dollars for the same bytes on R2.
| Profile | R2 | S3 | B2 | Winner | Authority |
| :--- | :--- | :--- | :--- | :--- | :--- |
| 1 TB stored, 1 TB egress | 16.17 dollars | 116.61 dollars | 7.12 dollars | B2 | Vendor pricing pages |
| 10 TB stored, 30 TB egress | 161.70 dollars | 3,009.32 dollars | 71.17 dollars | B2 | Vendor pricing pages |
| 10 TB stored, 100 TB egress | 161.70 dollars | 9,460.52 dollars | 787.97 dollars | R2 | Vendor pricing pages |
| Archive, no egress | 15.36 dollars per TB | 23.55 dollars per TB | 7.12 dollars per TB | B2 | Vendor pricing pages |
| Egress ratio where B2 stops winning | — | — | about 3.8x stored | R2 beyond the crossover | Derived from the two vendor meters |
What the meter cannot tell you
Price is not the decision. Three factors outside the meter change the answer.
First, ecosystem. S3 is the default storage of the AWS platform: IAM policies, event notifications, lifecycle rules, replication, and a compliance surface that auditors already understand. R2 and B2 are S3-compatible, which means existing tools mostly work, but compatibility is not identity — a feature that exists only on S3 is a reason to pay the S3 price, and the profiles above state what that reason costs.
Second, throughput and latency. B2 Overdrive exists because standard B2 is not the fastest tier for intensive read workloads; it starts at 15 dollars per TB per month with unlimited free egress, still cheaper than S3 Standard storage alone at 23.55 dollars per TB before any egress. R2 is a Cloudflare product served from its global network, so its egress advantage is also a latency advantage. Our Cloudflare vs Fastly vs AWS CloudFront CDN pricing guide prices the delivery layer that sits in front of whichever store you choose.
Third, minimums and rounding. R2 rounds billable usage up to the next billing unit, so a workload of 1.1 GB-months is billed as 2 GB-months. B2 charges no minimum file size or storage duration fees, which matters for workloads with many small files. S3 charges per request, which matters for workloads with millions of tiny reads: at 100 million GET requests a month, S3 request charges alone are 40 dollars, R2 charges 36 dollars, and B2 charges nothing.
> [!WARNING]
> The S3 egress figure in older comparisons is often quoted as a storage price. It is not. A buyer who moves a download-heavy application to S3 on the strength of a 0.023 dollar storage rate will receive a first bill dominated by a 0.09 dollar egress rate they never priced, and the bill arrives after the migration, when the data is already there. The same warning applies in reverse to B2: the free egress allowance is three times stored, not unlimited, and a viral month that pushes downloads past 3.8 times stored flips the winner to R2.
> [!FOUNDER]
> "Every storage decision I have watched go wrong was made by comparing the storage rate and ignoring the egress rate. The storage rate is the price of sitting still. The egress rate is the price of doing business. An application that serves its files pays the egress rate a hundred times for every once it pays the storage rate. Price the workload, not the warehouse."
> — Enow A. Jovial, Founder & Chief Executive Officer
The migration sequence
Moving between these vendors is a copy operation, not a rewrite, because all three speak the S3 API. The risk in a storage migration is not the copy, it is the cutover.
Step 1: Measure the real workload for 30 days. Record stored gigabytes, egress gigabytes, GET requests, and PUT requests from the current vendor bill. Do not estimate. The egress ratio — egress divided by stored — is the single number that picks the vendor, and the crossover sits at about 3.8.
Step 2: Price the measured workload on all three meters. Run the same four numbers through the formulas in this guide. If the current bill is more than 20 percent above the cheapest meter, the migration pays for itself in the first month.
Step 3: Copy with rclone or the vendor migration tool, keeping the old bucket live. Do not delete the source until the destination has served production traffic for a full billing cycle. The copy is cheap; the rollback is what costs money.
Step 4: Cut over DNS or the application endpoint, then watch the first invoice. Compare the first invoice line by line against the priced workload. The two lines that diverge are usually requests — a chatty application makes more calls than the estimate — and the fix is a cache, not a vendor change. Our CDN stale-while-revalidate and edge purge guide covers the caching layer that cuts both the request count and the egress volume at once.
Step 5: Set the billing alert at the priced total. A storage bill that doubles without a traffic doubling is a bug, a leak, or a misconfiguration — never a price change.
> [!TIP]
> Run the three profiles through the Product and Service Profit Margin Pricing Calculator with your own stored and egress volumes before signing anything: the calculator holds the arithmetic steady while you change the inputs, and the input that flips the winner is the one to measure hardest.
When the cheapest meter is the wrong choice
A workload with a compliance requirement that only S3 satisfies should stay on S3, and the profiles above are the price of that requirement. A workload with millions of tiny files and a hard latency budget should test B2 Overdrive or R2 before committing. A workload with egress below the free allowance on all three vendors should choose on storage rate alone, and B2 wins that comparison.