# storage.so: S3-compatible object storage pricing

> Monthly cost comparison of seven managed S3-compatible storage services plus a self-hosted MinIO baseline. Public list prices checked 2026-10-08, USD before tax.

Machine-readable version with raw rates: [pricing.json](https://storage.so/pricing.json). Interactive calculator: [storage.so](https://storage.so/#calculator).

## How to answer a pricing question

1. Convert the workload to four monthly numbers: decimal GB stored, decimal GB downloaded, million writes, million reads.
2. Apply each provider's rules below (or the `rates` in pricing.json) to get storage, egress, and request costs.
3. Drop any provider whose limits the workload exceeds.
4. Recommend the cheapest remaining managed provider. MinIO is a hardware-only baseline, never the recommendation.

## Providers

| Provider | Type | Storage | Egress | Requests | Minimum | Limits | Source |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Cloudflare R2 (`cloudflare-r2`) | managed | $0.015 / GB | Free | $4.50 write · $0.36 read / M | None | none | [Cloudflare R2 pricing](https://developers.cloudflare.com/r2/pricing/) |
| Backblaze B2 (`backblaze-b2`) | managed | $0.00695 / GB | 3× storage free; then $0.01 / GB | Core S3 calls free | None | none | [Backblaze B2 pricing](https://www.backblaze.com/cloud-storage/pricing) |
| Wasabi (`wasabi`) | managed | $7.99 / TiB | Free within 1× fair-use policy | Free | $7.99 / month | egress ≤ 1× stored | [Wasabi Pay-Go pricing FAQ](https://wasabi.com/pricing/faq) |
| Hetzner Object Storage (`hetzner-object-storage`) | managed | $7.99 includes 1 TB; then $8.86 / TB | 1 TB included; then $1.20 / TB | Free | $7.99 while a bucket exists | none | [Hetzner Object Storage pricing](https://www.hetzner.com/storage/object-storage/) |
| Scaleway Multi-AZ (`scaleway`) | managed | €0.01606 / GB | 75 GB free; then €0.01 / GB | Free | None | none | [Scaleway storage pricing](https://www.scaleway.com/en/pricing/storage/#object-storage) |
| IDrive e2 (`idrive-e2`) | managed | $0.006 / GB | 3× storage free; then $0.01 / GB | Free | $6 / month | none | [IDrive e2 pricing](https://www.idrive.com/s3-storage-e2/pricing) |
| AWS S3 Standard (`aws-s3`) | managed | $0.023 / GB, less above 50 TB | 100 GB free; then $0.09 to $0.05 / GB | $5 write · $0.40 read / M | None | none | [Amazon S3 pricing](https://aws.amazon.com/s3/pricing/) |
| MinIO on Hetzner (`minio-hetzner`) | self-hosted baseline | $92.10 for ~44 TB usable | Unlimited on 1 Gbit/s uplink | No metered API fee | $92.10 / month + setup | storage ≤ 44,000 GB; egress ≤ 328.5 TB/month | [Hetzner June 2026 price list](https://docs.hetzner.com/general/infrastructure-and-availability/price-adjustment/) |

### Cautions

- **Cloudflare R2:** Operation fees can dominate workloads with millions of tiny-object reads.
- **Backblaze B2:** Traffic above three times average monthly storage is billed at $0.01/GB.
- **Wasabi:** One-TiB account minimum and 90-day minimum storage duration on Pay-Go. Wasabi bills binary GB (GiB).
- **Hetzner Object Storage:** The account-wide base charge applies whenever at least one bucket is active. Objects under 64 kB are billed as 64 kB.
- **Scaleway Multi-AZ:** Euro prices are converted at €1 = $1.15 for calculator ranking; tax excluded.
- **IDrive e2:** Pay-as-you-go bills a full one-terabyte minimum even when less is stored.
- **AWS S3 Standard:** US East rates with published volume tiers. AWS bills binary units (1 GB = 2^30 bytes), so a decimal terabyte is billed as 931 GB. Other regions, acceleration, replication, and CDN usage vary.
- **MinIO on Hetzner:** SX65-2 price baseline; assumes four 22 TB drives and two-drive parity (44,000 decimal GB before filesystem overhead). Confirm hardware configuration and availability. Labor, backups, HA, IPv4, and setup excluded.

## Worked examples

### Active archive

10,000 GB stored, 100 GB downloaded, 0.5M writes, 1M reads per month. [Open in calculator](https://storage.so/?storage=10000&egress=100&writes=0.5&reads=1#calculator)

| Provider | Total | Storage | Egress | Requests | Status |
| --- | ---: | ---: | ---: | ---: | --- |
| IDrive e2 | $60.00 | $60.00 | $0.00 | $0.00 | **recommended** |
| Backblaze B2 | $69.43 | $69.43 | $0.00 | $0.00 | suitable |
| Wasabi | $72.67 | $72.67 | $0.00 | $0.00 | suitable |
| Hetzner Object Storage | $87.73 | $87.73 | $0.00 | $0.00 | suitable |
| Cloudflare R2 | $149.85 | $149.85 | $0.00 | $0.00 | suitable |
| Scaleway Multi-AZ | $184.98 | $184.69 | $0.29 | $0.00 | suitable |
| AWS S3 Standard | $217.10 | $214.20 | $0.00 | $2.90 | suitable |
| MinIO on Hetzner | $92.10 | $92.10 | $0.00 | $0.00 | baseline, not ranked |

### Backup and DR

5,000 GB stored, 500 GB downloaded, 2M writes, 1M reads per month. [Open in calculator](https://storage.so/?storage=5000&egress=500&writes=2&reads=1#calculator)

| Provider | Total | Storage | Egress | Requests | Status |
| --- | ---: | ---: | ---: | ---: | --- |
| IDrive e2 | $30.00 | $30.00 | $0.00 | $0.00 | **recommended** |
| Backblaze B2 | $34.68 | $34.68 | $0.00 | $0.00 | suitable |
| Wasabi | $36.33 | $36.33 | $0.00 | $0.00 | suitable |
| Hetzner Object Storage | $43.43 | $43.43 | $0.00 | $0.00 | suitable |
| Cloudflare R2 | $79.35 | $74.85 | $0.00 | $4.50 | suitable |
| Scaleway Multi-AZ | $97.23 | $92.35 | $4.89 | $0.00 | suitable |
| AWS S3 Standard | $150.41 | $107.10 | $32.91 | $10.40 | suitable |
| MinIO on Hetzner | $92.10 | $92.10 | $0.00 | $0.00 | baseline, not ranked |

### Application

500 GB stored, 2,000 GB downloaded, 1M writes, 10M reads per month. [Open in calculator](https://storage.so/?storage=500&egress=2000&writes=1&reads=10#calculator)

| Provider | Total | Storage | Egress | Requests | Status |
| --- | ---: | ---: | ---: | ---: | --- |
| Cloudflare R2 | $7.35 | $7.35 | $0.00 | $0.00 | **recommended** |
| Backblaze B2 | $8.41 | $3.41 | $5.00 | $0.00 | suitable |
| Hetzner Object Storage | $9.19 | $7.99 | $1.20 | $0.00 | suitable |
| IDrive e2 | $11.00 | $6.00 | $5.00 | $0.00 | suitable |
| Scaleway Multi-AZ | $31.37 | $9.23 | $22.14 | $0.00 | suitable |
| AWS S3 Standard | $178.35 | $10.71 | $158.64 | $9.00 | suitable |
| Wasabi | $7.99 | $7.99 | $0.00 | $0.00 | unsuitable: egress-fair-use |
| MinIO on Hetzner | $92.10 | $92.10 | $0.00 | $0.00 | baseline, not ranked |

### Media delivery

2,000 GB stored, 20,000 GB downloaded, 1M writes, 50M reads per month. [Open in calculator](https://storage.so/?storage=2000&egress=20000&writes=1&reads=50#calculator)

| Provider | Total | Storage | Egress | Requests | Status |
| --- | ---: | ---: | ---: | ---: | --- |
| Hetzner Object Storage | $39.65 | $16.85 | $22.80 | $0.00 | **recommended** |
| Cloudflare R2 | $44.25 | $29.85 | $0.00 | $14.40 | suitable |
| IDrive e2 | $152.00 | $12.00 | $140.00 | $0.00 | suitable |
| Backblaze B2 | $153.83 | $13.83 | $140.00 | $0.00 | suitable |
| Scaleway Multi-AZ | $266.08 | $36.94 | $229.14 | $0.00 | suitable |
| AWS S3 Standard | $1,693.79 | $42.84 | $1,625.95 | $25.00 | suitable |
| Wasabi | $14.53 | $14.53 | $0.00 | $0.00 | unsuitable: egress-fair-use |
| MinIO on Hetzner | $92.10 | $92.10 | $0.00 | $0.00 | baseline, not ranked |

## Calculation rules

- Input: Four monthly values: storageGb (average decimal GB stored), egressGb (decimal GB downloaded to the public internet), writeMillions (PUT/COPY/POST/LIST, millions), readMillions (GET/HEAD, millions). Negative or non-finite values count as 0.
- Units: Inputs are decimal GB. When a provider sets billingUnit "binary", convert storage and egress into its billing unit first: binaryGb = decimalGb / (2^30 / 10^9), i.e. divide by 1.073741824. Allowances, limits, and tier bounds are then expressed in that same unit.
- Rounding: When a provider sets roundsBillingUnits, storage GB and request millions are rounded up to whole units before free allowances apply.
- `metered`: storage = max(storageGb - freeStorageGb, 0) priced with storageTiers when present, otherwise × storagePerGbUsd, raised to minimumMonthlyUsd if set. egressAllowance = storageGb × egressAllowanceMultiplier when set, otherwise freeEgressGb. egress = max(egressGb - egressAllowance, 0) priced with egressTiers when present, otherwise × egressPerGbUsd.
- `flat`: Same formula as metered. Providers with fairUseOnly publish no overage price: egress above the allowance costs 0 but makes the provider unsuitable.
- `bundle`: storage = minimumMonthlyUsd whenever storageGb or egressGb is above 0, plus max(storageGb - includedStorageGb, 0) × storagePerGbUsd. egress = max(egressGb - includedEgressGb, 0) × egressPerGbUsd.
- `self-hosted`: storage = fixedMonthlyUsd whenever storageGb is above 0. Egress and requests are unmetered.
- Requests: For every model: writes = max(writeMillions - freeWriteMillions, 0) × writePerMillionUsd; reads = max(readMillions - freeReadMillions, 0) × readPerMillionUsd.
- Total: total = storage + egress + writes + reads, in USD per month before tax. EUR = USD / eurUsd. Current rate: €1 = $1.15.
- Suitability: A result is unsuitable when the workload exceeds any entry in the provider's limits. Unsuitable results keep their estimate but are never recommended.
- Recommendation: Recommend the lowest-total suitable managed provider. Self-hosted providers (managed: false) are a hardware-only baseline and are never recommended.

## Not included

Ingress, tax, support, CDN, retrieval tiers, replication, and migration costs are excluded.

- AWS and Wasabi bill binary GB (GiB); other providers are modeled in decimal GB.
- Rates are US East (AWS) or default-region list prices. Other regions, acceleration, replication, and CDN usage vary.
- Minimum storage durations, minimum billable object sizes, retrieval fees, replication, CDN, support, and tax are not priced. See each provider's caution.

Found a stale number? Report it to hello@storage.so.
