Operations9 min readSeptember 22, 2026

Amazon S3 pricing explained: what a business file archive really costs

The six things AWS meters when your files live in S3, the minimum durations and minimum billable object sizes that quietly change the arithmetic, and how to build an estimate you can defend.

JeVaughn Ferguson
Founder, developer
The short version

Price the object count alongside the terabytes, and treat the minimum storage durations and the 128 KB minimum billable object size as the real constraints rather than the per-GB rate. Small files belong in S3 Standard or Intelligent-Tiering; the Glacier classes are for large, old objects you can afford to wait for. Then check the forgotten lines — incomplete multipart uploads, noncurrent versions, transfer out and KMS requests — because that is usually where the difference between the estimate and the invoice is hiding.

Amazon S3 pricing looks like one number per gigabyte, which is why the first bill is so often a surprise. Storage is one of six things AWS meters, and for an archive that people actually open, it is frequently not the largest.

This guide covers what those six lines are, the minimum storage durations and minimum billable object sizes that change the answer for small or short-lived objects, and how to turn a bucket you already have into an estimate. It deliberately does not reprint per-GB rates: they differ by Region and change over time, and the AWS Pricing Calculator will always be more current than an article. The structure below is the part that stays the same.

The six things AWS bills for

Work through them in this order, because it is roughly the order in which they surprise people.

  • Storage, per GB-month, at a rate set by the storage class each object is in.
  • Requests, per 1,000, with writes and listings priced well above reads. PUT, COPY, POST and LIST sit in the expensive group; GET sits in the cheap one.
  • Retrievals, a per-GB fee on Standard-IA, One Zone-IA and all three Glacier classes. S3 Standard and S3 Intelligent-Tiering have no retrieval fee.
  • Data transfer out, charged when bytes leave AWS for the internet. Transfer in is free, and transfer to other AWS services in the same Region usually is too.
  • Management and analytics features you switched on: Intelligent-Tiering monitoring and automation, S3 Inventory, Storage Lens advanced metrics, replication and S3 Object Lambda each carry their own charge.
  • Lifecycle transitions, which are requests. A rule that moves a million objects to a colder class is a million billable requests.

Storage classes: the minimums matter more than the rate

Every class below S3 Standard buys a lower per-GB rate in exchange for a constraint, and AWS publishes those constraints as exact numbers rather than guidance.

  • S3 Standard: no minimum duration, no minimum billable object size, no retrieval fee.
  • S3 Standard-IA and S3 One Zone-IA: 30-day minimum duration, 128 KB minimum billable object size, per-GB retrieval fees. One Zone-IA keeps a single copy in one Availability Zone and is not resilient to losing it.
  • S3 Glacier Instant Retrieval: 90-day minimum, 128 KB minimum billable size, retrieval fees, millisecond access.
  • S3 Glacier Flexible Retrieval: 90-day minimum, retrieval in minutes to hours, plus 40 KB of metadata per object — 32 KB at the Glacier rate and 8 KB at the S3 Standard rate.
  • S3 Glacier Deep Archive: 180-day minimum, retrieval in hours, and the same 40 KB of per-object metadata.
  • S3 Intelligent-Tiering: no minimum duration and no retrieval fees, but a monitoring and automation fee per object. Objects under 128 KB are not monitored, are not charged that fee, and stay in the Frequent Access tier.

Two numbers do most of the damage

Delete or transition an object before its minimum duration and you are still billed for the whole period. Pulling something out of Deep Archive after a week costs 180 days of storage for that object. A lifecycle rule that shuffles objects between cold classes can therefore cost more than leaving them where they were, because each move restarts a minimum somewhere.

The 128 KB minimum billable object size is the other one. A 12 KB file in Standard-IA is billed as 128 KB, roughly ten times what it occupies, and it still carries a retrieval fee when read. Small objects belong in S3 Standard or Intelligent-Tiering. The cold classes are for large, old, rarely touched files, and the Glacier classes add 40 KB of metadata per object on top, which makes archiving millions of small files a specifically bad idea.

Price the object count, not just the terabytes

The most common estimating mistake is modelling a volume and ignoring a count. Requests, Intelligent-Tiering monitoring, Glacier metadata overhead and lifecycle transitions are all per object. Two buckets holding 5 TB can differ by an order of magnitude in monthly cost when one holds five thousand video files and the other holds fifty million scanned pages.

Get the count before you model anything. S3 Storage Lens reports object counts and average object size per bucket and prefix, and S3 Inventory produces a scheduled report listing every object with its size, storage class and age. Both beat a guess, and neither charges you LIST requests for the privilege the way a recursive listing does.

# Fine for a small bucket. Every 1,000 keys listed is a billable LIST request,
# so do not point this at a bucket with millions of objects.
aws s3 ls s3://amzn-s3-demo-bucket --recursive --summarize --human-readable | tail -2

# The right tool at scale: daily storage metrics, no LIST charges.
aws cloudwatch get-metric-statistics \
  --namespace AWS/S3 --metric-name NumberOfObjects \
  --dimensions Name=BucketName,Value=amzn-s3-demo-bucket \
               Name=StorageType,Value=AllStorageTypes \
  --start-time 2026-09-01T00:00:00Z --end-time 2026-09-02T00:00:00Z \
  --period 86400 --statistics Average

Intelligent-Tiering or lifecycle rules

These are the two ways to stop paying S3 Standard rates for cold data, and they fail in different directions.

A lifecycle rule is free to configure and completely deterministic: after this many days, move to that class. You pay one transition request per object, and you are committing to your own guess about access patterns. When the guess is wrong and someone opens a four-year-old contract, you pay a retrieval fee and, in the Glacier classes, you wait.

S3 Intelligent-Tiering makes the guess for you. Objects move to Infrequent Access after 30 consecutive days without access and to Archive Instant Access after 90, automatically, with no retrieval fee when they come back. You pay a per-object monitoring and automation fee instead. The optional Archive Access and Deep Archive Access tiers go further, at 90 and 180 days, but objects in those tiers must be restored before they can be read, which puts you back in the waiting business.

Average object size decides it. The monitoring fee is per object, so a bucket of large files absorbs it easily while a bucket of tiny files can pay more in monitoring than it saves in storage. Below 128 KB the question does not arise: those objects are never monitored, never charged the fee, and never leave the Frequent Access tier.

The lines people forget

  • Incomplete multipart uploads. Parts from a cancelled or crashed upload are stored, and billed, until the upload is completed or aborted. There is no expiry. An AbortIncompleteMultipartUpload lifecycle rule on every bucket is the fix.
  • Old versions. With versioning on, every overwrite keeps the previous version and every delete writes a marker rather than freeing space. A NoncurrentVersionExpiration rule is what turns versioning from an unbounded cost into a bounded one.
  • Data transfer out. Serving files straight from S3 to people on the internet is billed per GB leaving AWS, and it is usually the line that grows with headcount rather than with storage.
  • Cross-Region replication. You pay for the second copy’s storage, the replication requests and the inter-Region transfer, which is three lines for one setting.
  • KMS requests. SSE-KMS with a customer managed key charges per API call, and a large read workload generates one per object operation. S3 Bucket Keys cut that traffic substantially and are a single bucket setting.

Building an estimate you can defend

  • Get real numbers first: total size, object count and average object size per prefix, from Storage Lens or an inventory report.
  • Split the data by how it is accessed rather than by what it is. "Opened this quarter", "opened this year" and "kept because we must" map onto storage classes; "contracts" and "invoices" do not.
  • Model the request volume from the workload, not the storage. Preview and listing traffic in a file workspace is GET-heavy and constant; an ingest pipeline is PUT-heavy and bursty.
  • Put the result into the AWS Pricing Calculator for your actual Region, including transitions and retrievals, not just storage.
  • Turn on cost allocation tags and check the S3 usage types in Cost Explorer after the first full month. The gap between the estimate and the bill is where the assumption was wrong.

What an access layer changes about the bill

Every preview, download and folder listing is a request against your bucket, so how people reach the files affects the AWS side of the cost, not only the software side. A tool that lists a prefix on every keystroke or re-downloads a PDF each time someone scrolls will show up in the request and transfer lines.

It also matters whose account is billed. BucketDesk connects to a bucket in your own AWS account through a scoped IAM role, so storage, requests and transfer stay on your AWS bill at your negotiated rates, and the BucketDesk subscription is priced separately per seat. That separation is the point: you can tune storage classes and lifecycle rules without renegotiating anything, because the storage was never bundled into a seat price.

Try it in BucketDesk

Starter is free. Deploy a scoped role with CloudFormation, sign in, and browse, without handing anyone an access key.

Connect a bucket

Primary sources

Discussion

0 comments · open to guests · moderated
Comments appear after a quick review.

Liked this? Get the next article by email. No schedule, no filler, one click to leave.

Keep reading

All writing →