bucketpilot
Blog

What 240 million objects taught us about cloud storage pricing

We priced a real archive of 241 million objects three ways. The average object size said one thing, the distribution another, and the bill follows the distribution.

September 8, 2026 · The BucketPilot team

The Savings Finder pricing cold data, old versions and duplicates on a real estate

One archive, three prices

We built a cost estimator for BucketPilot Cloud, and before trusting it we ran it over a real archive in our catalogue: 241,746,866 objects, about 44 TB. Then we priced the same objects as if they lived on Amazon S3 Standard, on Cloudflare R2, and on S3 Glacier Instant Retrieval.

ClassMonthly storage cost for the same objects
S3 Standard$1,170.76
Cloudflare R2$662.70
S3 Glacier Instant Retrieval$259.79

The order is what you would expect. The margins are not — and the reason is object size.

The floor under every small file

Glacier Instant Retrieval bills every object as at least 128 KB. A 20 KB thumbnail costs the same as a 128 KB one. R2 has no such floor. So the question is not "which class is cheaper per GB" but "how many of my objects are under the floor".

The archive's average object is 191.6 KB — comfortably above the floor, so an average-based estimate sees no problem at all. But an average hides a distribution: this archive has millions of tiny objects and thousands of enormous ones, and the estimator that prices each size band separately finds the floor costing real money. Our first estimate, done on the average, was wrong in the direction that would have surprised a customer on their first invoice.

Where the crossover sits

Priced band by band, Glacier Instant Retrieval stops beating R2 when the average object size drops below about 34 KB. Above that, the floor is a rounding error and Glacier wins by a wide margin; below it, R2 wins despite its higher per-GB rate. Two archives with the same total size can land on opposite sides of that line.

The same arithmetic applies to minimum storage duration (Glacier IR bills 90 days even if you delete on day 10) and to retrieval versus egress, which are separate charges and behave differently: for the archive above, egress dominated retrieval by nine to one.

What we did about it

Three things, all in the product.

  • The savings finder prices by size band, never by average, and says how many of your objects sit below a class's floor before it recommends the class.
  • BucketPilot Cloud bills every file as at least 4 KiB and says so on the page where you create the bucket — a floor thirty-two times lower than Glacier's, stated up front rather than discovered.
  • The duplicate finder and the per-type breakdown exist so the answer to "what is actually in there" is a number, not a guess.

If you want the same arithmetic run over your own buckets, connect one: the analytics page does it on the real distribution, not the average.

Also on the blog

Run the numbers on your own buckets

Full Pro access for 14 days. No card. Connect an account in seconds.