Posts /

Quick comparison of pricing of Simple Storage Services

Written 6 months ago (May 16, 2022)

I’m not sponsored or endorsed by any of the mentioned companies/products below, nor do I earn any commission when you get something from them.
If you want to help me, say something nice in the comments (or create some discussion there).
If you start using any of these after you read this post, you’re obligated to say which one are you using (and preferably why).

Out of the below, I only used storj.io. Others are just quick info based on their pricing pages.

There’s also a simplified comparison tool at the bottom.

egress means outbound transfers. Some services have a monthly minimum fee, from what I checked it’s 1TB or less. Some services may also have a minimum billable size (Wasabi 4KB, AWS 128KB).

The services are in no particular order (I tried a bit by popularity, but no exact metrics were used for sorting).

AWS S3 + Azure + Google Cloud

Depends on region and on API requests.
Top 3 most expensive services.
If you need 100% reliability and ’the thing that everyone uses’, go with this one (or if it’s company policy).
If you want to save, or don’t mind using ’smaller’ hosts, try one of the below (I’d recommend Cloudflare or DigitalOcean from reliability/usage perspective).

Cloudflare R2

I’m using their other products (workers, this page itself is hosted on pages), but I have yet to fully try the new R2.

Category Free Paid
Storage 10GB/month $15/TB/month
class A ops 1 million requests/month $4.5/ million requests
class B ops 10 million requests/month $0.36/ million requests

Class A has all uploads and bulk operations (ListBuckets, PutBucket, ListObjects, PutObject, CopyObject, CompleteMultipartUpload, CreateMultipartUpload, UploadPart, UploadPartCopy).
Class B contains get operations (HeadBucket, HeadObject, GetObject).
Delete operations are free (DeleteObject, DeleteBucket, DeleteMultipartUpload).

Home page of Cloudflare | Pricing for R2

Wasabi

EU/NA: $5.99/TB/month APAC: $6.99/TB/month

No API charge/egress. Minimum fee of 1TB storage.

As mentioned by @spiffytech (via utteranc.es, see the bottom of the page), Wasabi always bills for a minimum of 90 days, even if you delete the files sooner.
If that’s of a concern, try adjusting the slider in the "additional options" at the bottom graph. When you replace a file during those 90 days, it will still be billed (as if you deleted the file and created a new one).

Has a policy that egress shouldn’t be higher than the stored amount. Consider using CDN or a cache layer.

Home page | Pricing page

Backblaze B2

Category Free Paid
Storage 10GB $5/TB/month
Egress 1GB/day $10/TB/month
Class A ops \infty -
Class B ops 2500/day $4 / 10 million
Class C ops 2500/day $4 / 1 million

Free egress when using one of the ’Bandwidth alliance’ services - for example when using free Cloudflare proxy (which is free even for small businesses, unless you’re moving tens/hundreds of terabytes of data each day).

Details

Class A

Uploads, deletes (of objects and buckets), aborts (of multipart uploads).

Class B

Downloads (and getting metadata of objects). This doesn’t count as egress, so it’s still paid even when over ’Bandwidth alliance’.

Class C

Copy, Create bucket, CORS bucket management, bucket information, listing.

Home page | Pricing page

DigitalOcean Spaces

Category Base Paid
Storage 250GB $20/TB/month
Egress 1TB 10$/TB/month

Base plan is 5$/month.

Details Egress is kinda funky, but essentially it's free when transfering to droplets (VMs) in the same region, otherwise it's paid.

Digital Ocean also has some kind of CDN for free bundled, and when using CDN only egress from Spaces to CDN is counted.

To find pricing for Spaces, I had to open up pricing page from their homepage, scroll down, click spaces card, click learn more link in the description, scroll down, click product docs, and then it showed the pricing itself.

They have rate limits for API requests in place (see Pricing page). Of those the most notable one is that you can only do 5 PUT or COPY requests in 5 minutse for any object (file) in Spaces.
As a side note, they use non-standard 503 Slow Down (normally Service Unavailable) error code instead of the more common 429 Too Many Requests (part of RFC 6585).

Home page | Pricing page

Storj.io

Category Free Paid
Storage 150GB $4/TB/month
Outbound 150GB 7$/TB/month

*Pro Accounts: Additional per-segment fee of $0.0000088 applies.

Details

When uploading via CLI/libraries, their software splits the files into segments, each of which is stored on multiple machines at once for redundancy. S3 gateway does that for you, and I don’t know how exactly the file is split into segments. Segment price is not part of the comparison at the end.

Really slow uploads (when using the S3 gateway, it’s possible if you use the CLI/libraries that it’s faster), downloads usable, but I’d still recommend putting it behind Cloudflare or similar proxy if you’re storing mostly small user uploads.
It should be more secure that the others, in that if you don’t use the S3 gateway but rather their open-source CLI/libraries, it encrypts the file locally with the specified key, and uploads a part of the file to multiple machines, so none of the machines can read your file.
Also, they’re not the one’s running all of the machines on which files are stored - they pay members for their excess storage if they install Storj’s daemon.
S3 gateway has server-side encryption.

They cannot retrieve the files if you lose the keys.

Home page | Pricing page


Comparison

$10
$5
$14
$30
$11
10
20
30
40
50

Source: Respective pricing pages (see links above), on (hover for quick relative time)
Prices are estimates, expecting that traffic is uniform during the month, and that the average size of a file is 50MB (20 files downloaded). Doesn't account for listings or deletions. Uploads are not using multipart.

Additional options and details It does account file count into the pricing maths, defaults to 1 file downloaded = GetObject op. I think that the ops pricing is just anti-spam measure.
Only affects Wasabi pricing.
Cloudflare proxy Means that all traffic is via Cloudflare's network. This only affects Backblaze B2. It's as simple as having a CNAME for your B2 subdomain on your own domain on cloudflare. Don't forget to read Cloudflare's TOS, as they do require free plans (or possibly paid one's as well) to have majority of traffic for website files, not for images or other files.
Service Calculation method Result
Cloudflare R2 10 * storage + Math.max(0, fileCount-10e6)*0.36/1e6 $10/TB/month
Wasabi 5 * storage * (90/dataRetention) $5/TB/month
Backblaze B2 4 * storage + (10 * egress * (cloudflareProxy ? 0 : 1)) + Math.max(0, fileCount - 2500)*4/10e6 $14/TB/month
DO Spaces 20 * storage + 10 * egress $30/TB/month
Storj.io 4 * storage + 7 * egress $11/TB/month

Daniel Bulant - Blog posts CC-BY-SA (unless otherwise specified)