DEV Community

Cover image for AWS S3 Pricing and Billing: Storage, Request Fees and Egress Costs Explained
BuildOpsy
BuildOpsy

Posted on Originally published at buildopsy.com

AWS S3 Pricing and Billing: Storage, Request Fees and Egress Costs Explained

Worked S3 Standard estimate: $23.55 storage, $5 PUT and $4 GET requests total $32.55 before transfer and management charges
Figure 1. The same inputs used by the Buildopsy S3 calculator. The $32.55 subtotal excludes transfer and other enabled features.

I start with the storage rate because it is the easiest line to quote. Then I price requests, retrieval, transfer, object size and retention as separate meters. This worked model uses 1 TiB in S3 Standard to show what one million PUTs and ten million GETs add.

TL;DR: 1,024 billable GB and one million PUTs and ten million GETs produce a $32.55 modeled monthly subtotal at the example US East rates. It excludes transfer, management features, replication, tax, account credits and negotiated pricing. Rerun the inputs in the AWS S3 Storage Cost Calculator (or read the original audit on Buildopsy).

Scope: The worked model is S3 Standard in US East (N. Virginia) over a full billing month; the rate tables cover the eight classes AWS prices on its S3 page and four Regions. Rates are public list prices in USD. This is a modeled estimate, not an AWS quote. AWS measures storage in binary GB, so 1 TiB is represented as 1,024 billable GB. Check the live S3 pricing page before budgeting.


S3 Rates at a Glance

Every rate in the first two tables is a US East (N. Virginia) list price from the AWS price list snapshot published October 15, 2026; the Deep Archive row comes from the separate list noted at the end of this section, and the four-Region table uses each Region's own index at the same version. The worked model in this article uses S3 Standard. The other classes matter because the storage rate alone misleads: Glacier Instant Retrieval stores at 17% of the Standard rate ($0.004 ÷ $0.023) and then charges $0.03 for every gigabyte read back.

Storage: the eight classes AWS prices on the S3 page

Storage class Storage per GB-month Retrieval per GB Object-size rule Minimum duration
S3 Standard $0.023 first 50 TB; $0.022 next 450 TB; $0.021 above 500 TB None None None
S3 Intelligent-Tiering $0.023 / $0.022 / $0.021 Frequent Access; $0.0125 Infrequent Access; $0.004 Archive Instant Access; $0.0036 Archive Access; $0.00099 Deep Archive Access None for standard and bulk; expedited from Archive Access bills at the expedited rate None; objects under 128 KiB stay in Frequent Access and are not monitored None
S3 Standard-IA $0.0125 $0.01 128 KiB minimum billable 30 days
S3 One Zone-IA $0.01 $0.01 128 KiB minimum billable 30 days
S3 Glacier Instant Retrieval $0.004 $0.03 128 KiB minimum billable 90 days
S3 Glacier Flexible Retrieval $0.0036 $0.01 standard; $0.03 expedited; bulk free 40 KiB overhead per object 90 days
S3 Glacier Deep Archive $0.00099 $0.02 standard; $0.0025 bulk 40 KiB overhead per object 180 days
S3 Express One Zone $0.11 $0.0006 None None

Intelligent-Tiering bills a separate monitoring and automation charge of $0.0025 per 1,000 objects per month. Among the classes in this table, Express One Zone is the only one priced above Standard per stored GB, at 4.8 times the first-tier rate ($0.11 ÷ $0.023). Three per-GB meters sit outside the table. Reduced Redundancy is still listed in the same price list at $0.024 for the first TB and above Standard at every tier, and AWS's storage-class documentation marks it not recommended, so it is excluded here rather than ranked. S3 Vectors and S3 Files appear on the same pricing page as separate products with their own meters, not as storage classes.

Requests: the price moves with the class

A PUT into Standard and a PUT into Glacier Instant Retrieval are not the same meter. The per-request rate changes by class, and for the archive classes the write path changes too.

Storage class PUT, COPY, POST per 1,000 GET and all other requests per 1,000
S3 Standard $0.005 $0.0004
S3 Intelligent-Tiering $0.005 $0.0004
S3 Standard-IA $0.01 $0.001
S3 One Zone-IA $0.01 $0.001
S3 Glacier Instant Retrieval $0.02 $0.01
S3 Glacier Flexible Retrieval $0.03 $0.0004
S3 Glacier Deep Archive $0.05, the same rate as a lifecycle transition in $0.0004
S3 Express One Zone $0.00113 $0.00003

LIST requests are the exception: AWS charges them at the S3 Standard PUT rate on every class, so a LIST costs $0.005 per 1,000 even where a PUT costs $0.02 or $0.03. On the write meters the spread is wide enough to change a design. A PUT costs 4 times more in Glacier Instant Retrieval than in Standard ($0.02 ÷ $0.005) and a GET costs 25 times more ($0.01 ÷ $0.0004). Express One Zone inverts it: its requests are cheaper than Standard's by 4.4 times for writes and 13.3 times for reads, which is why the $0.11 storage rate is not the whole comparison. Multipart upload parts to Glacier Flexible Retrieval bill at $0.005 per 1,000, separate from the $0.03 per 1,000 object-level writes, and Deep Archive parts bill at $0.005 per 1,000 against its $0.05 object-level write.

How the rate moves across four Regions

All four Regions below are published under the same price list version, so this is a like-for-like comparison rather than a snapshot mismatch.

Region Standard first 50 TB Standard 50–500 TB Standard above 500 TB Standard-IA Glacier Instant Retrieval
US East (N. Virginia), us-east-1 $0.023 $0.022 $0.021 $0.0125 $0.004
US West (Oregon), us-west-2 $0.023 $0.022 $0.021 $0.0125 $0.004
Europe (Ireland), eu-west-1 $0.023 $0.022 $0.021 $0.0125 $0.004
Asia Pacific (Mumbai), ap-south-1 $0.025 $0.024 $0.023 $0.0138 $0.005

Moving the same bucket from US East to Mumbai raises the first-tier Standard rate by 8.7% ($0.025 ÷ $0.023 = 1.087), Standard-IA by 10.4% ($0.0138 ÷ $0.0125 = 1.104) and Glacier Instant Retrieval by 25% ($0.005 ÷ $0.004 = 1.25). Request prices for these three classes are identical in all four Regions: $0.005 and $0.0004 per 1,000 for Standard, $0.01 and $0.001 for Standard-IA, $0.02 and $0.01 for Glacier Instant Retrieval. The colder request meters are not identical. A Glacier Flexible Retrieval PUT is $0.03 per 1,000 in US East and US West, $0.033 in Ireland and $0.036 in Mumbai, and a Deep Archive lifecycle transition is $0.05, $0.055 and $0.07 per 1,000 in the same order. So the storage rate is the only Regional difference among the three classes in this table, not across every S3 meter. Four Regions are a sample, not a rule; check the price list for the Region you deploy in.

At these rates, 1,024 billable GB for a full month and 1 million PUTs and 10 million GETs is $23.55 + $5.00 + $4.00 = $32.55 before retrieval and transfer. Run your own inputs in the S3 calculator. Compute meters behave differently: the EC2 pricing and billing teardown prices the 60-second floor, idle Elastic IPs and capacity reservations that sit outside an instance-hour.

What the free tier actually covers

The shape of this changed in 2025. AWS's S3 pricing page states that, as of July 15, 2025, new AWS customers receive up to $200 in AWS Free Tier credits applicable to eligible services including Amazon S3, and that all Free Tier credits must be used within 12 months of account creation. The Free plan itself runs for six months: AWS's Free Tier page says the account closes six months after it is opened, or when the credits run out, whichever comes first. Either way it is a credit balance rather than a permanent monthly storage and request allowance, so a bucket does not reset to free each month once the credits are spent.

The one standing allowance is on transfer: 100 GB per month of data transfer out to the internet, which AWS aggregates across all AWS services and Regions except China and GovCloud. Storage, requests and retrieval are billed at the rates above from the first byte; the transfer allowance does not offset them.

1 TiB storage-only comparison

Using the same US East (N. Virginia) list rates and 1 TiB = 1,024 GiB = 1,024 billable GB, the storage-only monthly charge is:

Storage class US East list rate 1 TiB storage-only
S3 Standard $0.023 per GB-month (first 50 TB tier) $23.55
S3 Standard-IA $0.0125 per GB-month $12.80
S3 One Zone-IA $0.01 per GB-month $10.24
S3 Glacier Instant Retrieval $0.004 per GB-month $4.10
S3 Glacier Flexible Retrieval $0.0036 per GB-month $3.69
S3 Glacier Deep Archive $0.00099 per GB-month $1.01
S3 Express One Zone $0.11 per GB-month $112.64

Each result is 1,024 × the listed rate, rounded to cents. Unrounded: $23.552, $12.80, $10.24, $4.096, $3.6864, $1.01376 and $112.64. The Standard row uses the first 50 TB tier, and the Intelligent-Tiering Frequent Access tier is identical at $0.023 and is omitted rather than repeated. The remaining rows use their flat US East storage rates, with Deep Archive from the separate Glacier Deep Archive price list cited below. This is storage only: it excludes requests, retrieval, transfer, minimum-storage-duration charges and additional billable metadata overhead.


1. The Storage Rate Is Not the Bill

S3 pricing is a sum of usage meters. AWS lists storage, requests, retrieval, transfer, management, replication, and transform and query features as separate cost components. The right question is not "What does a gigabyte cost?" It is "How many billable bytes, operations and transfers does this workload create in each class?"

The model below uses a general-purpose bucket in S3 Standard in US East (N. Virginia). Its storage input is 1 TiB, or 1,024 billable GB. The example rate is $0.023 per billable GB-month in the first 50 TB tier. Public AWS prices vary by Region, class and volume. The rate is an input, not a permanent constant.

Boundary: S3 Standard has no per-GB retrieval fee. That does not make reads free. GET requests are billed by request count, then data leaving S3 can add a separate transfer charge.

2. Rebuild the $32.55 Worked Model

The Buildopsy S3 pricing calculator starts with stored volume, PUT count, GET count and retrieval. At the example rates, the arithmetic is:

Line item Calculation Modeled charge
S3 Standard storage, first 50 TB tier 1,024 GB-month × $0.023 $23.55
PUT requests 1,000,000 ÷ 1,000 × $0.005 $5.00
GET requests 10,000,000 ÷ 1,000 × $0.0004 $4.00
Class retrieval 0 GB × entered rate $0.00
Modeled subtotal Storage + requests + retrieval $32.55

At these inputs, requests contribute $9.00. That is about 28 percent of the subtotal before any data leaves the bucket. Raising GET volume from 10 million to 100 million adds $36.00 at the same example rate. The 1 TiB storage line remains $23.55. Requests now contribute $45.00, almost twice the storage line. This is how a request-heavy workload can outgrow the number everyone quotes per gigabyte.

The model prices request counts, not payload size. One GET of a large object and one GET of a small object are each one request for this line item. Their transfer and storage consequences differ. So does a workload that repeatedly lists millions of keys. Browsing S3 in the console can also create billable GET, LIST and other requests.

3. Object Size Can Reverse the Storage-Class Choice

S3 Standard has no minimum billable object size. Standard-IA and One Zone-IA bill at least 128 KiB per object and impose a 30-day minimum duration. Glacier Instant Retrieval has a 128 KiB minimum and a 90-day minimum. Glacier Flexible Retrieval has a 90-day minimum. Deep Archive has a 180-day minimum. Both archive classes add 40 KiB of metadata per object: 8 KiB billed at S3 Standard rates and 32 KiB billed at the applicable Glacier rate. These details matter when a pipeline creates millions of small records.

S3 Standard bills a 1 KiB object as 1 KiB. Standard-IA, One Zone-IA and Glacier Instant Retrieval bill 128 KiB, with 30- or 90-day minimums. Glacier Flexible, Deep Archive add 40 KiB metadata with 90-, and 180-day minimums.
Figure 2. Documented object-size and retention minimums. The diagram is not a complete class bill.

For a 1 KiB object in Standard-IA, the 128 KiB floor represents 128 times the payload in billable storage units before the 30-day duration rule. A class can still win when data stays long enough and is read rarely. It can lose when a job writes tiny objects, transitions each one, then deletes or overwrites them early.

Intelligent-Tiering has a different constraint. Objects under 128 KiB are not monitored for automatic tiering and remain in Frequent Access. For Glacier Flexible Retrieval or Deep Archive, each archived object also carries the documented metadata overhead. Count objects and transitions, not only terabytes.

4. A GET Request and a Retrieval Fee Are Different Meters

Every class has request pricing. Some less-frequent and archive classes add per-GB retrieval pricing. Standard-IA, One Zone-IA and Glacier Instant Retrieval charge retrieval when data is read. Intelligent-Tiering has no retrieval fee for its standard and bulk retrieval paths, though its monitoring charge and optional accelerated archive retrieval have separate rules.

Restoring an object from Glacier Flexible Retrieval or Deep Archive is not the same as a normal Standard GET. A restore creates a temporary accessible copy for a chosen period. During that window, storage can be billed for both the archive and the restored Standard copy. The archive still has its minimum-duration rules.

Lifecycle is a request stream too. A rule that moves ten million objects can generate per-object transition requests. If objects are then expired before a class minimum has elapsed, the remaining minimum-duration charge can still apply.

5. Transfer, Versioning and Features Sit Outside the Base

Data transfer is a separate line. AWS lists a first 100 GB per month internet-transfer allowance aggregated across AWS services and Regions, with China and GovCloud exceptions. Same-Region transfers between S3 and AWS services and transfers to CloudFront have stated exceptions. Cross-Region transfer, transfer acceleration and internet egress follow their own pricing. The transfer side gets its own teardown: the $0.09 toll.

This is why the S3 tool leaves transfer out. Use the Cloud Egress Cost Calculator with the applicable billable volume and rate. Do not subtract a free allowance twice if other services in the account already used it.

Versioning changes retention. An overwrite creates a new full object version. The older version stays billable until a noncurrent-version lifecycle rule expires it or a version-specific permanent delete removes it. In a versioned bucket, a current-version expiration rule generally adds a delete marker rather than removing older versions. Cross-Region Replication creates destination storage and request and transfer charges. S3 Inventory, Storage Lens, Object Tagging, Intelligent-Tiering monitoring, S3 Select, S3 Tables and S3 Vectors add distinct cost dimensions. They are outside the $32.55 example.

6. Reconcile the Model With the Bill

Use AWS Cost and Usage Reports for billed cost. S3 usage reports can break activity out by operation, usage type, Region, resource, request count and transfer volume. AWS lets you aggregate its S3 usage report hourly, daily or monthly. That is the bridge from application telemetry to the invoice.

Representative S3 usage types in a bill

Usage-type pattern Charge Meter to reconcile
TimedStorage-*ByteHrs Storage usage by storage class Billable GB-month for the class, including applicable minimum-size rules. Minimum-duration remainders appear under EarlyDelete-*.
Requests-Tier1 PUT, COPY, POST and LIST requests Request count per 1,000 at the class rate; LIST requests use the S3 Standard PUT/COPY/POST rate.
Requests-Tier2 GET and other applicable requests Request count per 1,000; Standard GET has no per-GB retrieval fee, while colder classes can add retrieval.
Retrieval-SIA / Retrieval-GIR Standard-IA and Glacier Instant Retrieval retrieval Retrieved GB at the class rate; does not apply to S3 Standard.
DataTransfer-Out-Bytes Internet data transfer out Billable GB leaving S3, after applicable free allowances and tiers.
EarlyDelete-* Minimum-storage-duration charges Prorated GB-hours when an object leaves a class before its 30-, 90- or 180-day minimum.

7. The Verdict: Price the Access Pattern

The storage-class rate is a useful lower bound, not a workload estimate. A small-object archive can pay for unused minimum bytes. A hot bucket can pay more for operations or transfer than for storage. A versioned bucket can retain every overwritten byte until lifecycle rules remove it.

Start with the workload shape: object-size distribution, change rate, reads per object, retrieval volume, retention period and destination. Price each meter against the actual Region and class. Run the first four meters through the S3 calculator, add transfer separately and reconcile the result against CUR line items. The bill hides in the boundary between stored bytes and the work required to use them.

For a disclosed data-lake architecture with an explicit modeled bill, see Notion's 200 Billion Blocks and the Warehouse Bill Behind a Blank Page.

Top comments (0)