A team storing 10 terabytes of video and serving 50 terabytes of downloads a month will pay roughly $150 on Cloudflare R2 and roughly $4,730 on Amazon S3 Standard, once egress is added in. That gap, not raw storage cost, is why so many engineering teams are re-running their cloud storage math in September 2026. Cloudflare R2 pricing has become a fixture in budget reviews at companies that used to default to AWS S3 without a second thought.
This comparison walks through storage rates, egress fees, request pricing, and real specs for Cloudflare R2, AWS S3, Azure Blob Storage, and Google Cloud Storage as they stand today. It pulls numbers from vendor pricing pages, independent cost breakdowns, and published benchmarks, then builds five real-world cost scenarios so you can see which platform wins for your workload rather than in the abstract.
Cloudflare R2, AWS S3, Azure Blob, and Google Cloud Storage at a Glance
All four services solve the same basic problem: store unstructured files (images, video, backups, logs, model weights) and serve them back over HTTP. They share an object-bucket-key model, and three of the four (R2, Azure, GCS) now offer some form of S3 API compatibility so existing tooling mostly works without a rewrite.
AWS S3 launched in 2006 and remains the default choice for teams already running compute on AWS, largely because same-region transfer between EC2 or Lambda and S3 carries no data transfer charge. Azure Blob Storage and Google Cloud Storage followed in 2010, each tied tightly to their respective compute and analytics stacks (Azure Functions and Synapse on one side, BigQuery and Vertex AI on the other). Cloudflare R2 is the newest entrant, launched in 2021 and reaching general availability in 2022, built specifically to remove the one cost that dominates storage bills at scale: egress.
The practical split in 2026 comes down to where your data lives and who reads it. If files get pulled by end users on the public internet, egress fees dominate the bill and Cloudflare R2 pricing usually wins outright. If files stay inside one cloud’s network and get processed by that cloud’s compute services, the picture flips and native storage (S3, Blob, or GCS) often costs less once you count the friction of running two vendors.
It also matters that these four services are not equally mature at S3 compatibility. Cloudflare built R2’s API as a near-direct mirror of S3’s, down to supporting multipart uploads, presigned URLs, and conditional writes, which is why migration tools built for S3 tend to work against R2 with minimal changes. Azure and Google, by contrast, expose their own native APIs first and treat S3 interoperability as a secondary layer handled by separate compatibility tools or third-party connectors, which adds a step most R2 migrations skip entirely. On Cloudflare’s own comparison page, this API-level compatibility is positioned as the main reason a migration from S3 can happen without a rewrite of the storage layer.
Storage Pricing Compared: Per-GB Costs in September 2026
Raw storage cost is the smallest line item for most workloads, but it sets the floor. Cloudflare R2 charges a flat $0.015 per GB per month for Standard storage, with no regional pricing tiers to track. AWS S3 Standard starts at $0.023 per GB for the first 50 TB in US regions, stepping down to $0.022 for the next 450 TB and $0.021 above 500 TB. That makes R2 roughly 35% cheaper than S3 Standard on storage alone before egress enters the picture.
Azure Blob Storage and Google Cloud Storage sit close to each other in the middle of the pack. Azure’s Hot tier with locally redundant storage runs in roughly the same $0.018 to $0.02 per GB band as GCS Standard in a US region, though both vendors publish region-specific rate cards rather than one flat global number, so exact figures should be checked against each provider’s live calculator before you commit budget.
| Provider | Storage class | Price per GB/month | Free tier storage |
|---|---|---|---|
| Cloudflare R2 | Standard | $0.015 | 10 GB/month |
| Cloudflare R2 | Infrequent Access | $0.01 | Shares 10 GB tier |
| AWS S3 | Standard (first 50 TB) | $0.023 | 5 GB (12 months) |
| AWS S3 | Standard-IA | $0.0125 | None |
| AWS S3 | Glacier Instant Retrieval | $0.004 | None |
| AWS S3 | Glacier Deep Archive | $0.00099 | None |
| Azure Blob Storage | Hot tier, LRS (approx.) | ~$0.018–$0.02 | 5 GB (12-month trial) |
| Google Cloud Storage | Standard, US region (approx.) | ~$0.02 | 5 GB/month, always free |
Cold-tier pricing is where AWS still pulls ahead for pure archival. S3 Glacier Deep Archive at $0.00099 per GB per month costs less than a tenth of a cent, undercutting R2’s Infrequent Access tier for data you rarely, if ever, touch again. Cloudflare R2 pricing simply was not built to compete at the deep-freeze end of the market, and it shows.
Full rate cards for all four providers are published and update periodically, so treat the numbers above as a September 2026 snapshot rather than a permanent figure. Cloudflare’s R2 pricing documentation and AWS’s S3 pricing page are both the authoritative source if a specific number here needs to be re-checked before a purchasing decision, since regional variation and periodic rate adjustments can shift the exact cents-per-GB figure by a small amount even when the overall competitive picture stays the same.
Egress Fees: Where the Real Bill Comes From
Storage cost rarely decides a cloud storage bill. Egress does. AWS S3 charges $0.09 per GB for the first 10 TB of monthly data transfer out to the public internet, dropping to $0.085 for the next 40 TB, $0.06 for the next 100 TB, and $0.03 for the next 350 TB. For any workload that regularly serves files to end users, those charges compound fast.
Cloudflare R2 charges $0 for egress, at every volume, with no tiers to track. Cloudflare markets this directly on its own comparison page, stating plainly that R2 provides “zero-cost egress for stored objects,” a policy choice that has become a major driver of R2 adoption according to independent teardown blogs like Pump.co’s cost analysis.
Azure Blob Storage and Google Cloud Storage both follow AWS’s stepped-tier model rather than R2’s flat-zero approach. Azure’s outbound transfer pricing lands in a similar $0.08 to $0.12 per GB band for the first tier, region dependent. Google Cloud Storage tends to run at the higher end of that range, close to $0.12 per GB for standard internet egress from a US multi-region bucket, which makes it the most expensive of the four for bandwidth-heavy public delivery.
| Provider | Egress to internet | Structure |
|---|---|---|
| Cloudflare R2 | $0.00 | Flat, all volumes |
| AWS S3 | $0.09 → $0.03 | Stepped, 4 tiers |
| Azure Blob Storage | ~$0.08–$0.12 (approx.) | Stepped, region-dependent |
| Google Cloud Storage | ~$0.12 (approx.) | Stepped, region-dependent |
The exception that matters: none of the big three charge for transfer that stays inside their own network. Moving data from S3 to an EC2 instance in the same region, or from GCS to a Compute Engine VM, typically costs nothing. That’s the core trade-off buyers weigh, R2’s zero egress everywhere against S3’s zero egress only within AWS.
Egress pricing exists in the first place because moving data off a provider’s network was, historically, the most expensive part of running a data center at scale, and hyperscalers priced it to recover that cost while also discouraging customers from splitting workloads across clouds. Cloudflare’s business model looks different: its core product has always been routing traffic, not selling compute, so giving away egress on R2 doesn’t cut against its main revenue line the way it would for AWS, Azure, or Google. That structural difference, more than any short-term pricing decision, explains why R2’s zero-egress stance has held steady since launch rather than being walked back as a limited-time offer.
Request and Operation Pricing: Class A, Class B, PUT, and GET
Every read and write against object storage costs a fraction of a cent, but at millions of requests a month, those fractions add up. Cloudflare groups operations into Class A (writes, lists, and metadata-heavy calls) and Class B (reads). Standard-tier Class A operations cost $4.50 per million, and Class B reads cost $0.36 per million. Infrequent Access pricing roughly doubles both figures, at $9.00 per million for Class A and $0.90 per million for Class B, plus a $0.01 per GB retrieval charge.
AWS S3 prices requests per 1,000 rather than per million, but the math lands close to R2’s Standard tier. PUT, COPY, POST, and LIST requests cost $0.005 per 1,000, which works out to $5.00 per million, about 11% more than R2’s Class A rate. GET requests cost $0.0004 per 1,000, or $0.40 per million, again slightly above R2’s $0.36 Class B rate. Google Cloud Storage uses the same Class A and Class B naming as R2 and prices Class A operations at roughly $0.05 per 10,000 and Class B at roughly $0.004 per 10,000, which converts to about $5.00 and $0.40 per million respectively, putting GCS request pricing almost exactly in line with S3.
| Provider | Write ops (per million) | Read ops (per million) |
|---|---|---|
| Cloudflare R2 Standard | $4.50 | $0.36 |
| Cloudflare R2 Infrequent Access | $9.00 | $0.90 |
| AWS S3 Standard | $5.00 | $0.40 |
| Google Cloud Storage Standard (approx.) | ~$5.00 | ~$0.40 |
| Azure Blob Storage | Priced per 10,000 ops, region-dependent | Lower than write ops |
Request pricing rarely decides which platform wins. Even a workload doing 50 million GET requests a month only racks up $18 to $20 on any of the four services. Storage and egress remain the two line items worth optimizing for.
A concrete example makes the gap easier to picture. A photo-sharing app storing 500,000 images at roughly 4 MB each holds about 2 TB of data, generating 500,000 Class A write requests during the initial upload and, say, 20 million Class B read requests a month as users scroll through feeds. On R2, that works out to $30 in storage, about $2.25 in write requests, and $7.20 in read requests, for a monthly total under $40 before egress even enters the picture, and egress stays at $0 regardless of how viral the app gets. Run the same numbers on S3 and the storage and request costs land in a similar range, but a single month of moderate public traffic, say 5 TB served to users, adds roughly $450 in egress charges on top. The request-pricing gap between providers is real but small. The egress gap is where budgets actually break.
Full Specs Comparison: Features, Limits, and API Compatibility
Price is only half the decision. The table below lines up the operational details that determine whether a migration is a weekend project or a multi-quarter effort.
| Feature | Cloudflare R2 | AWS S3 | Azure Blob Storage | Google Cloud Storage |
|---|---|---|---|---|
| Launch year | 2021 (GA 2022) | 2006 | 2010 | 2010 |
| Standard storage, per GB/month | $0.015 | $0.023 | ~$0.018–$0.02 | ~$0.02 |
| Public egress fee | $0 | Up to $0.09/GB | ~$0.08–$0.12/GB | ~$0.12/GB |
| Free tier storage | 10 GB | 5 GB (12 mo.) | 5 GB (trial) | 5 GB, ongoing |
| S3 API compatibility | Yes, native | Native (origin) | No (native Azure API) | No (native GCS API) |
| Storage tiers/classes | Standard, Infrequent Access | Standard, IA, One Zone-IA, 3 Glacier tiers | Hot, Cool, Cold, Archive | Standard, Nearline, Coldline, Archive |
| Native edge/CDN integration | Yes, Cloudflare network | No, needs CloudFront | No, needs Azure Front Door | No, needs Cloud CDN |
| Encryption at rest | Default, AES-256 | Default, AES-256 | Default, AES-256 | Default, AES-256 |
| Object versioning | Yes | Yes | Yes | Yes |
| Lifecycle management | Yes | Yes | Yes | Yes |
| Built-in migration tool | Super Slurper | DataSync, Transfer Family | AzCopy | Storage Transfer Service |
| Max single object size | 5 TB (multipart) | 5 TB (multipart) | ~4.75 TB (block blob) | 5 TB |
| Primary console | Cloudflare dashboard | AWS Console | Azure Portal | Google Cloud Console |
Two rows matter more than the rest for anyone weighing Cloudflare R2 pricing against the alternatives. First, native edge integration means R2 objects can be served straight through Cloudflare’s network without a separate CDN bill layered on top, something S3, Blob Storage, and GCS all require as a bolt-on. Second, S3 API compatibility means most existing S3 SDKs, CLI tools, and libraries point at R2 with a changed endpoint and a new set of credentials, not a rewrite.
Benchmarks and Cost Scenarios From Independent Testing
Vendor pricing pages describe a rate card. They don’t describe what a real workload actually costs once traffic patterns get messy. Three independent cost breakdowns published in 2025 and 2026 help fill that gap.
Cost benchmark: high-traffic public content
Vantage’s storage cost breakdown modeled an image-hosting platform similar to Imgur or Flickr, with heavy read traffic and modest storage. In that scenario, R2 came out roughly 99% cheaper than S3, driven almost entirely by the egress gap rather than the storage rate. Pump.co ran a similar test for a media streaming platform storing 1 TB and serving 10 TB of downloads a month, and found AWS S3 landing near $1,050 a month against roughly $15 a month for the equivalent R2 setup, a difference of about 98%.
Cost benchmark: cold, low-traffic archives
The same Vantage analysis modeled a second scenario built around a document storage app similar to Box, with data written once and rarely read back. Here the result flipped: S3 came out roughly 73% cheaper than R2, because S3’s Glacier tiers price cold storage far below anything R2 currently offers. Pump.co reached a comparable conclusion for archive-heavy workloads, estimating 15% to 33% savings on S3’s cold tiers versus a straight R2 comparison.
Cloudflare’s own comparison materials avoid publishing head-to-head benchmark numbers, instead pointing prospective customers to a pricing calculator and emphasizing predictable, flat billing as the core pitch rather than a specific percentage saved. That’s a reasonable stance for a vendor to take, but it means the independent third-party breakdowns from Vantage and Pump.co remain the most concrete public benchmarks available for the R2-versus-S3 decision as of this comparison’s publication date, September 10, 2026.
Worth flagging: neither Vantage nor Pump.co published raw latency or throughput numbers alongside their cost models, and no single 2025 or 2026 report surfaced a rigorous, apples-to-apples latency benchmark across all four providers using identical test conditions. Anecdotal developer write-ups describe R2 performance as close to S3 for most workloads when accessed through Cloudflare’s edge network, with the caveat that raw origin-to-origin latency in synthetic tests can vary by region and by how close a given data center sits to each provider’s nearest point of presence. If your workload is latency-sensitive rather than cost-sensitive, run your own regional latency test against real endpoints before committing, since published cost benchmarks don’t substitute for that kind of measurement.
Five Real-World Pricing Examples
Rate cards only mean something once applied to an actual workload. Here are five common patterns and how the math plays out under September 2026 pricing.
- Media streaming or download service: 1 TB stored, 10 TB served monthly. AWS S3 lands near $1,050/month once egress is included, while Cloudflare R2 lands near $15/month, per Pump.co’s published breakdown.
- Image-hosting platform (Imgur/Flickr-style): heavy read volume, modest storage footprint. R2 comes out roughly 99% cheaper than S3, per Vantage’s modeled scenario, almost entirely because of egress.
- Enterprise document archive (Box-style): data written once, rarely read. S3’s Glacier tiers make it roughly 73% cheaper than R2 in this pattern, since cold storage, not egress, drives the bill.
- SaaS company with 10 TB stored and 50 TB monthly egress: R2 runs around $150/month for storage with no egress charge. S3 Standard runs around $230/month in storage plus roughly $4,500 in egress, for a total near $4,730/month.
- AWS-native application serving files only to internal EC2 workloads: because same-region transfer between EC2 and S3 carries no egress charge, S3 can match or beat R2 here despite R2’s lower storage rate. R2 traffic still has to cross the public internet to reach AWS compute, which erases its main advantage in this specific pattern.
A sixth pattern worth calling out separately: a mobile game studio pushing patch downloads to players worldwide. Patch files are large, read-heavy, and served almost entirely to devices outside any cloud provider’s network, which makes this close to a best-case scenario for R2. A 5 GB patch downloaded 200,000 times in a launch week works out to roughly 1 petabyte of egress. On AWS S3’s tiered schedule that volume lands well into the $0.05 to $0.07/GB range, still totaling tens of thousands of dollars for a single week. On R2, the same week costs $0 in egress, with only the underlying storage and request volume to pay for.
The pattern across all five: egress volume, not storage volume, decides the winner. Any workload where files leave the cloud provider’s network to reach end users tends to favor Cloudflare R2 pricing. Any workload where data stays inside one provider’s compute environment tends to favor that provider’s native storage.
Cloudflare R2 Pros and Cons
Cloudflare R2’s biggest strength is also its simplest: zero egress fees at every volume tier, with no calculator required to figure out what a traffic spike will cost. Add S3 API compatibility and a free tier that covers 10 GB of storage, 1 million Class A operations, and 10 million Class B operations a month, and R2 becomes an easy default for public-facing file delivery.
- Pro: $0 egress at any volume, the single biggest lever for public content delivery.
- Pro: S3-compatible API, so most existing SDKs and CLI tools work with a changed endpoint.
- Pro: Native integration with Cloudflare’s edge network removes the need for a separate CDN.
- Con: No deep-archive tier comparable to S3 Glacier Deep Archive, so long-term cold storage costs more.
- Con: Smaller ecosystem of third-party tools and integrations compared to a service that has been the default since 2006.
- Con: Fewer regional storage options than AWS, since Cloudflare optimizes for its own edge network rather than customer-chosen regions.
The typical R2 customer profile that shows up across independent write-ups is a company shipping user-generated content, media, or software downloads at meaningful scale, where a single egress bill used to be the largest line item on the AWS invoice. Once that bill drops to zero, storage and request costs become predictable enough to forecast a quarter out without padding for traffic spikes, which matters as much to a finance team as it does to an engineering team.
AWS S3 Pros and Cons
S3’s strength is depth. Two decades in the market means every storage class imaginable, from Standard down to Glacier Deep Archive at under a tenth of a cent per GB, plus the deepest bench of third-party integrations, compliance certifications, and internal AWS tooling of any object store on this list.
- Pro: Best-in-class cold storage pricing via Glacier tiers, down to $0.00099/GB for Deep Archive.
- Pro: Free egress to other AWS services in the same region, a real advantage for AWS-native workloads.
- Pro: Largest third-party ecosystem of any object storage service, from backup tools to data pipelines.
- Con: Public internet egress starts at $0.09/GB, which turns high-traffic public delivery into an expensive line item fast.
- Con: Pricing structure has more tiers and exceptions to track than R2’s flat model.
- Con: Request pricing runs slightly above R2’s Standard-tier rate on both writes and reads.
S3 still makes sense as a default for teams that haven’t hit the traffic volume where egress starts to hurt, or whose compute already runs on AWS. The mistake is defaulting to S3 by habit for a public-facing, high-egress workload without running the comparison at all, since that’s exactly the pattern where the gap to R2 gets largest.
Azure Blob Storage and Google Cloud Storage: Where They Fit
Azure Blob Storage rarely wins a pricing comparison against R2 or S3 in isolation, but that’s not really the decision most Azure customers are making. Blob Storage’s real value shows up when it sits next to Azure Functions, Azure AD-based access control, and Synapse Analytics inside a single billing and identity boundary. For a team already standardized on Microsoft’s stack, the storage rate is a rounding error next to the cost of managing a second vendor’s IAM system.
Google Cloud Storage follows the same logic on the GCP side, with one added wrinkle: its egress pricing, at roughly $0.12/GB, runs above even AWS S3’s headline rate, making it the most expensive of the four for public-facing delivery. Where GCS earns its keep is inside Google’s own ecosystem, feeding BigQuery, Vertex AI, and Dataflow pipelines without ever touching the public internet, and therefore never triggering an egress charge at all.
Both platforms also offer archive tiers, Azure Archive and GCS Coldline/Archive, that compete reasonably well against S3 Glacier for teams already committed to that ecosystem. Neither is a serious contender for a team evaluating object storage from a blank slate purely on public-delivery cost, but both remain sound choices for teams whose compute already lives there.
Full current pricing for both platforms is published on Azure’s Blob Storage pricing page and Google Cloud’s storage pricing page, and both calculators let you plug in your own storage and egress volumes for a region-specific quote rather than relying on the approximate US-region figures used throughout this comparison. Given that Azure and Google both publish region-by-region rate cards rather than one global number, running your actual numbers through the official calculator before signing a contract is worth the ten minutes it takes.
Best Use Cases: Which Storage Service Fits Your Workload
Matching workload to platform matters more than chasing the lowest headline rate. Here’s how the four typically sort out in practice.
- High-traffic public assets (images, video, app downloads, game patches): Cloudflare R2, because zero egress removes the biggest variable cost at any scale.
- AWS-native applications reading and writing inside the same region: AWS S3, since same-region transfer to EC2 or Lambda carries no egress charge, neutralizing R2’s main advantage.
- Long-term compliance and disaster-recovery archives (7+ year retention): AWS S3 Glacier Deep Archive or Azure Archive tier, both priced well below anything R2 or GCS offer for cold data.
- Microsoft-centric enterprises running Azure AD, Azure Functions, or Synapse: Azure Blob Storage, for the identity and billing consolidation more than the raw rate.
- ML training data and analytics pipelines feeding BigQuery or Vertex AI: Google Cloud Storage, to keep transfer inside Google’s network and avoid egress entirely.
- Startups and small teams optimizing for predictable burn rate: Cloudflare R2, since flat pricing with no egress line item makes forecasting simpler at any traffic level.
None of these recommendations are exclusive. Plenty of teams run a hybrid setup: R2 or S3 for public delivery, Glacier or Azure Archive for compliance retention, and GCS or S3 sitting quietly behind an analytics pipeline that never touches the public internet. The multi-provider approach adds operational overhead (a second dashboard, a second set of credentials, a second bill to reconcile) but for teams at meaningful scale, the egress savings on the public-facing slice of the workload usually outweigh that overhead within the first month.
Migration Guide: Moving From S3 to Cloudflare R2
Because R2 exposes an S3-compatible API, most migrations don’t require touching application code beyond swapping an endpoint and a credential set. The steps below cover a typical move using rclone, a common open-source tool for syncing between S3-compatible stores, alongside Cloudflare’s own Super Slurper tool for larger one-time transfers.
Step 1: Create the R2 bucket and API token
Create a bucket in the Cloudflare dashboard, then generate an R2 API token scoped to that bucket. Note the account ID and the S3-compatible endpoint, formatted as https://ACCOUNT_ID.r2.cloudflarestorage.com.
# Configure rclone with both S3 and R2 remotes
rclone config create s3-source s3 \
provider=AWS \
access_key_id=YOUR_AWS_KEY \
secret_access_key=YOUR_AWS_SECRET \
region=us-east-1
rclone config create r2-dest s3 \
provider=Cloudflare \
access_key_id=YOUR_R2_ACCESS_KEY \
secret_access_key=YOUR_R2_SECRET_KEY \
endpoint=https://ACCOUNT_ID.r2.cloudflarestorage.com
# Dry run first to confirm object count and size
rclone sync s3-source:my-bucket r2-dest:my-bucket --dry-run
# Run the actual transfer with checksums enabled
rclone sync s3-source:my-bucket r2-dest:my-bucket --checksum --transfers 32
Step 2: Verify, then cut over
Run a checksum comparison between source and destination bucket before touching production traffic. Once object counts and hashes match, update application configuration to point at the R2 endpoint, keep the S3 bucket live in read-only mode for a rollback window of a week or two, then decommission it once R2 has handled production traffic without incident.
For transfers in the multi-terabyte range, Cloudflare’s Super Slurper tool handles the bulk copy server-side, which avoids paying S3 egress on the way out since Cloudflare pulls the data directly rather than routing it through a local machine or EC2 instance.
Budget one more week beyond the technical transfer itself for validation. Spot-check a random sample of migrated objects for content-type headers and metadata, since some S3-compatible tools silently drop custom metadata fields during a bulk copy if they aren’t explicitly mapped. Teams that skip this step sometimes discover weeks later that cache-control headers or content-disposition metadata didn’t carry over, which is a much harder bug to trace after the source bucket has already been decommissioned.
Market Growth and Where Object Storage Is Headed in 2026
The pricing competition between these four platforms is happening against a backdrop of real growth. According to MarketsandMarkets research, the overall cloud storage market is projected to grow from $172.97 billion in 2026 to $380.15 billion by 2031, a 17.1% compound annual growth rate. Object storage specifically is growing faster than the broader category. SkyQuest’s market analysis values the global cloud object storage segment at $10.23 billion in 2025, projected to reach $25.51 billion by 2033 at a 12.1% CAGR, with object storage cited as one of the fastest-growing storage formats within the wider cloud storage category.
AI training data and model checkpoint storage are a meaningful part of that growth curve. Large training runs generate terabytes of intermediate checkpoints that need to move between compute clusters and long-term storage, and egress costs on that traffic pattern can get expensive fast if the data has to leave a single cloud’s network. That’s pushed some AI infrastructure teams toward R2 for staging and distribution layers, while keeping primary training data in whichever cloud hosts the GPU cluster.
Competitive pressure from R2’s zero-egress model hasn’t produced a matching price cut from AWS, Azure, or Google as of this comparison’s publish date. Public pricing pages from all three hyperscalers still show the same stepped egress structure they’ve used for years, suggesting that, for now, the egress gap between Cloudflare R2 pricing and the big three remains a durable, structural advantage rather than a temporary promotion.
That said, don’t mistake a stable rate card for a static market. All four vendors adjust pricing on individual line items, add storage tiers, or expand free-tier limits several times a year, usually without a major announcement. Bookmark the official pricing pages rather than a comparison article, this one included, for anything approaching a purchasing decision above a few hundred dollars a month, and re-run the numbers on your actual traffic pattern any time your workload’s read/write or public/internal ratio shifts meaningfully.
The Verdict: Which Object Storage Service Wins in 2026
There’s no single winner here, and any comparison claiming otherwise is oversimplifying. The data points to a workload-driven answer rather than a platform-driven one.
| Category | Winner | Why |
|---|---|---|
| Public content delivery | Cloudflare R2 | $0 egress at any volume |
| Cold/archival storage | AWS S3 | Glacier Deep Archive at $0.00099/GB |
| AWS-native workloads | AWS S3 | Free same-region transfer to EC2/Lambda |
| Microsoft-stack shops | Azure Blob Storage | Identity and billing consolidation |
| GCP/ML pipelines | Google Cloud Storage | No egress inside Google’s network |
| Predictable small-team budgets | Cloudflare R2 | Flat rate, no egress line item to forecast |
For teams building anything that serves files to end users over the public internet, Cloudflare R2 pricing is hard to beat on the math alone, with independent breakdowns showing savings in the 98% to 99% range for read-heavy, high-egress workloads. For teams whose data stays inside one cloud’s compute environment, or whose retention requirements skew toward deep, rarely-accessed archives, the native storage service from that same cloud, most often AWS S3, still wins on total cost. Run your own numbers against your actual traffic pattern before committing either way. The gap between scenarios in this comparison, from R2 saving 99% to S3 saving 73%, is wide enough that guessing isn’t worth the risk.
Frequently Asked Questions
Is Cloudflare R2 actually free?
No. R2 charges for storage ($0.015/GB/month for Standard) and for Class A and Class B operations. What’s free is egress, meaning data transferred out to the public internet costs $0 regardless of volume.
Does AWS S3 still charge for egress in 2026?
Yes. S3 charges $0.09/GB for the first 10 TB of monthly public internet egress, stepping down to $0.085, $0.07, and $0.05/GB at higher volume tiers. Transfer to other AWS services in the same region remains free.
Can I use my existing S3 tools with Cloudflare R2?
In most cases, yes. R2 exposes an S3-compatible API, so SDKs, CLI tools, and libraries built for S3 typically work against R2 by changing the endpoint URL and credentials, without a code rewrite.
Which is cheaper, R2 or S3, for a small project?
For a small project with public-facing files, R2 is almost always cheaper because of zero egress fees. For a small project with minimal public traffic and heavy internal AWS usage, S3 can be just as cheap or cheaper.
Does Azure Blob Storage charge egress fees?
Yes. Azure follows a stepped egress pricing model similar to AWS, generally landing in the $0.08 to $0.12/GB range for the first pricing tier, though exact rates vary by region and should be checked against Azure’s live pricing calculator.
What is the difference between R2 Class A and Class B operations?
Class A covers writes, lists, and metadata-heavy calls like PUT and POST, priced at $4.50 per million on Standard storage. Class B covers reads like GET, priced at $0.36 per million, roughly 12 times cheaper than Class A.
Is Google Cloud Storage cheaper than AWS S3?
Storage pricing is close between the two, with GCS running slightly below S3’s headline rate in most US regions. Egress tells a different story: GCS’s roughly $0.12/GB rate runs above S3’s $0.09/GB starting tier, making GCS more expensive for public-facing delivery.
How do I migrate large amounts of data from S3 to R2?
For datasets under a few terabytes, rclone sync with an S3 source and R2 destination configured as S3-compatible remotes works well. For larger transfers, Cloudflare’s Super Slurper tool performs a server-side copy directly from S3, avoiding local bandwidth limits and S3 egress charges on the outbound leg.



