To calculate S3 GET request cost, divide your monthly GET count by 1,000 and multiply by $0.0004, the S3 Standard rate in us-east-1. PUT, COPY, POST and LIST requests cost $0.005 per 1,000, so 10 million GETs cost $4.00 and 10 million PUTs cost $50.00. DELETE requests are free. Infrequent-access classes charge more per request plus a per-GB retrieval fee.
Request charges are the S3 line item people forget until it is larger than the storage line. This guide is for developers and FinOps-minded engineers who need to calculate S3 GET request cost and PUT, LIST and HEAD charges for a real workload. You’ll get the dated rate table, the formula, three worked examples including the small-object trap, and the changes that cut request spend.
For a quick estimate, the free AWS S3 PUT request cost calculator takes monthly GET and PUT counts next to storage and transfer, so you see requests in proportion to the rest of the bill.
How S3 request pricing works
S3 bills every API call against a bucket or object, whether it comes from your application, the AWS CLI, an SDK script or the S3 console. Browsing a bucket in the console issues LIST and GET requests too, and they are billed at the same rates. Requests fall into two main price groups:
- Tier 1:
PUT,COPY,POSTandLIST. LIST requests are charged at the S3 Standard PUT rate for every storage class. - Tier 2:
GET,SELECTand “all other requests”, which includesHEAD. This is the cheap group. - Free:
DELETEandCANCELrequests.
Each part of a multipart upload is its own request, so a 1 GB file uploaded in 100 parts costs 102 Tier 1 requests (create, 100 parts, complete), not one. The example that uploads a file to S3 with S3Client in TypeScript shows when lib-storage switches to multipart, and the presigned S3 upload URL example for SDK v3 is billed the same way: one PUT per upload, paid by the bucket owner.
S3 request prices per 1,000 requests
These are the exact rates from the AWS public price list for S3 (the AmazonS3 offer, us-east-1), cross-checked against the Amazon S3 pricing page.
| Storage class | PUT, COPY, POST, LIST (per 1,000) | GET, SELECT, HEAD and other (per 1,000) | Retrieval (per GB) |
|---|---|---|---|
| S3 Standard | $0.005 | $0.0004 | none |
| S3 Intelligent-Tiering | $0.005 | $0.0004 | none |
| S3 Standard-IA | $0.01 | $0.001 | $0.01 |
| S3 One Zone-IA | $0.01 | $0.001 | $0.01 |
| S3 Glacier Instant Retrieval | $0.02 | $0.01 | $0.03 |
| Lifecycle transition to Standard-IA or Intelligent-Tiering | $0.01 per 1,000 transitions | ||
| DELETE and CANCEL | Free | ||
All rates: us-east-1, as of September 2026. Other Regions differ slightly, so select yours in the calculator before relying on a number.
The formula to estimate S3 API requests monthly cost
For each request group:
cost = (requests per month ÷ 1,000) × price per 1,000
Then add retrieval for IA or Glacier Instant Retrieval classes: GB read × retrieval price. To get the monthly count for a new workload, multiply by the calendar: 50 requests per second is 50 × 86,400 × 30 = 129.6 million requests a month. That conversion is where most estimates go wrong, because a rate that sounds small per second is large per month.
Treat the result as a unit cost too. Cost per 1,000 uploads or per active user is the kind of number the FinOps Foundation calls unit economics in the FinOps Framework, and it tells you whether request spend grows faster than the business does.
Worked examples: calculate S3 GET request cost and PUT cost
Example 1: an image API with 30 million reads a month
A thumbnail service in S3 Standard serves 30 million GETs and writes 2 million new images a month.
- GET: 30,000,000 ÷ 1,000 × $0.0004 = 30,000 × $0.0004 = $12.00
- PUT: 2,000,000 ÷ 1,000 × $0.005 = 2,000 × $0.005 = $10.00
- Total requests: $22.00 a month
Note the asymmetry: 15 times more reads than writes, yet the two lines cost about the same, because a PUT costs 12.5 times more than a GET. If those images are also downloaded by browsers, the transfer bill will dwarf both; the guide to estimating S3 data transfer out cost covers that line.
Example 2: S3 request charges for small objects
An ingestion pipeline writes one object per event: 100 million events a month, 10 KB each, to S3 Standard.
- Data: 100,000,000 × 10 KB = 1,000,000,000 KB ÷ 1,048,576 KB per GB ≈ 953.7 GB
- Storage for a month: 953.7 × $0.023 = $21.93
- PUT: 100,000,000 ÷ 1,000 × $0.005 = 100,000 × $0.005 = $500.00
Requests cost 23 times more than storage. Batch 1,000 events into each object (about 10 MB) and PUTs drop to 100,000 a month: 100 × $0.005 = $0.50. The data and storage cost are the same; the request line falls by 99.9%. This is the small-object trap, and it also affects Intelligent-Tiering, where objects under 128 KB are never moved to cheaper tiers; see the S3 Standard vs Intelligent-Tiering cost comparison.
Example 3: an S3 LIST request pricing example
A nightly job lists a bucket of 50 million objects to find new files. ListObjectsV2 returns at most 1,000 keys per page:
- Pages per run: 50,000,000 ÷ 1,000 = 50,000 LIST requests
- Per month: 50,000 × 30 = 1,500,000 LIST requests
- Cost: 1,500,000 ÷ 1,000 × $0.005 = $7.50 a month
S3 Inventory delivers the same key list as a daily or weekly file for $0.0025 per million objects listed: 50 × $0.0025 = $0.125 per daily report, or $3.75 for 30 reports. It also removes the job’s runtime. The example that finds the size of each S3 bucket makes the same point for sizing: CloudWatch’s daily BucketSizeBytes metric is far cheaper than listing every object.
How to reduce S3 request costs
- Batch small writes. Buffer records and write fewer, larger objects (Amazon Data Firehose and most log shippers can do this). This is the single biggest lever for write-heavy workloads.
- Cache hot reads. A CDN or an application cache in front of S3 turns thousands of GETs for the same object into one.
- Replace LIST scans with events or inventory. S3 Event Notifications tell you about new objects as they arrive; S3 Inventory gives you the full key list without paginating.
- Avoid needless HEAD-before-GET. Checking existence with
HeadObjectand then callingGetObjectdoubles the request count; handle theNoSuchKeyerror instead where you can. - Watch retrieval fees on IA classes. Reading data in Standard-IA costs $0.001 per 1,000 GETs plus $0.01 per GB. Data read often belongs in S3 Standard.
- Keep multipart part sizes sensible. Tiny parts multiply PUTs on large uploads.
Free Tier credits cover request charges too, but the old monthly request allowance no longer applies to any account; the article on S3 free tier GET request limits and costs explains what changed.
Find out what your account really spends on requests
Estimates only get you so far. With ChatWithCloud you can ask “What did S3 requests cost last month, split by Tier 1 and Tier 2?” or “Which bucket had the most PUT requests this week?” from the terminal. The CLI writes AWS SDK code, runs it locally with your profile and summarizes the result; the walkthrough to ask AI why your AWS bill increased shows the Cost Explorer calls behind that kind of answer.
Use a read-only profile, because generated code runs without a confirmation step, and add ce: permissions for cost questions. To go from “S3 is expensive” to “this bucket is why”, ask AI which S3 buckets are largest and which are public, or list AWS resources with natural language to see what writes to them. Answers can be wrong, so check large numbers against Cost Explorer, for example with the SDK v3 script to get last month’s AWS cost by service. Your AWS credentials stay in ~/.aws; only your question, the conversation and the JSON results are sent for processing.
Frequently asked questions
How much do 1 million S3 GET requests cost?
In S3 Standard in us-east-1, 1,000,000 ÷ 1,000 × $0.0004 = $0.40. In Standard-IA the same million costs $1.00, plus $0.01 for every GB read.
How much do 1 million S3 PUT requests cost?
1,000,000 ÷ 1,000 × $0.005 = $5.00 in S3 Standard or Intelligent-Tiering, and $10.00 in Standard-IA.
Are S3 HEAD requests charged?
Yes. HEAD falls under “GET and all other requests”, so it costs $0.0004 per 1,000 in S3 Standard.
Are DELETE requests free in S3?
Yes, DELETE and CANCEL requests are free. Deleting objects from IA or Glacier classes before their minimum storage duration still triggers a prorated storage charge.
Does a failed request count toward S3 request charges?
Often, yes. According to the Amazon S3 user guide, bucket owners are generally billed for successful responses and HTTP 4XX client errors, but not for 5XX server errors such as 503 Slow Down. Some 4XX codes are exempt, and an AccessDenied is not charged when the request comes from outside your account or AWS organization. A client in your own account that keeps retrying a NoSuchKey or AccessDenied still shows up on the bill. If you see unexpected AccessDenied traffic, troubleshoot the IAM access denied errors step by step.
Related guides
Ask your AWS account in plain English
Your first 15 runs are free, with no OpenAI key needed.
npx chatwithcloud
