COMPARISON GUIDE

Cloud Storage API Comparison 2026

Compare 7 object storage providers side-by-side. Storage pricing, egress fees, S3 compatibility, free tiers, and code examples. Find the cheapest S3 alternative for your workload.

Last updated: March 2026 | 7 providers compared

How Object Storage Works

Object storage lets you store and retrieve files (objects) over HTTP. Every major provider implements the S3 API, making it easy to switch between them.

1
Create Bucket
2
Upload Object
PUT /bucket/key
3
Store & Replicate
Durability: 11 9s
4
Retrieve Object
GET /bucket/key
5
Serve via CDN
or Direct Download

What Developers Use Object Storage For

Object storage replaces local filesystems and FTP with infinitely scalable, highly durable HTTP-accessible storage.

📷
Image & media hosting
🗂
Backups & archives
🌐
Static site hosting
📊
Data lake & analytics
🎥
Video & streaming
💻
CI/CD build artifacts

Storage Cost per GB/Month

Raw storage pricing across providers. Backblaze B2 is 4x cheaper than S3 Standard per gigabyte.

Backblaze B2
$0.006/GB
$6/TB — cheapest
Wasabi
$0.007/GB
$6.99/TB — 1 TB min
Cloudflare R2
$0.015/GB
$0 egress 🌟
GCS
$0.020/GB
$20/TB standard
DO Spaces
$0.020/GB
$5/mo base w/ CDN
Amazon S3
$0.023/GB
$23/TB — the standard
MinIO
$0/GB
Self-hosted (OSS)

Feature Comparison

Side-by-side feature matrix across all 7 object storage providers.

FeatureAmazon S3Cloudflare R2Backblaze B2WasabiGCSDO SpacesMinIO
Storage/GB/mo$0.023$0.015$0.006$0.007$0.020$0.020Self-hosted
Egress/GB$0.09$0.00$0.01*$0.00**$0.12$0.01Self-hosted
PUT/1K requests$0.005$0.0045~$0.004$0.00$0.005IncludedSelf-hosted
GET/1K requests$0.0004$0.00036~$0.0004$0.00$0.0004IncludedSelf-hosted
Free Tier5 GB (12 mo)10 GB forever10 GB forever1 TB / 30 days5 GB foreverNone ($5/mo)OSS free
S3 CompatibleNativeFullFullFullInterop APIFullFull
Storage Classes6 (Standard, IA, Glacier...)2 (Standard, IA)2 (Standard, HiPerf)14 (Standard, Nearline...)2 (Standard, Cold)Configurable
Object Versioning
Object Lock (WORM)
Lifecycle Rules
Encryption at RestSSE-S3/KMS/CAES-256SSE-B2/CAES-256GKMS/CMEKAES-256SSE-S3/KMS/C
CDN IntegrationCloudFrontBuilt-in (CF network)Partner (CF, Fastly)NoneCloud CDNBuilt-in CDNSelf-configured
Regions30+Auto (global hints)2 (US, EU)16+35+7Self-hosted
Max Object Size5 TB5 TB (multipart)10 GB (S3), 5 TB (native)5 TB5 TB5 GB50 TB

* B2 egress free up to 3x stored data and free to CDN partners (Cloudflare, Fastly)   ** Wasabi egress free within fair-use policy (download ≤ stored volume)

Provider Deep Dives

Detailed breakdown of each provider with pros, cons, and best use cases.

☁ Amazon S3

The industry standard. Most features, most integrations, highest egress costs.
$0.023/GB/mo $0.09/GB egress 30+ regions 6 storage classes
  • Most feature-complete storage platform
  • 6 storage tiers (Standard to Deep Archive)
  • Intelligent-Tiering auto-optimizes costs
  • Ecosystem: Lambda triggers, Athena, Transfer Acceleration
  • Expensive egress ($0.09/GB)
  • Complex pricing with many line items
  • Free tier expires after 12 months

☁ Cloudflare R2 Zero Egress

S3-compatible storage with zero egress fees. Built on Cloudflare's global network.
$0.015/GB/mo $0.00/GB egress 10 GB free forever Global edge
  • Truly zero egress fees — no conditions
  • Full S3 API compatibility
  • 10 GB free tier (permanent)
  • Workers integration for serverless compute
  • No object versioning yet
  • No Object Lock/WORM compliance
  • Fewer regions than AWS/GCP

🔥 Backblaze B2 Cheapest Storage

Cheapest per-GB storage. Free egress to CDN partners. S3-compatible.
$0.006/GB/mo $0.01/GB egress 10 GB free forever 2 regions
  • 4x cheaper than S3 per gigabyte
  • Free egress to Cloudflare, Fastly, bunny.net
  • Object Lock (WORM compliance)
  • 10 GB free tier, no expiration
  • Only 2 regions (US West, EU Central)
  • Max 10 GB per object via S3 API
  • Smaller ecosystem than AWS/GCP

📦 Wasabi No API Fees

Flat-rate storage with no request or egress fees. 1 TB minimum billing.
$6.99/TB/mo $0.00 request fees $0.00 egress* 16+ regions
  • No request or egress fees
  • Predictable flat-rate pricing
  • 16+ regions worldwide
  • Object Lock, versioning, 11 nines durability
  • 1 TB minimum billing ($6.99/mo even for 1 GB)
  • 90-day minimum retention per object
  • Fair-use egress limit (download ≤ stored volume)

☁ Google Cloud Storage

Tight BigQuery/Vertex AI integration. 4 storage classes. Always-free 5 GB tier.
$0.020/GB/mo $0.12/GB egress 5 GB free forever 35+ regions
  • Always Free 5 GB (never expires)
  • 4 storage classes with auto-tiering
  • Deep GCP integration (BigQuery, Vertex AI)
  • Dual-region with Turbo Replication
  • Most expensive egress ($0.12/GB)
  • S3 API via interop mode (not native)
  • Complex IAM and billing

📡 DigitalOcean Spaces

Simple $5/mo plan with built-in CDN. 250 GB storage + 1 TB transfer included.
$5/mo base 250 GB included 1 TB egress included 7 regions
  • Simple, predictable pricing
  • Built-in CDN at no extra cost
  • Full S3 API compatibility
  • Great for small-to-mid projects
  • No free tier ($5/mo minimum)
  • Max 5 GB per object
  • No Object Lock/WORM
  • Fewer advanced features

🤖 MinIO Open Source

Self-hosted S3-compatible storage. Run on your own hardware. AGPLv3 license.
Free OSS $96K/yr commercial Full S3 API Any hardware
  • 100% free open-source edition
  • Most complete S3 API implementation
  • Data sovereignty — runs on your hardware
  • Kubernetes-native operator
  • Community edition in maintenance mode
  • Web console removed from OSS version
  • You manage infrastructure & durability
  • Commercial license $96K+/year

Egress Cost Comparison: Why It Matters

Data transfer (egress) fees can exceed storage costs. If you serve files to users, egress pricing is critical.

Provider1 TB Egress10 TB Egress100 TB EgressNotes
Amazon S3$89$872$7,536First 100 GB/mo free, then $0.09-0.05/GB tiered
Google Cloud$120$850$8,200$0.12/GB premium tier, cheaper standard tier
Cloudflare R2$0$0$0Zero egress, no conditions
Backblaze B2$0*$0*$10-1,000*Free up to 3x stored data; free to CDN partners
Wasabi$0**$0**Throttled**Free if download ≤ stored volume
DO Spaces$0$92$1,0081 TB included in $5/mo plan, then $0.01/GB

Total Monthly Cost at Scale

Storage + egress combined for realistic workloads. Assumes 2x egress ratio (download 2x what you store monthly).

StoredAmazon S3Cloudflare R2Backblaze B2WasabiGCSDO Spaces
100 GB$20$1.50$0.60$6.99$26$5
1 TB$207$15$6$6.99$264$25
10 TB$2,054$150$60$70$2,600$220
100 TB$20,336$1,500$600$699$25,800$2,020
1 PB$203,000$15,000$6,000$6,990$258,000$20,000

Assumes standard storage class + 2x egress ratio. Wasabi fair-use limits may apply. B2 egress free if within 3x stored or using CDN partner. Actual costs depend on request patterns, storage class mix, and region.

Code Examples

Upload and download objects using each provider. All S3-compatible providers use the same AWS SDK — just change the endpoint.

Upload a File (S3-Compatible)

Amazon S3
Cloudflare R2
Backblaze B2
Wasabi
// AWS SDK v3 — Amazon S3
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { readFileSync } from "fs";

const s3 = new S3Client({ region: "us-east-1" });

await s3.send(new PutObjectCommand({
  Bucket: "my-bucket",
  Key: "photos/sunset.jpg",
  Body: readFileSync("./sunset.jpg"),
  ContentType: "image/jpeg"
}));
// AWS SDK v3 — Cloudflare R2 (just change endpoint)
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { readFileSync } from "fs";

const r2 = new S3Client({
  region: "auto",
  endpoint: "https://<ACCOUNT_ID>.r2.cloudflarestorage.com",
  credentials: {
    accessKeyId: process.env.R2_ACCESS_KEY,
    secretAccessKey: process.env.R2_SECRET_KEY
  }
});

await r2.send(new PutObjectCommand({
  Bucket: "my-bucket",
  Key: "photos/sunset.jpg",
  Body: readFileSync("./sunset.jpg"),
  ContentType: "image/jpeg"
}));
// AWS SDK v3 — Backblaze B2 (S3-compatible endpoint)
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { readFileSync } from "fs";

const b2 = new S3Client({
  region: "us-west-004",
  endpoint: "https://s3.us-west-004.backblazeb2.com",
  credentials: {
    accessKeyId: process.env.B2_KEY_ID,
    secretAccessKey: process.env.B2_APP_KEY
  }
});

await b2.send(new PutObjectCommand({
  Bucket: "my-bucket",
  Key: "photos/sunset.jpg",
  Body: readFileSync("./sunset.jpg"),
  ContentType: "image/jpeg"
}));
// AWS SDK v3 — Wasabi (S3-compatible endpoint)
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { readFileSync } from "fs";

const wasabi = new S3Client({
  region: "us-east-1",
  endpoint: "https://s3.wasabisys.com",
  credentials: {
    accessKeyId: process.env.WASABI_ACCESS_KEY,
    secretAccessKey: process.env.WASABI_SECRET_KEY
  }
});

await wasabi.send(new PutObjectCommand({
  Bucket: "my-bucket",
  Key: "photos/sunset.jpg",
  Body: readFileSync("./sunset.jpg"),
  ContentType: "image/jpeg"
}));

Download a File (cURL)

Amazon S3
Cloudflare R2
Backblaze B2
# Download from S3 using presigned URL
aws s3 presign s3://my-bucket/photos/sunset.jpg --expires-in 3600

# Or direct download with AWS CLI
aws s3 cp s3://my-bucket/photos/sunset.jpg ./sunset.jpg
# R2 presigned URL (uses AWS CLI with custom endpoint)
aws s3 presign s3://my-bucket/photos/sunset.jpg \
  --endpoint-url https://ACCOUNT_ID.r2.cloudflarestorage.com \
  --expires-in 3600

# Or serve publicly via r2.dev subdomain (zero egress)
curl https://my-bucket.ACCOUNT_ID.r2.dev/photos/sunset.jpg -o sunset.jpg
# B2 download via S3-compatible endpoint
aws s3 cp s3://my-bucket/photos/sunset.jpg ./sunset.jpg \
  --endpoint-url https://s3.us-west-004.backblazeb2.com

# Or via friendly URL (if bucket is public)
curl https://f004.backblazeb2.com/file/my-bucket/photos/sunset.jpg -o sunset.jpg

Generate Presigned Upload URL (Python)

# Works with ANY S3-compatible provider — just change endpoint_url
import boto3

s3 = boto3.client("s3",
    endpoint_url="https://ACCOUNT_ID.r2.cloudflarestorage.com",  # R2 example
    aws_access_key_id="YOUR_KEY",
    aws_secret_access_key="YOUR_SECRET"
)

url = s3.generate_presigned_url("put_object",
    Params={"Bucket": "uploads", "Key": "user/avatar.png", "ContentType": "image/png"},
    ExpiresIn=3600  # 1 hour
)
print(url)  # Frontend can PUT directly to this URL

Best Budget Combo: Backblaze B2 + Cloudflare CDN

Pair the cheapest storage ($0.006/GB) with free egress through Cloudflare's CDN partnership. B2 waives egress fees for traffic served through Cloudflare.

UPLOAD
App → B2
$0.006/GB/mo
CDN
Cloudflare
Free plan
SERVE
Users
$0 egress
# Setup: Point Cloudflare DNS to B2 bucket URL
# 1. Create B2 bucket (public) named "my-cdn-bucket"
# 2. In Cloudflare DNS, add CNAME: cdn.example.com -> f004.backblazeb2.com
# 3. Add Transform Rule to rewrite URI: prepend "/file/my-cdn-bucket"
# Result: cdn.example.com/photos/sunset.jpg served via Cloudflare — $0 egress

curl https://cdn.example.com/photos/sunset.jpg
# Served through Cloudflare CDN, B2 egress: $0

Managed vs Self-Hosted Storage

When to use a managed provider vs running your own MinIO cluster.

FactorManaged (S3, R2, B2, etc.)Self-Hosted (MinIO)
Setup TimeMinutes (create account, get keys)Hours to days (provision servers, configure)
MaintenanceZero — provider handles everythingYou handle hardware, updates, monitoring
Durability11 nines (99.999999999%) guaranteedDepends on your hardware & erasure coding setup
Cost at 10 TB$60-260/mo (varies by provider)$50-100/mo (server cost) + your time
Cost at 1 PB$6,000-258,000/moHardware + $96K/yr license (or OSS free)
Data SovereigntyProvider's data centersYour hardware, your jurisdiction
Best ForMost teams, startups, web appsRegulated industries, air-gapped, petabyte-scale

Quick Decision Guide

Pick the right provider based on your primary constraint.

💰 Cheapest Per-GB

Backblaze B2 at $0.006/GB/mo. Pair with Cloudflare CDN for free egress. Best for backups, archives, and media that doesn't need global low-latency.

🌐 High-Egress Workloads

Cloudflare R2 with zero egress fees. If you serve lots of files to users (media, downloads, APIs), R2 saves thousands vs S3/GCS.

📈 Predictable Bills

Wasabi or DO Spaces. Wasabi: flat $/TB, no request or egress fees. DO Spaces: $5/mo flat with CDN included. No surprise line items.

🏗 Enterprise / AWS Ecosystem

Amazon S3. Most features, best ecosystem (Lambda, Athena, CloudFront), compliance certifications, 30+ regions. Accept the egress cost for the integrations.

📊 Analytics / ML Pipelines

Google Cloud Storage. Deep integration with BigQuery, Vertex AI, and Dataflow. Best if your data pipeline lives on GCP.

🔒 Data Sovereignty

MinIO. Self-host on your own hardware. Air-gapped deployments, regulated industries, or anywhere data can't leave your infrastructure.

Need API infrastructure alongside storage?

Frostbyte offers 40+ developer APIs (IP geo, DNS, screenshots, crypto prices, web scraping) with a single API key. No credit card required.

Get Free API Key →

Frequently Asked Questions

What is the cheapest S3 alternative?
Backblaze B2 at $0.006/GB/month is the cheapest per-GB storage — roughly 4x cheaper than Amazon S3 Standard ($0.023/GB). For egress-heavy workloads, Cloudflare R2 at $0.015/GB with zero egress fees often wins on total cost. Wasabi offers $0.00699/GB with no request or egress fees (within fair-use limits). All three are fully S3-compatible — switch by changing one endpoint URL.
Which cloud storage has zero egress fees?
Cloudflare R2 has truly zero egress fees with no conditions. Wasabi has no egress fees but enforces a fair-use policy (monthly downloads must not exceed stored volume). Backblaze B2 offers free egress up to 3x stored data and free egress to CDN partners (Cloudflare, Fastly, bunny.net). Amazon S3 charges $0.09/GB and Google Cloud charges $0.12/GB for egress.
Can I use the AWS SDK with non-AWS providers?
Yes. Cloudflare R2, Backblaze B2, Wasabi, MinIO, and DigitalOcean Spaces all implement the S3 API. Use the official AWS SDK (aws-sdk-v3, boto3, etc.) by configuring a custom endpoint URL and your provider's access credentials. Most S3 operations (PutObject, GetObject, ListObjects, multipart uploads, presigned URLs) work identically across providers.
What is object storage vs file storage vs block storage?
Object storage (S3, R2, B2) stores data as flat objects with metadata, accessed via HTTP APIs. Scales to petabytes, ideal for unstructured data. File storage (EFS, NFS) provides hierarchical filesystems shared across servers. Block storage (EBS, local SSDs) provides raw disk volumes attached to compute instances. Object storage is cheapest per GB and most scalable, but has higher latency than block storage.
Is Cloudflare R2 production-ready?
Yes. Cloudflare R2 has been generally available since September 2022 and serves production workloads for thousands of companies. It supports multipart uploads, presigned URLs, lifecycle rules, CORS, and bucket-level encryption. It lacks object versioning and Object Lock (WORM) which some compliance-heavy workloads require. For most web applications, media serving, and API backends, R2 is fully production-ready.
What does 11 nines of durability mean?
99.999999999% durability means if you store 10 million objects, you can statistically expect to lose one object every 10,000 years. All major providers (S3, R2, B2, Wasabi, GCS) achieve this by automatically replicating data across multiple storage devices and data centers. This is standard for object storage and far exceeds what you'd get from a single hard drive (which fails every 3-5 years on average).
How much does 1 TB of cloud storage cost per month?
Storage only: Backblaze B2 = $6, Wasabi = $6.99 (1 TB minimum), Cloudflare R2 = $15, GCS = $20, DO Spaces = $20 (includes CDN + 1 TB transfer), Amazon S3 = $23. With 2 TB egress: B2 = $6 (free via CDN partner), R2 = $15 ($0 egress), Wasabi = $6.99 ($0 egress), S3 = $207 ($184 in egress alone). Egress costs often dominate — factor in your read patterns.