Skip to content

Build1 publisher3 min readPublished

Backblaze B2's $6.95/TB is cheapest under about 7TB. The API gaps decide it sooner.

Flat pricing and free 3x egress make B2 hard to beat at small volumes, but Backblaze lists lifecycle transitions, object tagging, ACLs and IAM roles as unsupported.

The Engineer · Build desk

Drafted by a language model from the sources cited here and checked against its claim ledger before publication. How we use AISend a correction

What happened

  • Backblaze B2 storage is priced at $0.00695/GB/month (about $6.95/TB/month), with no charge for uploads.
  • B2 egress is free up to 3x average monthly stored capacity; only egress above that is billed, at $0.01/GB. Egress beyond 3x is also free through CDN or compute partners.
  • B2 has no storage tiers and no retrieval classes.
  • For a typical backup or archive workload, the crossover where self-hosted S3 becomes cheaper than B2 lands near 7 TB, inside a 5-10 TB band.
  • The comparison's assumptions: B2 egress stays within the free 3x-storage tier so B2 cost is approximately storage cost; self-hosted hardware amortised over 36 months; ops cost = 0.15 FTE allocation.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

Backblaze B2 charges one line item for storage, $0.00695 per GB per month, roughly $6.95 per TB, with free uploads and free egress up to three times your stored capacity before a $0.01/GB overage kicks in [1][2]. That structure makes B2 the cheapest reasonable option inside a specific volume band, but for a lot of teams the disqualifier arrives before the price does.

Start with the crossover. A dev.to comparison by Ethan Carter puts the point where self-hosted S3 becomes cheaper than B2 at about 7 TB for a typical backup or archive workload, inside a 5 to 10 TB band [4]. The model assumes B2 egress stays inside the free 3x allowance, self-hosted hardware amortised over 36 months, and operations at 0.15 FTE [5]. At 7 TB, B2's bill is $48.65 a month, or $583.80 a year [18], and that price includes 21 TB a month of free download [19]. So the comparison is one server, its drives, and about a sixth of an engineer against under $600 a year. The 0.15 FTE line is the assumption to argue with, and the post that publishes the model also links to RustFS downloads and its GitHub repository, so treat the crossover as a starting point rather than a finding [22].

The egress cliff is real but oddly shaped. Overage at $0.01/GB works out to $10 per TB downloaded, about 1.44 times what it costs to store a TB for a month [20]. Self-hosted stays at $0 because the bandwidth is already yours [6]. Notably, the recommendation to stay on B2 only if your monthly download ratio is under 20% of stored data [16] is about 15 times more conservative than the 300% the free tier actually allows [21]. Backup and archive traffic will not get near either number.

The feature list is where this decision usually gets made. Backblaze lists lifecycle tier transitions, object tagging, ACLs and IAM roles as unsupported in its S3-Compatible API [7]. B2 lifecycle rules only hide objects, delete them, or cancel unfinished large uploads [8]. The official gap list names five items: ACLs, IAM roles, object tagging, website configuration, and browser-based POST uploads to presigned URLs [9]. Cloud Replication is absent from the S3 API and runs through the Native API instead [10]. None of that is a pricing negotiation. If your access control model is written in IAM policy, or your cost management depends on tag-driven lifecycle rules, no per-TB rate fixes it.

What does work is the core surface: PutObject, GetObject, ListObjects, multipart upload and DeleteObject, which is why rclone, restic and Cyberduck run against B2 unchanged [12]. Presigned URLs work in both directions, and server-side encryption is available as SSE-B2 or SSE-C [13]. Object Lock with governance, compliance and legal hold modes is supported, as is bucket replication [11]. B2 also has no storage tiers or retrieval classes [3], which is part of why there is nothing for lifecycle transitions to transition to.

The hybrid split follows from that: self-hosted for hot active data, B2 as the off-site cold target, with the shared S3 API moving objects either way [15]. Worth watching before you commit to it: RustFS ships bucket replication, versioning and event notifications today, but its lifecycle management is still marked as under testing [14]. If you are leaving B2 because its lifecycle rules only hide and delete, verify that the replacement's lifecycle engine is production-ready in your own testing, not just on the feature matrix.

Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories