Cost optimization

How You Cut Egress Fees with Cloudflare R2 and Escape AWS/Azure Cloud Tax

Valery Evans Valery Evans
May 08, 2026

Every time your customers download a file, stream a video, or hit your API, you can pay twice, once to store the data, and again to move it out of AWS or Azure. That second bill is where egress fees turn into a real cloud tax for your budget.

Cloudflare R2 changes that math with zero egress fees and S3 compatibility, so you can stop paying to send your own data back out. If you’re a CTO, CFO, or founder, this matters fast, because the bill grows with usage, not with storage alone.

In the next sections, you’ll compare costs, see when R2 makes sense, and decide whether a move is worth it.

What cloud tax means, and why egress fees hit hardest

You feel cloud tax when the estimate looks neat, then the bill grows in places you barely watched. Storage is easy to price, but once users pull files, call APIs, or restore backups, the cost of data out of storage starts to climb.

Cloudflare R2 changes that pattern because you still pay for object storage, but you do not pay egress fees to send data to the internet. That matters when your cloud provider charges for every byte that leaves the bucket, because the bill stops tracking just what you keep and starts tracking what people use.

Why moving data costs more than storing it

Storage usually feels cheap because you pay for the space itself. Data transfer feels expensive because you pay every time the same file moves again. A file can sit in a bucket for weeks with little cost, then one burst of downloads can push the bill higher than the storage line ever did.

Cloudflare’s current R2 pricing keeps that split simple, storage plus operations, with zero egress fees. In the U.S., AWS S3 Standard starts at $0.023 per GB-month, while internet egress starts at about $0.09 per GB after the free 100 GB. Azure Blob Hot in U.S. regions is a little lower on storage, but its outbound traffic still costs about $0.087 per GB.

Line graph shows flat horizontal line for storage costs and steep rising curve for egress costs over time on light grid background.

This is why the bill can look harmless at first. Then traffic rises, and the egress line starts to bend upward like a loaded bridge.

Charge typeWhat you pay forWhy it grows fast
Data storedThe GB sitting in the bucketIt rises slowly and predictably
Data out of storageDownloads, API reads, restores, and syncsIt scales with traffic, not with storage size
Cloudflare R2 storageSpace plus operationsStorage stays low, and egress stays free

The simplest way to see it is in a flow like this:

Data stored -> user request -> bytes leave storage -> egress fee shows up

That is why Egress Fees Cloudflare R2 gets so much attention. The storage line matters, but the transfer line is where your budget usually breaks.

Monthly use caseAWS S3 StandardAzure Blob HotCloudflare R2
100 GB stored, 1 TB outboundAbout $92.30About $88.80About $1.50 in storage, plus low ops
1 TB stored, 10 TB outboundAbout $932.30About $888.80About $15 in storage, plus ops
10 TB stored, 50 TB outboundAbout $4,730+About $4,350+Storage and ops only, egress stays free

You do not need a massive dataset to feel the pain. A small media library, a product catalog with many images, or a popular download link can push outbound traffic past storage cost very quickly.

Where AWS and Azure bills usually surprise you

The bill rarely surprises you on day one. It usually catches you when your app goes public, your backup job runs, or your data crosses a region boundary. Public downloads, API responses, file restores, and cross-region transfers are the places where egress charges hide in plain sight.

Billing triggerWhat happensWhy it stings
Public downloadsUsers fetch files directly from storageEvery download adds data transfer fees
API responsesSmall payloads repeat all dayHigh request volume creates steady egress
File restoresBackups move back into hot storageRestore traffic can cost more than storage
Cross-region transfersData moves between regions or zonesYou pay for movement, not just retention
CDN cache missesThe edge pulls from originMisses send traffic back to your storage bill

If you want a broader comparison of how these rates stack up, the cloud egress pricing comparison makes the gap clear across AWS, Azure, GCP, and Cloudflare.

A public image site is a clean example. One invoice-backed case study showed AWS S3 image delivery at about $246 per month, then near-zero delivery cost after moving that path to Cloudflare R2 and the edge cache. You can see that write-up in this AWS S3 to Cloudflare R2 case study.

Real-world workloadWhat the public example showsWhy it matters
Image-heavy websiteDelivery cost fell from about $246/month to nearly $0Egress, not storage, drove the bill
High-read media appPublic migration notes show roughly 70% lower cost after the moveRead-heavy traffic punishes S3 first
1 TB stored, 50 TB servedR2 stays near storage and ops cost, while S3 egress runs into the thousandsTraffic volume is the real pressure point

The storage line is the bait. The traffic line is where the cloud tax lands.

Cloudflare R2 strengthCloudflare R2 trade-off
Zero egress feesClass A and class B operations still count
S3-compatible APIYou still need to model app behavior
Generous free tierLarge write-heavy workloads can outgrow it
Predictable outbound costOrigin uploads can still carry source-side transfer costs

The free tier helps you start small. Cloudflare R2 includes 10 GB of storage, 1 million Class A operations, and 10 million Class B operations each month before paid usage begins. That is useful for smaller sites, but the real win shows up when your traffic would otherwise trigger data egress fees every day.

If your workload is read-heavy, Cloudflare R2 usually fits well. If your app writes and rewrites huge objects all day, you should model storage and operations carefully, because class A operations and class B operations still matter even when egress is free.

A simple decision chart helps:

Workload patternBest fitWhy
Public files, images, and downloadsCloudflare R2Users read a lot, and egress stays free
Backup archives with rare restoresStandard cloud storageStorage price may matter more than transfer
API-driven apps with lots of small readsCloudflare R2 or another object storage serviceRead volume is predictable, so egress savings add up
Heavy cross-region syncDepends on architectureTransfer paths can dominate the bill

If you already buy Cloudflare services, you can lower the stack cost even more. Spendbase offers up to 25% off Cloudflare, which can help trim the rest of the Cloudflare bill while you cut egress costs with Cloudflare R2.

Spendbase offerBest use caseWhat it can offset
Up to 25% off CloudflareYou already use Cloudflare for delivery or storagePart of the platform spend around R2 and edge services

When you look at the bill this way, the cloud tax becomes easier to spot. Storage is the quiet part. Egress is the part that grows teeth.

See how much you can save on your stack

Save from 3% up to 50%

1. Pick your tools
2. We’ll estimate savings

Get my forecast

Pick your team’s tools!

Click to select one or more tools.

What’s your company size?

Just click to select.

1-50
50-100
100-200
200+

What’s your business email?

We'll send you calculations right away

Back

The email is flying to your inbox!

Beyond discounts, you may qualify for up to $100K in AWS credits.

What Cloudflare R2 is, and when it makes sense

Cloudflare R2 is an object storage service built for files you serve often, especially when data transfer costs hurt more than storage itself. You still pay for storage and operations, but you do not pay an egress fee when data leaves R2.

In 2026, Cloudflare R2 pricing is simple enough to model without a spreadsheet maze. Standard storage is $0.015 per GB-month, infrequent access storage is $0.01 per GB-month with a 30-day minimum, Class A operations are $4.50 per million, and Class B operations are $0.36 per million. The free tier also gives you 10 GB of storage, 1 million Class A operations, 10 million Class B operations, and free egress.

That makes R2 a good fit when your bill is driven by reads, downloads, and delivery. If you mostly store data and rarely move it, another cloud provider may still be cheaper overall.

Secure Cloudflare R2 bucket in clouds with golden data streams flowing outward to global devices without barriers.
Cost itemCloudflare R2 pricingWhat you need to know
Standard storage$0.015 per GB-monthYou pay to keep data in the bucket
Infrequent access storage$0.01 per GB-monthGood for colder files you rarely touch
Retrieval from infrequent access$0.01 per GBA small pull fee still applies
Class A operations$4.50 per millionUploads, deletes, and listings still cost money
Class B operations$0.36 per millionReads are cheap, but they are not free
Egress fee$0Data leaving R2 is free

The key point is simple. Cloudflare R2 removes the cloud tax on outbound traffic, but it does not erase storage costs or operation costs. You still pay for what you keep and what you ask R2 to do.

If your bill grows every time users download the same file, R2 removes the line item that hurts most.

The core idea behind zero egress fees

The appeal of R2 is easy to understand once you separate storage from movement. You pay to store the object, you pay for requests on that object, but you do not pay when users pull that data back out.

That matters because egress fees Cloudflare R2 eliminates are often the most painful part of cloud storage billing. In AWS S3 or Azure Blob, a busy month can cost far more in transfer than in storage. With R2, the transfer side disappears, so your bill tracks usage more cleanly.

A simple way to think about it looks like this:

StepWhat happensDo you pay for it in R2?
StoreYou upload the file into the bucketYes
RequestYour app asks for the fileYes, as an operation
DeliverThe file leaves R2 and reaches the userNo
RepeatThe same file gets served again and againStill no egress charge

That is why R2 works so well for large amounts of unstructured data that many people read but few people rewrite. The storage costs stay predictable, and the data out of storage charge never shows up.

A real-world image workload shows the point well. In one invoice-backed migration, monthly image delivery dropped from about $246 on AWS S3 to near zero after the serving path moved to Cloudflare R2 and the edge cache. You can see the details in this AWS S3 to Cloudflare R2 image cost case study.

Cost driverAWS S3 style billingCloudflare R2 billing
StorageLow and predictableLow and predictable
Data transfer outCan climb fastFree
Frequent readsUsually adds to the billAdds only request costs
Public downloadsEgress compounds over timeNo egress fee

The result is a cleaner model for your finance team. You still watch operations, storage pricing, and your total volume of data stored, but you no longer need to budget for every outbound byte.

When R2 is a better fit than AWS or Azure

R2 makes the most sense when your workload is read-heavy and public-facing. If users, customers, or systems keep pulling the same files, Cloudflare R2 usually beats a traditional cloud provider on total cost because the data egress fees disappear.

Four line art icons in a row on light blue tiles: video player, download arrow, backup folder with restore arrow, and export chart.
Use caseWhy R2 fitsShort example
Media deliveryThe same images or clips get served many times, so egress adds up fastYour product photos load on every storefront visit
Software downloadsUsers grab the same installer or release package again and againYour SaaS ships a 500 MB desktop app
Backup restoresBackups sit cold, then get restored in burstsYou restore a weekly snapshot after an incident
User exportsReports are generated once, then downloaded by many usersCustomers export CSVs and PDFs from your app

For these workloads, Cloudflare R2 is often the better object storage solution because you can pay for storage without paying to move data out. That matters most when the same file is requested thousands of times.

A quick fit check helps:

Workload patternBetter choiceWhy
Lots of reads, few writesCloudflare R2Free egress keeps costs down
Large archives with rare accessStandard storage from another cloud provider may fitStorage price can matter more than transfer
App files served through the edgeCloudflare R2 plus Cloudflare WorkersYou keep traffic close to users
Heavy write churn, low download volumeAWS S3 or Azure may still make senseOperations and lifecycle rules may matter more

Cloudflare also pairs well with edge delivery. When you combine R2 with Cloudflare Workers, you can keep the file path close to the user and cut round trips that would otherwise trigger extra bandwidth and data transfer fees. A broader comparison of how R2 stacks up against other storage providers is laid out in this Cloudflare R2 vs AWS S3 vs Azure Blob comparison.

There are trade-offs, and you should price them honestly:

R2 strengthR2 trade-off
Zero egress feesClass A and Class B operations still cost money
S3-compatible APIYou still need to test your app path
Generous free tierLarge production traffic can outgrow the free tier quickly
Simple outbound cost modelInfrequent access still has retrieval fees

If you already use Cloudflare, trim the rest of the bill too. Spendbase offers up to 25% off Cloudflare, which can help offset the rest of your Cloudflare spend while you eliminate egress fees with R2.

For CTOs, CFOs, and founders, the decision is practical. Use Cloudflare R2 when outbound traffic is the bill you want to kill, and keep a traditional cloud storage tier only when storage cost, archive rules, or write-heavy behavior matter more.

How R2 pricing works behind the scenes

Cloudflare R2 pricing is easier to read than most cloud bills, but only if you split it into the right pieces. You pay for storage, you pay for operations, and you may pay a small fee when you pull cold data from the infrequent access tier. You do not pay an egress fee when data leaves R2, which is where the math starts to feel different from AWS or Azure.

A current 2026 R2 pricing breakdown shows the same pattern clearly. The bill stays simple because the expensive part, outbound traffic, is removed from the equation.

Flowchart diagram with central R2 bucket, incoming Class A upload arrow with cost, storage label, outgoing Class B read arrow with cost, and free egress to globe.

Storage, requests, and retrievals in plain English

You pay to keep files in the bucket, and you pay when your app does work on those files. That work falls into two buckets: Class A operations for write-style actions like uploads and lists, and Class B operations for reads. The request count matters, but the number of bytes leaving R2 does not create a transfer bill.

Charge typeWhat it meansWhat it costs you
Standard storageFiles you keep in the bucket$0.015 per GB-month
Infrequent access storageColder files you touch less often$0.01 per GB-month
Class A operationsUploads, copies, lists, deletes$4.50 per million
Class B operationsReads and downloads$0.36 per million
Infrequent access retrievalsPulling data back out of the colder tier$0.01 per GB
EgressData sent out to users or apps$0

That split matters because you can model storage costs without guessing about data transfer. If your workload serves the same files over and over, the bill stays tied to requests and storage, not to the amount of traffic leaving the service.

The important part is simple, R2 charges for keeping and touching data, but egress is free.

Four icons in a row on gradient blue background: storage bucket, upload arrow stack, download icons, infinite loop arrow.

What the free tier gives you every month

The free tier is where Cloudflare R2 becomes easy to test. You get enough headroom to launch a proof of concept, run a small public asset library, or support an early-stage product without paying to learn your traffic pattern.

Free tier itemMonthly allowanceWhy it helps
Storage10 GBGood for small sites and test data
Class A operations1 millionCovers uploads, lists, and deletes during early testing
Class B operations10 millionSupports lots of reads for demos and light apps
EgressFreeLets you serve files without data egress fees

That is useful when you want to watch real usage before you commit budget. A startup can place product screenshots, PDFs, or small app files in an R2 bucket and see how far the free tier goes before moving to paid usage.

For example, a small SaaS that stores onboarding assets and serves them to trial users may never hit storage limits first. It usually hits request volume before size, which is why the operation counts matter so much. If you want the latest rate structure in one place, Cloudflare also documents its pricing on the official R2 pricing page, and the published numbers match the pattern above.

Best fit for the free tierWhy it works
Testing and stagingYou can measure traffic without cost pressure
Small appsStorage stays low, and reads stay predictable
Early-stage teamsYou get room to learn before the bill grows

The takeaway is plain. Cloudflare R2 gives you a clean starting point, and the free tier buys time to validate demand. If your traffic grows, you still keep the same cost model, just with more data, more operations, and no surprise charges for outbound bandwidth.

Cloudflare R2 vs Amazon S3, where the money really changes

The gap between Cloudflare R2 and Amazon S3 starts small, then grows fast when your users keep asking for the same files. Storage looks almost tame on paper. Egress is where the bill changes shape, especially when your traffic spikes or your downloads keep repeating.

If you want a current cost snapshot, the Cloudflare R2 pricing breakdown for 2026 shows the storage-and-operations model clearly. S3 still keeps the familiar AWS structure, but once bytes leave the bucket, the math gets heavier.

Price differences that matter at real scale

At low volume, the storage line can fool you. At real scale, the transfer line takes over. That is why egress fees Cloudflare R2 removes matter most for teams serving media, downloads, backups, and API responses.

Cost itemCloudflare R2Amazon S3 Standard
Standard storage$0.015 per GB-month$0.023 per GB-month
Outbound data$0about $0.09 per GB after the first 100 GB
Class A operations$4.50 per millionrequest pricing applies
Class B operations$0.36 per millionrequest pricing applies
Free tier10 GB storage, 1M Class A, 10M Class B, free egress100 GB egress free, pricing varies by account

The biggest difference is not the per-GB storage rate. It is the fact that Cloudflare R2 egress is free while S3 charges every time data leaves. That turns a normal month into a sharp one when traffic grows.

Monthly workloadCloudflare R2Amazon S3 StandardWhat drives the gap
100 GB stored, 1 TB outboundabout $1.50 plus opsabout $92.30 plus requestsdata transfer
1 TB stored, 10 TB outboundabout $15 plus opsabout $914 plus requestsegress fees
10 TB stored, 50 TB outboundabout $150 plus opsabout $4,730 plus requestscostly egress
Bar chart with three pairs of bars on grid background: short blue R2 bars beside tall orange stacked S3 bars.

A public migration roundup shows the same pattern across real workloads. The figures are hard to miss when you compare them side by side.

Real-world patternS3 monthly costR2 monthly costWhy it matters
Personal blogabout $50about $0.75traffic is more expensive than storage
SaaS appabout $923about $15reads drive the bill
Video platformabout $4,730about $150outbound traffic becomes the tax

For a quick check, use this cloud storage cost comparison as a reference point. It shows how fast monthly costs shift once downloads become the main event.

If you already buy Cloudflare, you can trim the rest of the stack too. Spendbase offers up to 25% off Cloudflare, which helps reduce the platform spend around your storage move.

Spendbase offerWhat it helps offset
Up to 25% off Cloudflarepart of your Cloudflare bill, including the services around R2

Where S3 still has an edge

Cloudflare R2 wins when data transfer hurts more than storage. Amazon S3 still has the stronger position when your stack lives deep inside AWS or your compliance team wants broader region coverage and storage tiers.

World map shows dense AWS S3 region pins across US, Europe, Asia, Africa, sparse Cloudflare R2 points, integration icons, compliance shields.
AreaAmazon S3 edgeWhy it matters
Ecosystem supportNative fit with IAM, Lambda, EventBridge, Athena, and many toolsless glue code inside one cloud provider
RegionsMore regions and mature placement optionseasier latency and residency planning
ComplianceBroad enterprise controls and well-known patternshelpful for regulated teams
Cold storageStandard-IA, Glacier, and Intelligent-Tieringuseful when access is rare and storage fees matter most

That is why S3 still makes sense for some workloads. If your data barely moves, if your company already runs on AWS, or if your team needs a familiar compliance path, S3 can be the safer operational choice.

A simple way to frame it:

  • Use R2 when downloads, media delivery, and shared assets dominate your bill.
  • Use S3 when internal AWS integrations matter more than outbound cost.
  • Use S3 for archive-heavy data that sits cold for long stretches.
  • Use R2 when you want to eliminate egress without changing your serving model.
S3 storage classBest forCost behavior
Standardhot data you read oftenhigher storage, simple access
Standard-IAinfrequent access storagelower storage, retrieval fees apply
Glacier tierslong-term archive datavery low storage, slower restores
R2 standard storagefrequently served objectslow storage, free egress

For teams that want the shortest path to lower bills, the decision is usually clear. Cloudflare R2 cuts the part of cloud storage that grows with traffic, while Amazon S3 still wins when ecosystem depth, regions, or cold-data tiers matter more than outbound cost.

Free virtual cards for non-EU residents

Open in 1 working day, issue 100 virtual cards, and get up to 1.25% cashback.

Get a free account
CTA image

How to estimate your costs before you move anything

Before you migrate a single file, build a rough bill with three numbers: data stored, downloads, and request volume. That gives you a clean picture of your likely Egress Fees Cloudflare R2 savings, and it also shows where your real costs sit if you stay on AWS or Azure.

The goal is not perfect math. The goal is to spot whether your bill is storage-led or traffic-led. If traffic dominates, Cloudflare R2 usually wins fast. If storage dominates and reads stay low, your savings are smaller.

Use this simple lens first.

InputWhat you needWhy it matters
Data storedGB or TB in the bucketSets your storage cost floor
DownloadsGB or TB sent to usersShows where egress grows
Request volumeClass A and Class B operationsAdds request costs on top
Line art flowchart on white background from start to data stored GB, downloads TB, requests millions, cost calculators, total bill, and end.

A quick forecast keeps you from guessing. You can also sanity-check your numbers with the Cloudflare R2 pricing calculator, then compare the result with your current cloud provider bill.

A simple way to forecast your monthly bill

Start with one month of usage. If you already have logs, grab the total amount of data stored, the total downloads, and the number of reads and writes. If you don’t, use your current month as a baseline and multiply by expected growth.

Then run a quick estimate:

  1. Multiply stored GB by storage price.
  2. Multiply read and write counts by their operation rates.
  3. Ignore outbound bandwidth on Cloudflare R2, because free egress changes that part of the math.
  4. Add a buffer for growth, usually 10% to 20%.
ItemCloudflare R2 standard pricingHow you use it
Standard storage$0.015 per GB-monthMultiply by your stored GB
Class A operations$4.50 per millionUse for uploads, deletes, and lists
Class B operations$0.36 per millionUse for reads and downloads
Egress fee$0Leave this out of the R2 side
Free tier10 GB, 1M Class A, 10M Class BUseful for small tests and proofs

For a simple object storage workload, that gets you close enough to make a decision. A 1 TB bucket with 5 TB of monthly downloads may look expensive in AWS S3 or Azure, but the Cloudflare version stays tied to storage and operations, not to moving bytes out.

Example workloadStorage cost on R2Request cost on R2Egress cost on R2
100 GB stored, light readsabout $1.50low$0
1 TB stored, moderate readsabout $15low to moderate$0
10 TB stored, heavy readsabout $150depends on reads$0

That is the number that matters most. If you want a faster shortcut, use the rule that egress is free on Cloudflare R2, then focus your estimate on storage and operations.

If your current bill is driven by downloads, the storage line will look small beside the transfer line.

What to watch for when your app has lots of reads

High read volume is where many teams get surprised. A Class B operation is cheap on its own, but repeated fetches pile up fast when users keep loading the same assets. That is common for media libraries, product images, app icons, and exports.

Line graph on light blue grid: rising blue line for Class B costs, flat green zero egress line.

The math stays simple. If you serve 10 million reads in a month, the read bill is still tiny. If you serve 100 million reads, it starts to matter. By 1 billion reads, the cost is real even with Cloudflare R2, because request volume still charges you.

Monthly Class B operationsApprox. R2 read costWhat it means
10 millionabout $3.60Usually easy to absorb
100 millionabout $36Starts to show up in finance reviews
1 billionabout $360Worth modeling before migration

This is where Cloudflare caching and Cloudflare Workers help. If the edge serves a cached copy, you cut reads against the bucket and keep your storage and operations bill lower. That matters for a busy cloud environment where the same file gets fetched again and again.

A practical read-heavy check looks like this:

SignalWhat it tells you
Many small filesClass B ops can outpace storage growth
Repeated asset fetchesCache hits can save real money
Large download spikesYou need a closer look at total monthly reads
API endpoints serving filesRequest volume matters as much as file size

Cloudflare’s own docs point to the same structure, storage plus operations, with zero egress fees. That model is easy to test before you move data, and it is one reason Cloudflare R2 is a strong fit for large amounts of unstructured data that users keep reading.

Quick testWhat to askGood sign
StorageHow many GB do you keep?Low and predictable
DownloadsHow many GB leave each month?High enough to hurt on S3
ReadsHow many requests hit the bucket?Stable enough to forecast
WritesHow often do you update files?Low enough that Class A stays manageable

For a real-world check, use one month of actual logs from a media site, SaaS app, or download portal. If the same file gets pulled thousands of times, Cloudflare R2 usually cuts the bill because the data transfer charge disappears.

A quick comparison before you migrate

Before you move anything, compare the likely monthly totals side by side. That gives you a safer go or no-go call.

ScenarioAWS or Azure style billCloudflare R2 bill shape
Low storage, high downloadsEgress dominatesStorage and ops dominate
High storage, low downloadsStorage dominatesStorage dominates
Moderate storage, repeated readsData egress fees climbClass B ops stay manageable
Public files behind a CDNSome transfer cost remainsFree egress changes the math

That simple table usually answers the question. If your workload is read-heavy, your cost risk sits in egress charges, not in storage. If your workload is write-heavy, the operations side deserves a closer look before you move your data.

Before-move checklistWhat to measure
Data storedCurrent GB or TB in the bucket
DownloadsMonthly outbound GB
Class A operationsUploads, deletes, and lists
Class B operationsReads and file fetches
GrowthExpected increase over the next 3 months

If you already know your pattern, this is the fastest way to estimate costs with Cloudflare R2 without overbuilding the model. Start with the three inputs, check the free tier, then decide whether the savings justify the move. For many teams, the answer is yes as soon as egress starts to outrun storage.

Best practices for keeping R2 costs low

The cheapest R2 bucket is the one that does less work for the same result. Your bill stays small when you cut repeat reads, keep files hot at the edge, and avoid asking Cloudflare R2 to do the same job over and over.

That matters because Egress Fees Cloudflare R2 removes only the transfer charge. You still pay for class b operations, storage, and some retrieval work. So the real win comes from tighter app design, not just a lower sticker price.

How to reduce Class B operations

If your app keeps pulling the same files, every extra read adds noise to the bill. Caching is the first line of defense, batching cuts request count, and cleaner app logic keeps your object storage from becoming a request factory.

Isometric 3D view shows app requests hitting edge cache first, then secondary cache before central Cloudflare R2 bucket, with arrows indicating hit and miss flows.

Request -> edge cache -> R2 only on miss -> cache again

TacticWhat you changeCost effect
Cache assets at the edgeServe images, files, and JSON from Cloudflare cache before R2Fewer class b operations
Batch reads and deletesGroup work instead of calling R2 one object at a timeLower request count
Store file lists elsewhereKeep metadata in a database or KV storeFewer list operations
Use predictable file pathsSkip bucket scans when you already know the nameLess read chatter

Cloudflare’s usage-based billing guidance points in the same direction, keep cache hit rates high and keep surprise usage low. That is the cheapest path when your app serves the same cloud object many times a day.

A simple rule helps. If users request the same logo, report, or media file more than once, don’t ask R2 to fetch it every time. Put it behind Cloudflare caching or Cloudflare Workers, then let the edge do the repeat work.

Read patternWhat usually happensBetter move
Public imagesLots of repeat hits, same file served again and againCache aggressively
Product exportsFiles get downloaded in burstsPre-generate and batch delivery
Admin file listsTeams keep opening the same directory viewStore metadata outside R2
API file lookupsSmall reads repeat all dayAdd a local cache layer

A real-world example makes this clear. Prisma moved engine downloads from AWS S3 and CloudFront to Cloudflare R2 and reported a 98% drop in distribution costs. The big saving came from taking high-volume delivery off the storage bill and keeping traffic close to the edge.

ExampleWhat happenedWhy it matters
Prisma downloadsDistribution costs fell 98%Repeated delivery is where egress costs explode
High-read image app10 million reads a day stayed manageable on R2Reads matter less when cache hit rates are strong
Public asset libraryDownloads moved off amazon s3 style transfer pricingdata transfer fees stop piling up

The edge should do the repeat work. R2 should hold the source of truth.

Pattern to avoidBetter patternBenefit
Listing a bucket on every page loadCache the file listFewer class b operations
Fetching files one by oneBatch requests where possibleLower request volume
Rebuilding thumbnails on demandPrecompute and store themLess repeated read traffic
Serving uncached assetsAdd cache headers and a CDN layerLess pressure on R2 reads
ApproachProsCons
Edge cachingCuts reads hard, improves speedNeeds good cache rules
BatchingReduces request count fastNot every workflow supports it
Predictable pathsRemoves bucket scansRequires cleaner naming
Metadata storeAvoids frequent list callsAdds another system to manage

The pricing math is friendly here. Cloudflare’s current r2 pricing keeps class b operations at $0.36 per million after the free tier, so every read you avoid is a small but real win. That adds up once your app starts serving the same files at scale.

How to use the free tier without outgrowing it too fast

Cloudflare R2 gives small teams room to move before the bill starts. The free tier includes 10 GB of storage, 1 million class a operations, 10 million class b operations, and free egress, so you can test real traffic without paying to learn your pattern.

The trick is to watch growth before it sneaks past the limit. A tiny team can stay free longer by keeping file sizes small, caching repeat reads, and avoiding noisy bucket scans.

Free tier limitWhat it coversHow to stay under it longer
10 GB storageSmall sites, demos, and asset librariesCompress files and prune old copies
1 million Class A operationsUploads, deletes, and listsBatch writes and avoid duplicate uploads
10 million Class B operationsReads and downloadsCache repeated assets and responses
Free egressDelivery to usersKeep serving public files through Cloudflare

A quick planning loop helps. Deploy, watch reads, trim waste, then review usage every week. If you do that, Cloudflare billing stays calm and your cloud provider bill doesn’t spring a surprise.

Warning signWhat it usually meansWhat to do next
Class B jumps faster than storageRepeated reads are driving costAdd more caching
Class A climbs on quiet daysYour app is rewriting too muchBatch writes or dedupe uploads
Storage stays flat, cost risesRequests are the problem, not sizeCheck logs and hot paths
Usage spikes at launchCache misses are hitting the bucketWarm the cache before promotion

For a small team, the best setup is simple. Use an R2 bucket for the source file, put Cloudflare caching in front, and keep budget alerts on. If you already buy Cloudflare services, Spendbase offers up to 25% off Cloudflare, which helps trim the rest of the stack while you keep egress off your bill.

Small-team setupBest forRisk to watch
Public assets behind cacheSites, docs, and product imagesToo many cache misses
Backups with rare restoresArchives that mostly sit coldRestores can still create retrieval fees
Demo or staging bucketTesting and proofs of conceptTest traffic can grow fast
Shared download portalSaaS files and exportsHigh read volume if uncached

A second cost example shows why this matters. One workload with 100,000 files and 10 million reads per day stayed under the storage limit, but the read count still created a monthly bill of about $104.40 after free usage. That is still far below s3-style data transfer costs, yet it proves that requests, not storage, can become the main line item.

Cost control moveWhy it works
Use fewer file variantsCuts duplicate storage and reads
Set cache TTLs with intentPrevents repeat trips to R2
Track usage weeklyCatches growth before overages land
Keep hot data smallReduces both storage costs and read pressure
Free tier habitResult
Cache common filesFewer egress charges and fewer reads
Avoid listing folders oftenLower request count
Compress uploadsLess data stored and less churn
Watch alerts earlyNo surprise jump in storage fees

If you want a quick mental model, use this one: store once, read many, cache the rest. That is how you keep Cloudflare R2 cheap without starving your app of speed, and it is how you turn free egress into a real advantage instead of a short-lived promo.

Decision pointAsk yourselfGood answer looks like
Read frequencyDo the same files get requested again and again?Yes, then cache them
File sizeAre you serving many small files or a few large ones?Small files need stricter caching
Growth rateWill usage triple in the next quarter?If yes, watch the free tier now
Team sizeCan you review logs weekly?If yes, you can stay ahead of overages

Cloudflare keeps the transfer side easy, but your app design decides the rest. If you trim reads, batch work, and hold the cache line, R2 stays close to the cheapest version of cloud storage you can buy.

Real-world use cases where R2 can save the most

You save the most with R2 when your files are large, public, and requested again and again. That is where Egress Fees Cloudflare R2 cuts the deepest, because the bill stops rising every time someone downloads the same object.

The strongest fits are simple to spot. You have a clear storage set, a steady stream of reads, and a cost line that balloons when traffic climbs. In those cases, R2 is less like a storage swap and more like a pressure release valve for your cloud bill.

Workload patternWhy R2 helps mostWhen it helps less
Large public filesUsers keep downloading the same objectsFiles are rarely accessed
Repeat media deliveryImages, audio, and video create constant outbound trafficContent stays private or internal
App updates and installersOne release can be downloaded thousands of timesRelease volume is tiny
Backups and restoresRestore traffic can spike hard after an incidentData sits cold with almost no recovery activity

If your budget breaks on downloads, not storage, R2 usually fixes the expensive part first.

Media, downloads, and customer-facing files

This is where Cloudflare R2 usually shines the brightest. Video files, podcast episodes, product photos, PDFs, and app updates all behave the same way, they get stored once and served many times. That repeated data transfer is what makes AWS and Azure bills climb fast.

Cloudflare’s own R2 docs call out web content, podcast episodes, and large media files as strong fits, which lines up with what you see in production. The more often users fetch the same file, the more sense it makes to move that traffic onto Cloudflare R2 and keep the egress charge off the bill. For a quick look at the platform side, see the Cloudflare R2 overview and the Prisma R2 savings case study.

Bar chart with short blue R2 bar and tall orange S3 bar stacked for storage and egress, on light grid background.

A media-heavy workload often looks like this:

File typeWhy it gets expensive elsewhereWhy R2 fits
VideoLarge files trigger heavy bandwidth chargesFree egress removes the transfer penalty
AudioRepeated plays create steady readsReads cost less than outbound traffic on other clouds
ImagesEvery page load pulls the same assetsR2 keeps the serving path cheap
App updatesOne release can be downloaded many timesDistribution cost stays tied to storage and operations

A real example makes the math clear. Prisma said its engine distribution costs dropped by 98% after moving to R2. SYBO reported saving around $60,000 per month with Cloudflare caching and R2 in its global game delivery path. Those are the kinds of savings you feel when egress charges disappear from a high-traffic file pipeline.

Real-world exampleWhat changedWhy it matters
Prisma engine downloadsDistribution costs fell 98%Frequent downloads no longer stacked up in transfer fees
SYBO game trafficRoughly $60,000 saved each monthCaching plus R2 cut the cost of serving global users
Media backup workload200 GB and 5 million reads cost about $4.80 on R2The same traffic would create a much larger AWS bill

For customer-facing files, the winning setup is usually the same:

  • Put the source file in an R2 bucket.
  • Cache repeat requests at the edge with Cloudflare.
  • Keep your asset names predictable.
  • Avoid needless re-uploads and duplicate variants.
Delivery choiceCost effectSpeed effect
Direct from S3High data egress costGood, but expensive at scale
Direct from R2No egress feeGood for public files
R2 plus Cloudflare cacheLowest repeat-read pressureUsually the best balance

If you already buy Cloudflare services, Spendbase offers up to 25% off Cloudflare, which helps trim the rest of the bill while you cut egress with R2.

What to watchWhy it matters
Huge files with repeat downloadsThey create the fastest savings
Frequent cache missesThey push more reads back to the bucket
Small files with high request volumeClass B operations can still add up

Backups, archives, and disaster recovery

Backups look cheap until you restore them. That is where other clouds often hit you twice, once for storing the data and again for moving it back out during recovery. If your team restores large datasets after an outage, data transfer fees can become the surprise line item.

Flowchart shows archive box input to R2 bucket with clock icon, arrow labeled 'Free Egress' to globe for worldwide recovery.

R2 changes that math because restore traffic does not carry an egress fee. You still pay for storage and operations, and infrequent access storage has its own retrieval fee, but you avoid the painful part that usually spikes during a restore event. That is why R2 works well for backups, archives, and disaster recovery where restore volume matters.

Restore scenarioCost pressure on AWS or AzureWhat R2 changes
Full site recoveryLarge outbound transfer bill after an incidentNo egress charge on restores
Monthly test restoreRepeated recovery traffic adds upLower cost for each restore cycle
Archive retrievalRare access can still be expensiveRetrieval fees are easier to model
Multi-region recoveryData moves across more pathsTransfer cost stays off the bill

The current R2 pricing model is also easy to explain in a boardroom. Standard storage is low, class a operations and class b operations are priced separately, and restore traffic is not taxed as outbound bandwidth. That is a simpler story than many storage plans from a cloud provider like AWS or Azure.

Storage classBest forCost behavior
Standard storageActive backups and recovery setsLow, predictable storage pricing
Infrequent access storageOlder archives you rarely touchLower storage cost, retrieval fee applies
Cold archive in another cloudVery long retention with little accessCheaper storage, but restores can hurt

A practical disaster recovery plan often looks like this:

  1. Keep your primary backups in R2.
  2. Test restore jobs on a fixed schedule.
  3. Cache recovery metadata outside the bucket.
  4. Track restore volume, not just stored volume.

That matters because the real cost of a backup is not the file sitting quietly in storage. It is the day you need to move data fast and at scale.

Backup patternBest fitWhy
Daily snapshots with periodic restoresCloudflare R2Restore traffic stays free
Long-term archives with rare accessMaybe another storage classStorage price can matter more than movement
Disaster recovery for customer dataCloudflare R2Lower recovery cost under pressure
Compliance archives with fixed retentionDepends on access patternRetrieval fee may or may not matter

There is one honest trade-off. If your archive almost never gets restored, R2 may not be the absolute cheapest storage class. But when restore traffic matters, egress is free becomes the bigger win. That is the point where R2 storage starts saving you real money, because it removes the fee that usually shows up right when you need the data most.

ProsCons
Zero egress fees on restore trafficRetrieval fees still apply for infrequent access storage
Strong fit for recovery workflowsNot always the lowest storage price for deep cold archives
Easy to explain to finance teamsHeavy write churn still needs cost review
Works well with a hybrid cloud setupYou still need a restore plan and monitoring

For backup-heavy teams, the decision is practical. Use R2 when you want a s3-compatible bucket that makes restores cheap to move. Keep a colder archive tier elsewhere only when your restore rate is tiny and your retention rules are strict.

Final checkIf the answer is yes
Do you restore large backups more than a few times a year?R2 can save a lot
Do your users download the same files often?R2 usually pays off fast
Do you want to eliminate egress on recovery paths?R2 is a strong fit
Do you need the cheapest possible cold archive?Compare storage classes before moving

The best savings show up when your files are popular, your restores are real, and your cloud bill grows with traffic. That is where Cloudflare R2 does its best work, and where egress fees Cloudflare R2 removes become impossible to ignore.

How to integrate R2 into your stack without a painful rewrite

You don’t need a full rebuild to move storage to Cloudflare R2. If your app already talks to S3, you can usually swap the endpoint, update credentials, and keep the rest of the code intact. That is the main reason Egress Fees Cloudflare R2 cuts so cleanly into an existing stack.

The safest path is simple: move the data, verify reads and writes, then shift traffic in stages. That keeps the risk low and gives you room to roll back if anything looks off. If you already use Cloudflare for delivery, up to 25% off Cloudflare can also help trim the rest of the bill while you make the move.

What changesWhat usually stays the same
Bucket endpointYour app logic for uploads and downloads
CredentialsThe shape of your object keys and file paths
Cache rulesMuch of your file handling code
Traffic routingYour product flow, if you test carefully
Developer at desk with laptop displaying blurred S3 to R2 code, data streams flowing from AWS to Cloudflare clouds in background.

A good integration plan keeps your storage layer boring. The more boring it feels, the less chance you have of a costly surprise on launch day.

The migration path from S3 to R2

Cloudflare’s own migration strategies page follows the same logic most teams need, move data first, then let new traffic flow into R2. For bulk moves, Super Slurper is the fastest path. For a gentler cutover, Sippy helps you serve missed objects from the old bucket while R2 fills in the gaps.

Start by creating the R2 bucket and matching the naming you already use in S3. Then sync the data, test your reads and writes, and only then switch endpoints in staging before production.

StepWhat you doWhat you check
Create the bucketSet up the R2 bucket with the right name and access rulesPermissions, naming, retention settings
Sync dataCopy objects from S3 with Super Slurper, rclone, or another migration toolFile counts, folder paths, metadata
Change endpointsPoint your app or SDK to the R2 endpointAuth, region settings, DNS, environment variables
Test reads and writesUpload, fetch, list, and delete sample objectsResponse codes, latency, object integrity
Cut over trafficMove real users or jobs to R2 in phasesErrors, cache hit rate, rollback plan

Move the storage first, then move the traffic last. That keeps your rollback simple.

A staged cutover works best when the app is public. You can route a small slice of traffic to R2, watch the logs, and widen the rollout only after the numbers stay flat. That matters more than speed, because a clean switch is cheaper than a rushed fix.

Clean line art flowchart on white background with arrow-connected boxes showing S3 to Cloudflare R2 migration steps.
Cutover planWhy it works
Staging firstYou catch endpoint and permission bugs early
Small traffic sliceYou limit blast radius
Parallel validationYou compare old and new results side by side
Full switch after testsYou reduce the chance of a rollback

You should also match your integration path to the workload. A Rails app with Active Storage can often swap storage backends with little code churn. A media app may need cache rules and CDN settings tightened before traffic moves. The storage change is easy; the delivery path is where the real work sits.

Stack patternBest moveWhy
S3-compatible appSwap endpoint and credentialsMinimal code change
CDN-backed media appMove storage, then tune cache rulesCuts repeat reads and data egress
Backup-heavy workflowSync data first, restore laterGives you a safe rollback window
API serving filesTest latency and request volumeSmall requests can hide cost spikes

A quick example helps. One image-heavy site moved its S3 media bucket to R2 and routed delivery through Cloudflare cache. The result was a drop from about $246 a month to near zero on delivery costs, because the app stopped paying for outbound traffic on every request. Another public case, Prisma, reported a 98% drop in distribution costs after moving downloads to R2.

Real-world caseWhat changedResult
Image-heavy siteS3 delivery moved to R2 plus cacheAbout $246/month fell to near zero
PrismaEngine downloads moved from S3 and CloudFront to R298% lower distribution cost
Media appPublic assets shifted to R2-backed deliveryLarge egress charges disappeared

Common integration mistakes to avoid

Most migration pain comes from small misses, not big failures. A broken endpoint can stop every request. Missing permissions can make uploads fail in one environment and pass in another. Forgotten cache rules can push far more traffic back to the bucket than you expected.

Request volume is the other trap. Cloudflare R2 removes the egress fee, but it does not make reads free forever. If your app sends the same object path through the bucket on every page load, your class b operations can climb faster than you planned.

Four simple line art icons in a row on light blue background: broken chain, padlock, clock, explosion.
MistakeWhat it breaksWhat to do instead
Broken endpointEvery read and write callConfirm the R2 endpoint in staging first
Missing permissionsUploads, deletes, or listingsUse a narrow token and test each action
Forgotten cache rulesRepeat fetches hit storage too oftenAdd edge caching before full cutover
Underestimated request volumeClass B operations rise fastModel reads as carefully as storage
Skipping rollback stepsYou lose a fast escape routeKeep the old bucket live until tests pass

Endpoint mismatches fail fast, cache misses fail quietly, and request volume is what keeps the bill climbing.

You also want to protect yourself from permission drift. Cloudflare’s S3-compatible path works well, but a token that is too broad is a risk, and one that is too narrow can break your deployment. Use the smallest access set that still lets your app read, write, and list what it needs.

Permission issueCommon symptomSafer fix
Read-only token in productionUploads fail after deploySeparate read and write tokens
Overbroad write tokenUnneeded access to other bucketsScope the token to one bucket
Missing list accessFolder views or sync jobs failAdd only the list permission you need

That is where phased testing pays off. Run a few uploads, fetch the same file several times, and compare the result with your old bucket. If your logs stay clean and cache hits stay high, the move is probably ready for production traffic.

TestWhat you should see
Upload a fileObject appears in R2 with the right name
Read the fileContent matches the source bucket
List objectsBucket paths look the same as before
Delete a test objectYour cleanup flow still works

You should also watch the bill shape, not just the app behavior. A larger total volume of data stored is easy to notice, but a smaller object set with heavy reads can still rack up storage and operations costs if you ignore cache behavior. That is why Cloudflare Workers and cache rules matter as much as the bucket itself.

Cost signalWhat it means
Storage grows, reads stay flatYou need to watch the storage line
Reads grow faster than storageCache more aggressively
Writes spike during deploysCheck retries and duplicate uploads
Bill rises with no storage changeClass B operations or cache misses are likely

If you want a simple decision guide, use this:

Integration pathBest fitMain riskGood for
Direct endpoint swapSimple S3-compatible appsMissing env changesFast migrations
Bulk copy with Super SlurperLarge bucketsOverlooking metadataBig one-time moves
Phased Sippy cutoverHigh-traffic appsExtra planningPublic files and downloads
Cache-first deliveryRead-heavy stacksBad cache rulesMedia, docs, and exports
ProsCons
Lower egress costs right awayYou still pay for storage fees and requests
Minimal app rewritesYou must test endpoints and auth carefully
Works well with a cloud environment already tied to CloudflareCache tuning takes time
Fits a s3-compatible api modelHeavy writes can still raise storage and operations cost

A clean integration usually looks dull in the best way. You create the bucket, move the files, switch the endpoint, and let the edge take the load off the origin. If that sequence stays intact, Cloudflare R2 gives you the cost relief you want without forcing a painful rewrite.

Spendbase savings and the hidden value of a Cloudflare discount

You get the biggest payoff from Cloudflare R2 when you look beyond the storage line. The hidden value is what happens to the rest of your bill, because a discount on Cloudflare services can shorten the time it takes to recover your migration cost. If you want to see how R2 fits beside the wider platform, what Cloudflare is used for gives you the bigger picture.

If you already buy Cloudflare, Spendbase offers up to 25% off Cloudflare plans. That does not change R2’s zero egress fees, but it does lower the cost of the services around it, which is where many teams still spend real money.

Cloudflare’s official R2 pricing page keeps the base rates clear, and the R2 pricing calculator helps you test your own volume before you move anything.

Cost lineWithout a discountWith Spendbase savingsWhy it matters
R2 storage$0.015 per GB-monthsameYour base storage stays low
Class A and Class B operationsPay per requestsameRequest-heavy apps still need watching
Cloudflare delivery and edge servicesFull priceUp to 25% lowerThis trims the recurring layer around R2
Egress$0$0The core R2 advantage stays intact
Line graph on light grid shows shallower line for no-discount R2 migration and steeper line for 25% discount reaching breakeven faster.

The point is simple. Egress Fees Cloudflare R2 removes the biggest surprise, and the discount trims the recurring spend that remains. For CTOs and CFOs, that means a cleaner payback story and less waiting for the budget to catch up.

How a discount changes the ROI on your move

The ROI shift is easier to see if you break it into four steps. First, you remove the old egress line. Next, you add R2 storage and operations. Then you apply the Cloudflare discount to the services you still use. Finally, you divide the migration cost by the new monthly savings.

That last step matters most. If your savings improve by even a few hundred dollars each month, payback comes sooner and the move feels less risky.

ROI stepWhat changesEffect on your payback
Remove egressYou stop paying for outbound trafficSavings jump first
Add R2 storage and opsYou still pay for storage and requestsNet cost stays predictable
Apply the Cloudflare discountYour edge, delivery, or worker spend dropsMonthly savings increase
Recalculate paybackMigration cost spreads over a larger monthly gainBreakeven arrives sooner

Here is a simple example you can model on your own numbers. If your move saves $1,200 a month before any discount, and your Cloudflare services still cost $400, a 25% discount gives you back another $100. That extra $100 shortens payback by a full month on a $1,200 migration.

Example migration profileMonthly savings before discountMonthly savings after discountWhat changes
Smaller app with steady downloads$400$500The discount matters, but the egress cut still does most of the work
Mid-size SaaS with public files$1,200$1,300The discount shaves time off the break-even date
High-volume media workflow$4,000$4,150The savings stack, because traffic is already expensive

The discount does not make R2 cheap by itself. It makes the cheaper architecture pay for itself faster.

Payback driverWhy it matters to you
Egress removedThis is the biggest source of savings
Operations kept lowRequest-heavy apps can still add cost
Discount on Cloudflare spendRecurring savings improve ROI
Migration effortThe lower the lift, the faster the payback

For teams that already run a s3-compatible stack, this is good news. You are usually changing endpoints and routing, not rewriting the app. That means the migration cost is often time, testing, and coordination, not a fresh build.

A quick sanity check helps you stay honest:

  1. Estimate your current egress bill.
  2. Estimate R2 storage and request costs.
  3. Add your Cloudflare spend after the discount.
  4. Compare the total against your current bill.
  5. Divide the migration effort by the net monthly savings.

That is the cleanest way to see whether cloud storage savings are enough on their own, or whether the discount is what pushes the move over the line.

Three stacked bars compare AWS S3, Cloudflare R2 base, and discounted R2 monthly costs up to $5000 for high-traffic SaaS workload.

When cost savings stack up the fastest

The fastest gains show up when your workload sends the same files out again and again. Media, public downloads, and high-traffic SaaS apps are the clearest examples, because they turn data transfer into a monthly tax. With R2, that tax disappears, and the discount on the rest of your Cloudflare stack adds a second layer of relief.

WorkloadWhy savings stack quicklyWhat to watch
Media librariesThe same images, video files, or audio clips get requested many timesCache misses
Public downloadsOne installer or PDF can be served thousands of timesRelease-day spikes
High-traffic SaaSSmall reads repeat all day across many usersClass B operations
Backups and restore pathsData moves in bursts during recoveryRetrieval fees on colder tiers

If you want a quick external benchmark, Cloudflare’s docs on R2 pricing and storage tiers show why the math tilts so hard toward read-heavy traffic. R2 keeps egress at zero, while request-heavy workloads still need a cache plan.

The best-fit jobs often look like this:

  • Media delivery for images, video, and audio.
  • Public files such as software builds, reports, and exports.
  • User-generated assets that get downloaded far more than they get rewritten.
  • Edge-served SaaS content where repeat reads are common.
Best-fit use caseWhy R2 helpsWhy the discount matters
Image-heavy product sitesRepeat reads drive the billA lower Cloudflare bill improves the margin on delivery
Software distributionLarge files get downloaded oftenThe savings stack on top of zero egress
Customer exportsReports and CSVs create burst trafficRequest costs stay visible, but transfer cost falls away
Global SaaS assetsUsers hit the same assets from many regionsThe recurring platform bill gets smaller too

The most convincing real-world pattern is still the same, lower distribution cost. Prisma reported a 98% drop in engine distribution costs after moving downloads to R2. One image-heavy site cut delivery cost from about $246 per month to near zero after shifting the serving path to R2 and edge caching. SYBO said it saved around $60,000 per month with Cloudflare caching and R2 in its delivery path.

Case studyWhat changedWhat you learn from it
PrismaEngine downloads moved off AWS S3 and CloudFrontHigh-volume delivery is where R2 saves the most
Image-heavy siteImage delivery moved from S3 to R2 plus cacheEven modest traffic can create a big egress bill
SYBOCloudflare caching plus R2 cut global delivery costAt scale, every saved byte matters

For these workloads, the hidden value of the discount is easy to miss. The egress savings do the heavy lifting, but the lower Cloudflare bill keeps the monthly run rate cleaner after the move. That helps when finance asks whether the architecture change is paying back fast enough.

Savings layerWhat it reducesWhy you care
Zero egress feesData egressRemoves the biggest cloud tax
Lower Cloudflare spendDelivery, edge, and related servicesImproves the ongoing margin
Fewer cache missesClass B operations and repeated readsKeeps object storage costs steady

You should still keep a close eye on request patterns. Class B operations are cheap, but they are not invisible. If you serve millions of small reads every day, the read side can still rise, even when egress stays free.

ProsCons
Lower monthly run rate after the moveSavings are smaller if the workload is cold
Faster payback when traffic is highRequest-heavy buckets still need careful caching
Easier budgeting because egress is goneThe discount only applies to Cloudflare spend
Better fit for repeat deliveryHeavy write churn still needs review
Signal to watchWhat it tells you
Storage stays flat but bills riseReads or delivery are driving cost
Downloads outpace uploadsR2 is likely a strong fit
Cloudflare spend is still materialA discount can improve ROI further
Cache hit rate is lowYou need more edge shielding

If your bill is dominated by data transfer fees, the discount is a useful accelerator, not the main event. The main event is still eliminating egress charges with R2. The discount just helps you reach the good part sooner, which is what matters when you want the move to show results in the next budget cycle.

Where Cloudflare R2 still has limits you should know about

Cloudflare R2 removes the pain of egress charges, and that alone makes it attractive for many teams. Still, the lowest bill is not always the best fit. If you need exact regional control, deeper enterprise controls, or more storage tiers, AWS or Azure can still be the cleaner choice.

Current pricing makes the gap easy to see, but not every decision is about price. Cloudflare R2 gives you simple object storage, free outbound delivery, and a friendly bill. Traditional clouds give you more knobs, more policies, and more ways to place data exactly where your team wants it.

Signal you should watchWhat it means for R2What AWS or Azure may give you
Exact data residency rulesR2 can feel too broad for strict placement needsDirect region choice and tighter residency control
Immutable retention rulesR2 is lighter on compliance featuresObject Lock, immutability, and stronger audit controls
Deep archive strategyR2 has fewer cold tiersMore storage classes and archive paths
Heavy internal integrationsR2 is simpler, but less connectedA broader native ecosystem around storage
Complex lifecycle automationR2 keeps things basicMore lifecycle, tiering, and event hooks

R2 is strong when outbound traffic hurts most. It is weaker when your storage policy is the main job.

When AWS or Azure may still be the better choice

You should still reach for AWS or Azure when storage is part of a larger enterprise system. If your compliance team wants immutable records, your security team wants deep governance, or your data must sit in a named region, the bigger clouds still make sense. That is where Cloudflare R2 can feel too plain.

A bank, insurer, or public company often needs more than cheap bytes. It needs retention rules, audit trails, and fine-grained control over who can touch data. In those cases, Amazon S3 or Azure Blob often wins because the platform is already built around that level of control. A useful comparison is the AWS S3 vs Cloudflare R2 object storage breakdown, which shows how much enterprise depth S3 still carries.

World map with dense blue AWS region clusters across continents and scattered orange Cloudflare R2 points, plus compliance and storage icons.

If your team runs deep on Microsoft tools, Azure can also stay the better fit. Azure Blob plugs into Entra ID, Microsoft 365, and Power BI with less friction. That matters when your storage choice is tied to identity, analytics, and governance, not just data transfer.

Here is the short version of when a traditional cloud provider still makes sense:

  • You need exact regional placement, not broad global distribution.
  • You need immutable storage, legal holds, or retention locks.
  • You rely on storage tiering with deep archive options.
  • You already use AWS Lambda, Athena, or similar native services.
  • You live inside Microsoft tooling and want Azure-native control.
SituationAWS or Azure fitWhy R2 is weaker here
Strict regional residencyStrongR2 gives fewer placement controls
Immutable compliance archivesStrongMissing deeper governance features
AWS-native data workflowsStrongNative integration is easier on S3
Microsoft-first enterprise stackStrongAzure Blob fits the ecosystem better
Cold archive with rare restoreStrongMore archive tiers can lower storage cost

A second limit is operational, not legal. If your app depends on tight event chains, advanced lifecycle rules, or multi-tier storage automation, R2’s simpler model can feel thin. That simplicity is a strength for many teams, but it is not the answer to every use case.

Enterprise needR2 behaviorS3 or Azure behavior
Object lockingLimitedMature support
Deep archiveBasicBroad archive choices
Event-driven workflowsNarrowerRicher native hooks
Storage tieringSimpleMore flexible
Region pinningLightMore explicit control

For a CTO or CFO, the question is not whether R2 is good. It is whether the missing controls matter more than the savings. If they do, Eliminating egress fees is helpful, but it does not replace the governance layer your company may already need.

The tradeoff between simplicity and breadth of features

R2 is easy to price because the model is simple. You pay for storage, you pay for requests, and egress is free. AWS and Azure give you more choices around storage class, lifecycle, and placement, which can lower cost in the right setup but make the bill harder to read.

That tradeoff is why many teams like cloudflare r2 for public assets and repeat downloads, then keep AWS or Azure for the messy parts of the stack. If you want a broader feature comparison, the Cloudflare R2 vs AWS S3 vs Azure Blob comparison is useful because it shows how quickly the bigger clouds add knobs.

Feature areaCloudflare R2AWS S3Azure Blob
Storage classes2 main optionsMany optionsSeveral options
Lifecycle rulesBasicAdvancedAdvanced
Region choiceLimited compared with hyperscalersVery strongVery strong
Native service hooksNarrowerBroadBroad
Archive depthLimitedDeepDeep

A simple model helps here. R2 cuts data out of storage cost because it removes the transfer line. AWS and Azure keep more ways to fine-tune storage costs, especially when data gets old or rarely used. That is why they still fit teams with complex policies better than a pure cost play.

Side-by-side icon stacks on gradient background: left AWS S3 with globe, badge, integration, tiers; right Cloudflare R2 with bucket, cache, workers, egress.

The simplicity also has a hidden cost. When you have fewer knobs, you can’t squeeze every workload into a cheaper niche. That is fine for media delivery, backups, and public assets. It is less ideal for compliance-heavy archives, high-change datasets, or internal platforms with strict policy rules.

Workload typeR2 fitWhy the limit matters
Public downloadsStrongFree egress is the main win
Media deliveryStrongReads dominate, not archive logic
Compliance archiveWeakYou may need stronger retention control
Internal analytics dataMixedNative warehouse integrations can matter more
High-write transactional storageMixedRequest patterns can matter more than storage price

The raw numbers also show the gap. R2 standard storage is about $0.015 per GB-month, Azure Blob is around $0.020, and S3 is about $0.023. That looks great until your workload needs a deeper archive plan, more precise region controls, or a broader compliance toolkit. Then the bigger clouds earn their higher bill.

Cost or feature questionR2 answerAWS/Azure answer
Do you want simple billing?YesLess simple
Do you want more storage tiers?NoYes
Do you want tighter governance?LimitedStrong
Do you want easy outbound cost control?YesNo, egress still applies
Do you want fewer moving parts?YesUsually no

There is another limit worth watching. Class B operations stay cheap, but they still add up if your app keeps fetching the same files. R2 makes the transfer line disappear, not the request line. A busy app can still rack up cost if you treat every page load like a fresh fetch.

Operational patternWhat happens on R2Why you should care
Frequent reads of the same fileClass B operations riseRequests still cost money
Many list callsClass A work growsMetadata churn adds overhead
Heavy writes to one objectThe bucket gets noisyRewrites deserve a second look
Cached delivery through CloudflareFewer bucket hitsLower total storage and operations cost

A real-world lesson appears in the opposite direction too. Teams that moved image delivery or download distribution to R2 did it because traffic was the expensive part. Prisma saw major distribution savings after moving downloads off S3. That worked because the workload was public, repetitive, and easy to cache. A regulated archive is a different shape entirely.

Good R2 fitBad R2 fit
Public image librariesImmutable legal records
Software downloadsDeep compliance archives
Backup restores with high outbound trafficRegion-locked enterprise data
Edge-served assetsStorage tied to audit workflows

For your team, the decision comes down to what you value more, control or simplicity. If you want the fewest surprises on outbound traffic, R2 stays compelling. If you want the widest set of storage tools, AWS and Azure still have the larger toolbox.

Pros of R2Cons of R2
Zero egress feesFewer storage tiers
Simple billingLess control over region placement
S3-compatible APISmaller enterprise feature set
Strong fit for public assetsNot built for deep archive complexity
Easy to explain to financeRequest volume still matters
Best if you needBetter choice
Lowest outbound costCloudflare R2
Deep archive and tieringAWS or Azure
Strong governance controlsAWS or Azure
Fewer moving partsCloudflare R2
Broad ecosystem integrationAWS or Azure

If you already use Cloudflare, Spendbase offers up to 25% off Cloudflare, which helps trim the rest of the bill while you decide whether R2 is the right fit.

The clean test is simple: if your storage needs are mostly about moving files cheaply, R2 stays strong. If your storage needs are about policy, residency, or deep archival control, AWS or Azure still belongs in the conversation.

img-bg
Save up to 30% on your stack

We can unlock discounts on 10,000+ tools you already use.

Conclusion

If your bill is shaped by outbound traffic, Cloudflare R2 is the cleanest place to cut it. The biggest win comes when egress fees are a large part of your monthly spend, because that is where R2 removes the cloud tax instead of trimming around the edges.

Before you move, measure your current data transfer, request counts, and storage mix. Then compare the savings against R2’s limits, like request volume, region needs, and colder archive use cases. If the math still favors you, the answer is clear.

Start small. Check one bucket, one workload, and one month of traffic, then test that workload in R2 first. If the bill drops without breaking your delivery path, you have your signal to move more data.

Speak to a SaaS Savings Expert

Talk to an Expert