Home/Library/Reduce S3 Request and API Costs
How-to · AWS Cost Optimization · Updated June 2026

How to Reduce Amazon S3 Request and API Costs

Most S3 cost advice stops at storage class, but on chatty workloads the request and API line can rival or exceed storage. PUT costs $0.005 per 1,000 and GET $0.0004 per 1,000, so millions of tiny operations add up fast. Batch writes, cache reads, and the API bill drops.

Key takeaways

Amazon S3 request and API costs are a volume problem, not a storage problem. PUT, COPY, POST, and LIST requests cost $0.005 per 1,000 and GET and SELECT cost $0.0004 per 1,000 in S3 Standard, so a workload writing or reading millions of small objects can run a request bill that rivals storage. Cut it by batching small writes into fewer larger objects, caching repeat reads with Amazon CloudFront, tuning storage classes to access patterns, and reducing LIST and HEAD calls. DELETE requests are free. Fix the request pattern and the API bill falls even if stored bytes do not change.

Last updated: June 2026 · Written by Fredrik Filipsson and reviewed by Morten Andersen · See, Cut, Lock, Run method

Amazon S3 bills three things separately: the data you store, the data you transfer out, and the requests you make against the API. The request line is the one teams forget, because each operation is fractions of a cent and the damage only shows at scale. A pipeline writing a million small files an hour, or a service that reads the same object thousands of times instead of caching it, can spend more on requests than on storage. This guide is part of our complete guide to AWS cost optimization, the cluster pillar it links up to.

What are Amazon S3 request and API costs?

S3 request costs are per-operation charges for the API calls you make against a bucket, separate from storage and data transfer. In S3 Standard, PUT, COPY, POST, and LIST requests cost $0.005 per 1,000 and GET and SELECT requests cost $0.0004 per 1,000, while DELETE and cancel operations are free, per the Amazon S3 pricing page. The rates multiply for colder storage classes: Standard-Infrequent Access, Glacier Instant Retrieval, and the archive tiers charge more per request and add retrieval fees, which is exactly why moving tiny, frequently accessed objects to a cold class can raise costs rather than lower them. A PUT costs the same whether the object is one byte or five gigabytes, so object size and request count, not stored volume, drive this line. Verify current rates for your Region, since pricing varies by Region and changes over time.

How do I reduce S3 request and API costs step by step?

Reduce the request bill by lowering operation volume: batch writes, cache reads, and stop scanning buckets. Work through these steps:

  1. Find your request hot spots. Use S3 Storage Lens to see request counts by bucket and prefix, and identify which workloads generate the most PUT and GET volume. You cannot cut what you have not measured.
  2. Batch small objects. Aggregate many small writes into fewer, larger objects before uploading, since each PUT bills the same regardless of size. Logging and telemetry pipelines that write per-event files are the classic offenders; buffer and batch them.
  3. Cache reads with CloudFront. Put Amazon CloudFront in front of frequently read objects so repeat reads serve from the edge cache instead of generating billable S3 GET requests, which also lowers data-transfer cost and latency.
  4. Tune storage classes and lifecycle. Match storage classes to real access patterns, and avoid lifecycle rules that transition or retrieve huge numbers of tiny objects, because transition and retrieval requests are themselves billable and can cost more than they save.
  5. Optimize LIST and HEAD calls. Maintain an index or inventory of object keys instead of repeatedly listing buckets, and use S3 Inventory for large-scale metadata jobs rather than recursive LIST operations.

This is the same waste-elimination work in our AWS cost optimization service. The storage-class side of the same buckets is covered in the sibling guide S3 Intelligent-Tiering: when it saves and when it costs more.

Why batching wins

A PUT bills $0.005 per 1,000 regardless of object size. A pipeline writing 10 million one-kilobyte files pays for 10 million PUTs; the same data written as 10,000 larger objects pays for 10,000. Same bytes stored, a thousandfold fewer request charges. Batching is usually the largest S3 request saving available.

Do storage classes change S3 request costs?

Yes, colder storage classes charge more per request and add retrieval fees, so the wrong class can raise the API bill even as it lowers storage. S3 Standard has the lowest per-request rates and no retrieval fee, which makes it the right home for frequently accessed objects despite its higher per-gigabyte storage price. Infrequent Access and the Glacier tiers cost less to store but more per GET and per retrieval, so moving hot or small objects there can backfire: the request and retrieval charges outweigh the storage saving. The rule is to tier by access frequency and object size together, keeping small, frequently read objects in Standard and reserving cold classes for large objects that are genuinely rarely touched. For the automated version of this decision, see when S3 Intelligent-Tiering saves and when it costs more.

Is your S3 request line bigger than your storage line?

Our AWS cost audit profiles request volume by bucket, fixes the write and read patterns, sets the right storage classes, and proves the saving across storage, requests, and transfer before anything is committed. On the performance model, you pay only from realized savings. No savings, no fee.

Book a cloud cost audit →

How do I monitor S3 request costs over time?

Monitor request cost with S3 Storage Lens and Cost Explorer so a chatty new workload is caught before it compounds. S3 Storage Lens gives request counts, error rates, and access patterns by bucket and prefix across an account or organization, which makes it the right tool to spot a service that has started generating millions of needless GETs. Pair it with AWS Cost Explorer filtered to the S3 request usage types, and set a budget alert so a sudden jump in PUT or GET volume triggers a notification rather than a surprise at month end. This is the Lock step of our method: guardrails and alerts that keep a fixed problem from quietly returning. The organization-wide pattern for this kind of continuous oversight appears in how to use AWS Compute Optimizer across an organization.

Go deeper · free field guide

The AWS Cost Optimization Field Guide includes the S3 cost checklist we run across storage, requests, and transfer, so chatty workloads stop quietly inflating the bill.

Frequently asked questions

How much do Amazon S3 requests cost?

In S3 Standard, PUT, COPY, POST, and LIST requests cost $0.005 per 1,000 and GET and SELECT cost $0.0004 per 1,000. DELETE and cancel operations are free. Colder storage classes charge more per request and add retrieval fees. Rates vary by Region, so confirm against the AWS pricing page.

Why is my S3 request bill higher than my storage bill?

Because a PUT costs the same regardless of object size, workloads that write or read millions of tiny objects rack up request charges that can exceed storage cost. Logging, telemetry, and per-event file pipelines are common causes. Batching small objects into larger ones is the usual fix.

Does CloudFront reduce S3 request costs?

Yes. Amazon CloudFront caches frequently read objects at the edge, so repeat reads serve from the cache instead of generating billable S3 GET requests. It lowers request cost, data-transfer cost, and latency together, which makes it especially effective for static assets and popular files.

Are S3 DELETE requests free?

Yes, DELETE and cancel operations carry no request charge in any storage class. Note that lifecycle transitions and retrievals are billable, however, so cleaning up via aggressive lifecycle rules on huge numbers of tiny objects can still generate transition request costs.

The short version

S3 request and API cost is a volume problem. PUT bills $0.005 per 1,000 and GET $0.0004 per 1,000, so millions of small operations add up regardless of stored bytes. Batch small writes into larger objects, cache repeat reads with CloudFront, tier storage classes by access frequency and object size, and cut needless LIST and HEAD calls. Then monitor with Storage Lens so it stays fixed. When you want every S3 line, storage, requests, and transfer, profiled and proven down, that is the work our AWS cost optimization service delivers.

Primary sources & further reading

Cloud pricing and service behavior change frequently. Verify the specifics in this guide against the providers’ own current documentation and the FinOps Foundation: AWS pricing ↗, AWS documentation ↗ and FinOps Foundation Framework ↗. This article also reflects Cloud Cost Room’s hands-on, vendor-neutral engagement experience.

Co-founder of Cloud Cost Room and a FinOps Certified Practitioner, with 20 years in IT and cloud cost optimization across AWS, Azure, Google Cloud and OCI. More about Fredrik →

More from the AWS Cost Optimization cluster

See every guide in the AWS Cost Optimization cluster →

The Cloud Cost Brief

Cloud pricing moves. We tell you when it matters.

New commitment instruments, FOCUS changes, hyperscaler pricing shifts, and the plays that actually move a bill. No schedule, no filler.

Subscribe · Work email only