The best S3 alternatives for cheap egress

Cloudflare R2 has no egress fees at all, which makes it the answer for most download-heavy workloads. Backblaze B2 is free through Bandwidth Alliance partners and cheaper to store. Bunny Storage wins when the CDN matters most, and Tigris is the best fit if you deploy on Fly.

Editorial judgement last reviewed

Which S3-compatible provider has the cheapest egress?

AWS charges roughly nine US cents per gigabyte to send you data you already paid to store. At ten terabytes a month that's about nine hundred dollars for the privilege of delivering your own files, and it is the single largest avoidable line item in most small infrastructure bills.

An entire category exists to attack that number. Some providers waive egress outright, some waive it up to a multiple of what you store, and some waive it only when the traffic flows through a partner network. The differences matter, because "free egress" means four different things across this roster.

Everything below draws on our S3-compatible storage comparison, which computes one standard scenario for every provider, 1 TB stored, 5 TB egress, 10 million requests a month, in both USD and AUD, so the numbers are actually comparable.

How we ranked these

We ranked on total cost for a download-heavy workload, then on the things that make a cheap provider usable.

Egress price, with the conditions attached. Free-with-an-asterisk is common. We record whether it's unconditional, capped at a multiple of stored data, or contingent on a partner CDN.

Storage price, because a provider with free egress and expensive storage loses on a large archive.

Operations pricing, which is where the cheap providers make their margin back. Class A operations, writes and lists, cost multiples of Class B on every platform here.

S3 API compatibility, measured against a fixed test suite rather than taken from a vendor page, because a cheap bucket your code can't talk to is not cheap.

Minimum retention and minimum billable object size, the two fields that quietly triple the bill for workloads with many small or short-lived objects.

The picks, ranked

  1. Cloudflare R2 logo

    Cloudflare R2

    Best overall, zero egress, no conditions

    Egress costs nothing. Not discounted, not capped, not conditional on using a particular CDN. You pay to store bytes and to make API calls, and downloads are free regardless of volume or destination. For any public read path, images, video, installers, model weights, a package registry, this converts a frightening variable cost into a boring fixed one.

    It's also the least work. Cloudflare's network serves the content, so you get global edge delivery without configuring a CDN, and R2Cloudflare R2 logo bindings let a Worker read an object with no HTTP request and no signed URL at all.

    Watch Class A operations. Writes and lists are the meter that runs, and a workload doing enormous numbers of small writes can find operations exceed storage. Also check current object lock support if you have a compliance retention requirement.

  2. Backblaze B2 logo

    Backblaze B2

    Cheapest storage, free egress via Cloudflare

    The lowest published price per terabyte stored among mainstream providers, with free egress up to a multiple of what you store and unlimited free egress to Bandwidth Alliance partners, Cloudflare among them.

    That combination is the cheapest possible arrangement for a large archive with meaningful download traffic: store in B2, serve through Cloudflare, pay nothing for transfer. It's two components rather than one, which is the trade.

    B2 also has the better compliance story of the two leaders, with object lock including compliance mode, the control that survives a compromised root credential, and increasingly a hard requirement in backup and regulated contexts.

    The gap for Australian teams is regions: B2 has no Australian region as of this review, so direct reads cross the Pacific. Put Cloudflare in front and the problem mostly disappears.

  3. Tigris

    Best for globally distributed reads

    Built as globally distributed object storage rather than a bucket in one region: objects are cached near where they're requested, so the read path is fast worldwide without you configuring anything. Egress pricing is aggressive and the S3 compatibility is good.

    The natural fit is applications deployed on Fly, where Tigris is the default storage integration and the two sit next to each other. It's also a genuinely good choice for any workload with users spread across continents, because the distribution is the product rather than a CDN you bolt on.

    Newer than the two above, so the operational track record is shorter. Verify durability commitments and support terms against your risk tolerance.

  4. Bunny Storage

    Best when the CDN is the point

    Storage designed to feed Bunny's CDN, with edge storage regions you pick explicitly and pricing that stays cheap through the delivery path as well as the bucket. If your problem is "serve a lot of media to a lot of people cheaply", the combination is one of the best-value options anywhere, including an Australian edge presence.

    The API is not a full S3 implementation, which is the main caveat: check your tooling before assuming a drop-in swap. This is a delivery platform with storage attached rather than an S3 replacement with a CDN attached, and it's excellent at what it's for.

  5. Wasabi logo

    Wasabi

    Predictable flat pricing, with conditions

    Flat per-terabyte storage with no egress charges, aimed squarely at teams who want one number to budget against. For steady, predictable workloads it's simple and cheap.

    Read the conditions carefully, because they're the whole product. Egress is free only up to your stored volume, download more than you store in a month and you're outside the fair-use policy. There's also a minimum retention period, which makes WasabiWasabi logo a poor fit for short-lived objects: delete something after a day and you're still billed for the full period.

    For long-term archive with modest, steady reads, that's fine. For a cache or a churning dataset, it's the wrong shape.

Work out your egress-to-storage ratio first

One number decides most of this. Divide your monthly egress by your stored bytes.

Below roughly 1x, you store far more than you serve, which describes backups, archives and media masters, storage price dominates and Backblaze B2Backblaze B2 logo wins on raw cost. Above roughly 5x, you serve far more than you store, which describes asset hosting, image delivery and downloads, egress dominates and R2Cloudflare R2 logo wins outright. In between, operations count and your existing stack decide it.

Then check the two costs that never appear in a headline. Minimum billable object size means a provider that bills every object as though it were 64 KB or 128 KB will charge you many times over for a bucket of thumbnails. Minimum retention period means a provider billing a 30- or 90-day floor per object will charge you for months of storage on data you deleted the next morning.

Between them, those two fields explain nearly every "why is my storage bill three times the estimate" story in this category. Both are recorded per provider on the storage hub.

Migrating is easier than the bill suggests

The mechanics are dull, which is good. Copy with rclone, verify checksums, dual-write for a window, cut reads over, decommission after a month.

Two details save you pain. Keep your object keys identical, so the migration reduces to an endpoint and a credential change and rolling back is changing them back. And use on-demand migration if the destination supports it, objects copy the first time they're requested, so you flip the read path immediately instead of waiting on a bulk copy of many terabytes.

The one real cost is getting data out of your current provider. A bulk copy out of S3 incurs standard egress, which on a multi-terabyte bucket is a genuine one-off expense, sometimes more than a year of the destination's storage. Check the current terms for transfers to Bandwidth Alliance partners before you start, and consider on-demand migration precisely to avoid paying for objects nobody ever requests.

Before you commit, run your existing integration tests against a bucket at the new provider. Most applications pass unchanged; the ones that don't usually fail on multipart uploads, ETag semantics or lifecycle rules, and it's much better to learn that in CI.

Frequently asked questions

Is Cloudflare R2 egress genuinely free?

Yes, unconditionally, no volume cap and no requirement to use a particular CDN. You pay for storage and operations, with Class A operations (writes and lists) being the ones that add up on write-heavy workloads.

What's the cheapest for pure archive storage?

Backblaze B2Backblaze B2 logo among the S3-compatible providers, on published price per terabyte. If the archive is genuinely cold and rarely read, AWS Glacier Deep Archive undercuts everything here, the storage rate difference is large enough to beat free egress.

Will my existing S3 code work?

Usually. Point the AWS SDK at the new endpoint and the common operations work everywhere on this list. Test multipart uploads, conditional requests, ETag handling on multipart objects, and lifecycle rules, that's where the gaps are.

What about latency from Australia?

R2Cloudflare R2 logo serves from Cloudflare's edge, which includes Sydney, Melbourne, Brisbane and Perth, so it's fast locally even without an Australian bucket. If you need genuine data residency rather than edge caching, see our Australian storage page for providers with actual Sydney regions.