s3 cost optimization · 2026 levers

S3 cost optimization — the seven levers that actually move the bill.

S3 looks cheap at $0.023/GB-month until a few hundred terabytes, billions of requests, and an egress line item turn it into a five-figure monthly bill. This page walks through every S3 cost component, the storage classes and lifecycle rules that cut storage spend 40–70%, the hidden costs (incomplete multipart uploads, orphaned versions, request fees) that never show up on the dashboard, and how a partner-led S3 audit — often AWS-funded — closes the whole gap for $0.

typical storage cut
40–70%
egress cut w/ CDN
up to ~85%
audit founder hours
~1–2
cost to you
$0*
TL;DR
  • S3 has four cost components people forget about: storage (priced per class), requests (GET/PUT/LIST add up at scale), data transfer / egress (the silent killer — internet egress runs ~$0.09/GB, cross-Region replication and cross-AZ traffic cost too), and per-object management features (Intelligent-Tiering monitoring, S3 Inventory, replication). Most teams only look at the storage line and miss 30–50% of the spend.
  • The biggest no-regret wins are storage class + lifecycle: turn on S3 Intelligent-Tiering for unpredictable access patterns (it auto-moves objects to colder tiers and back, no retrieval fees on the frequent/infrequent tiers), and write lifecycle policies that transition aging data to Standard-IA / Glacier Instant Retrieval / Deep Archive and expire data you legally can delete. That alone is routinely a 40–70% storage cut.
  • Then chase the hidden costs: incomplete multipart uploads silently billed as storage forever, old object versions piling up under versioning, and request-heavy access patterns. Use S3 Storage Lens to find the waste, CloudFront + VPC gateway endpoints to crush egress, and — if you qualify — a CloudRoute-matched AWS partner runs the audit and the rework, often AWS-funded, so you cut the bill for $0.
the four meters

IWhat you actually pay for in S3 (it is not just storage)

Before you optimize anything, you have to know what S3 meters. Almost every "my S3 bill is huge" surprise traces back to a component the team never looked at — usually requests or egress, not the storage GB count they fixate on.

S3 bills you on four independent meters, and they scale differently. Storage is priced per GB-month and varies by storage class — S3 Standard is roughly $0.023/GB-month in us-east-1, Standard-IA around $0.0125, Glacier Instant Retrieval around $0.004, and Glacier Deep Archive around $0.00099. That is a 23× spread between the hottest and coldest tier for the same byte. Most buckets sit entirely in Standard because nobody set a lifecycle policy.

Requests are priced per 1,000 operations and split by verb. PUT/COPY/POST/LIST requests cost roughly $0.005 per 1,000 in Standard; GET/SELECT cost about $0.0004 per 1,000. That sounds like nothing until an application does billions of small GETs a month, or a misconfigured job LISTs a giant bucket on every run. Colder classes charge more per request and add a per-GB retrieval fee, which is the whole trap with naive tiering: move hot data to Glacier and your request + retrieval bill can exceed what you saved on storage.

Data transfer is the silent killer. Data into S3 is free, and traffic to other AWS services in the same Region is free. But egress to the internet runs roughly $0.09/GB (tiered down at volume), cross-Region replication transfer is billed per GB, and even same-Region cross-AZ traffic between EC2 and a non-gateway path can incur charges. A media or download-heavy product can spend more on S3 egress than on storage.

Management & analytics features are the line nobody reads: S3 Intelligent-Tiering charges a small per-object monitoring fee (~$0.0025 per 1,000 objects/month), S3 Inventory, S3 Storage Lens advanced metrics, S3 Object Lambda, and replication all add metered costs. None of these are large individually, but on a bucket with a billion tiny objects the Intelligent-Tiering monitoring fee alone can swamp the storage savings — which is exactly why Intelligent-Tiering is wrong for huge counts of sub-128KB objects.

The practical takeaway: pull your S3 spend in Cost Explorer grouped by usage type, not just by service. You will see TimedStorage, Requests-Tier1/Tier2, DataTransfer-Out-Bytes, and the monitoring lines broken out. Nine times out of ten the "surprise" lives in a usage type the team had never charted. (Exact rates move; confirm current pricing in the AWS S3 pricing page and your Cost Explorer.)

the one number to pull first

In Cost Explorer, filter to S3 and group by Usage Type. If DataTransfer-Out or Requests-Tier1/Tier2 is a meaningful slice of the total, your fix is not a cheaper storage class — it is CloudFront / VPC endpoints (egress) or fixing an access pattern (requests). Optimizing storage class when 40% of your bill is egress wastes the engagement.

class + Intelligent-Tiering

IIStorage classes and Intelligent-Tiering — matching the byte to the tier

The single highest-leverage S3 decision is which storage class each object lives in. The classes trade storage price against retrieval price, retrieval latency, and minimum-duration / minimum-size charges. Get the match right and storage spend falls 40–70% with no application change.

Here is the mental model. S3 Standard is for hot, frequently accessed data — millisecond access, no retrieval fee, highest storage price. Standard-IA (Infrequent Access) is ~45% cheaper to store but charges a per-GB retrieval fee and has a 30-day minimum storage duration and a 128KB minimum billable object size — perfect for data you keep but rarely touch (older logs, backups you might restore). One Zone-IA is cheaper still but stores in a single AZ, so use it only for reproducible data you can regenerate.

The Glacier family is for archive. Glacier Instant Retrieval gives millisecond access at archive-class storage prices (~$0.004/GB) with a higher retrieval fee and a 90-day minimum — ideal for data accessed maybe once a quarter (medical images, compliance archives you must serve fast). Glacier Flexible Retrieval is cheaper but retrieval takes minutes to hours. Glacier Deep Archive is the floor (~$0.00099/GB, under $1/TB-month) with 12-hour retrieval and a 180-day minimum — the right home for "we must keep this 7 years for compliance and will almost never read it."

The minimum-duration and minimum-size charges are where naive tiering backfires. If you transition millions of 10KB objects to Standard-IA, every one is billed as 128KB and locked for 30 days — you can easily increase the bill. The rule: colder classes are for fewer, larger, genuinely cold objects. For lots of small objects with unknown access patterns, use Intelligent-Tiering instead.

S3 Intelligent-Tiering is the "I do not want to think about it" answer for unpredictable access. You pay a tiny per-object monitoring fee and S3 automatically moves each object between a Frequent Access tier and an Infrequent Access tier (and optionally Archive Instant Access, plus opt-in async Archive and Deep Archive tiers) based on actual access — with no retrieval fees on the frequent/infrequent tiers and no per-object transition charges. If an object goes cold it drops a tier and saves you money; if it gets read again it moves back up automatically. For most application data lakes, user uploads, and analytics data with mixed/unknown patterns, Intelligent-Tiering is the default that captures most of the savings with zero operational risk.

The one place Intelligent-Tiering is wrong: buckets with enormous counts of tiny objects (sub-128KB), where the monitoring fee per object outweighs the tiering savings, and data with a known, predictable lifecycle — for that, a deterministic lifecycle policy (next section) is cheaper because it skips the monitoring fee entirely.

Quick decision rule

Hot, served constantly → S3 Standard (and put CloudFront in front to cut both egress and GET load).

Unknown / mixed access, reasonable object sizes → Intelligent-Tiering. Set it and forget it.

Known-cold, accessed a few times a year, must be instant → Glacier Instant Retrieval.

Compliance archive, rarely or never read → Glacier Deep Archive via a lifecycle rule.

Reproducible / regenerable data → One Zone-IA (accept the single-AZ durability tradeoff to save ~20% over Standard-IA).

transitions + expirations

IIILifecycle policies — automate the byte from hot to cold to gone

A lifecycle policy is a per-bucket (or per-prefix / per-tag) set of rules that automatically transitions objects to colder classes as they age and expires (deletes) objects you no longer need. This is the workhorse of S3 cost optimization, and most buckets have none.

Lifecycle rules do two things: transition actions move objects between storage classes after N days, and expiration actions delete objects after N days. A typical log-data policy looks like: keep in Standard for 30 days (hot, you are querying recent logs), transition to Standard-IA at 30 days, transition to Glacier Instant Retrieval at 90 days, transition to Deep Archive at 365 days, expire at the end of your retention obligation (say 7 years for compliance, or 90 days if you have no obligation and just want it gone).

The expiration half is the one teams forget, and it is often the biggest single win. Data you are legally allowed to delete and never read again is pure waste — temp files, intermediate ETL outputs, expired exports, old build artifacts, debug dumps. An expiration rule that deletes them on a schedule removes the storage cost permanently instead of paying to archive bytes nobody will ever read. Always confirm retention/compliance requirements before writing an expiration rule, but once confirmed, expiration beats archival every time.

Scope rules tightly. Lifecycle rules can filter by prefix (e.g. logs/, tmp/, exports/) and by object tag, so you can apply aggressive expiration to tmp/ while keeping invoices/ archived for years — all in one bucket. Tag-based rules let application teams mark objects (lifecycle=ephemeral) and have the policy act on them without restructuring prefixes.

A few gotchas that cost money: transitions themselves carry a small per-object request charge, so transitioning billions of tiny objects can cost more in transition fees than it saves — batch by size, or use Intelligent-Tiering for the tiny-object case. Also remember the minimum-duration charges: an object transitioned to Glacier Deep Archive and deleted before 180 days is still billed for the full 180 days, so do not transition short-lived data into long-minimum classes.

the policy most buckets are missing

Transition: Standard → Standard-IA at 30d → Glacier Instant Retrieval at 90d → Deep Archive at 365d. Expiration: delete anything under tmp/ or cache/ at 7–30d, and expire compliance data at the end of its real retention window. Add a separate rule to clean up incomplete multipart uploads (next section) and expire noncurrent versions. This four-line policy is frequently a 50%+ storage cut by itself.

hidden cost #1

IVIncomplete multipart uploads — the bytes you are billed for but cannot see

This is the single most common hidden S3 cost, and it is invisible in the console object list. When a multipart upload fails or is abandoned partway, the parts already uploaded sit in the bucket, billed as storage, forever — and they do not appear in the normal object listing.

S3 uses multipart upload for any large object: the client splits the file into parts, uploads each part, then sends a "complete" call that assembles them. If the client crashes, loses network, or the process is killed between uploading parts and completing, those parts persist. They count against your storage bill at the storage-class rate, but they are not regular objects — you will not see them browsing the bucket, only by explicitly listing multipart uploads (ListMultipartUploads) or via S3 Storage Lens, which surfaces "incomplete multipart upload bytes" as a dedicated metric.

On busy buckets with flaky clients (mobile uploads, large media ingestion, CI artifact pushes), this can silently accumulate to terabytes. Teams discover it only when they finally run Storage Lens or a partner audit and find that 10–30% of their "storage" is orphaned upload parts that no living object references.

The fix is one lifecycle rule. Add an AbortIncompleteMultipartUpload action that deletes incomplete uploads after, say, 7 days. Set it on every bucket as a default — there is essentially no downside, since a legitimate upload that has not completed in 7 days has failed anyway. This single rule, applied org-wide, is one of the highest ROI changes in all of S3 cost optimization because it costs nothing to implement and recovers pure waste.

hidden cost #2

VVersioning and the noncurrent-version pile-up

Versioning is great for protection — it keeps every prior version of an object so you can recover from accidental overwrites or deletes. But every version is billed as full storage, and without an expiration rule for old versions, a frequently-rewritten bucket quietly stores dozens of copies of data you will never restore.

When versioning is enabled, overwriting an object does not replace it — it creates a new "current" version and demotes the old one to a "noncurrent" version that still occupies storage. Deleting an object just adds a delete marker; the data is still there, still billed. For a bucket where objects are rewritten often (state files, frequently regenerated reports, mutable datasets), the noncurrent versions can dwarf the current data. Like incomplete multipart parts, noncurrent versions are easy to miss because the default object view shows only current versions.

The fix, again, is lifecycle — but the version-aware kind. Add NoncurrentVersionTransition rules to push old versions to a cheaper class (e.g. Standard-IA or Glacier) after a few days, and NoncurrentVersionExpiration to delete them after N days (keep, say, the last 30 days of versions for recovery, then expire). You can also limit the number of newer noncurrent versions to retain. This keeps the protection benefit of versioning for the recent window that actually matters while stopping the unbounded accumulation.

Do not turn versioning off to save money — you lose the accidental-deletion protection and it does not delete the existing noncurrent versions anyway. Keep versioning on, and govern it with a noncurrent-version expiration rule. Pair it with the incomplete-multipart cleanup from the previous section in the same lifecycle configuration; together they routinely recover 15–35% of total bucket size on write-heavy buckets.

requests + data transfer

VICutting request costs and the egress bill

Once storage is optimized, the remaining spend is usually requests and data transfer. These need different tools than storage class — caching, architecture, and network path changes rather than tiering.

On the request side, the wins come from access-pattern fixes. Coalesce many small objects into fewer larger ones where you can (one 10MB file instead of a thousand 10KB files cuts both request count and the 128KB-minimum penalty in IA classes). Avoid full-bucket LIST operations in hot paths — cache an index or use S3 Inventory (a scheduled flat-file manifest of your bucket) instead of LISTing live. Put CloudFront in front of read-heavy buckets: cached objects are served from the CDN edge, so the origin GET requests (and their cost) collapse to cache-miss frequency. And avoid pointing analytics jobs at cold storage classes that charge premium per-request and per-GB retrieval fees — keep query targets in Standard or Intelligent-Tiering.

On the data transfer side, the dominant cost is internet egress at ~$0.09/GB. The two structural fixes are CloudFront and VPC endpoints. CloudFront not only cuts request load — egress from S3 to CloudFront is free, and CloudFront egress to the internet is cheaper than direct S3 egress and falls faster at volume, so a download-heavy product can cut egress spend by well over half just by serving through the CDN (and qualifies for the CloudFront free tier and committed-use discounts on top).

VPC endpoints attack a different egress leak: traffic from your EC2/EKS workloads to S3. A gateway VPC endpoint for S3 is free and keeps that traffic on the AWS private network, avoiding NAT Gateway data-processing charges (~$0.045/GB) that you would otherwise pay when instances in private subnets reach S3 through a NAT. If your application reads heavily from S3 through a NAT Gateway, adding the (free) S3 gateway endpoint is an immediate no-regret saving. Keep S3 traffic in-Region wherever possible — same-Region S3-to-EC2 transfer is free, while cross-Region replication and cross-Region reads are billed per GB.

Finally, watch replication. Cross-Region Replication (CRR) and Same-Region Replication (SRR) are valuable for DR and compliance, but you pay for the replication PUT requests, the inter-Region data transfer (for CRR), and a second copy of storage in the destination. If you are replicating an entire bucket when only a compliance-critical prefix needs it, scope replication to that prefix and put the destination copy in a cheaper storage class. Replication Time Control (RTC) adds a further per-GB fee — only enable it where you actually need the 15-minute SLA.

find the waste

VIIS3 Storage Lens — the tool that finds where the money is

You cannot optimize what you cannot see. S3 Storage Lens is the org-wide analytics dashboard that surfaces exactly the metrics that hide the waste — and the free tier already shows enough to find most of it.

Storage Lens aggregates usage and activity across all your buckets (and across accounts in an AWS Organization) and visualizes the metrics that matter for cost: total storage by storage class, object count and average object size, incomplete multipart upload bytes, noncurrent version bytes, request counts by type, and "cost optimization" recommendations. The free default dashboard gives ~28 metrics; the paid advanced tier adds activity metrics, prefix-level detail, and longer retention. For most teams, the free dashboard already reveals the three big leaks: buckets with no lifecycle policy sitting entirely in Standard, large incomplete-multipart byte counts, and ballooning noncurrent versions.

Use it as the audit map. Sort buckets by total size, then look at each large bucket's storage-class distribution (all-Standard is a red flag), its incomplete-multipart bytes (orphaned uploads to clean up), and its noncurrent-version bytes (versioning to govern). Average object size tells you whether Intelligent-Tiering or a lifecycle policy is the right tool — tiny average size means watch the per-object fees. Storage Lens turns "our S3 bill is too high" into a ranked, specific list of which buckets to fix and how.

Complement it with S3 Inventory for object-level detail when you need it (which objects, which storage class, which versions), Cost Explorer grouped by usage type for the dollar view, and Cost Anomaly Detection / Budgets to get alerted when S3 spend spikes before it becomes a surprise. The combination — Storage Lens to find waste, Inventory for detail, Cost Explorer for dollars, Budgets for alerts — is the standard FinOps toolkit for S3.

the $0 path

VIIIA partner-led S3 audit — often AWS-funded, so you cut the bill for $0

Everything above is doable in-house. The reason teams route it to a CloudRoute-matched AWS partner is speed, completeness, and funding: a partner runs the full audit and does the rework, and for qualifying engagements AWS funds it — so the customer cuts the bill without paying for the optimization work.

The mechanic: AWS funds partner-led cost-optimization and Well-Architected engagements through its partner programs, and a Well-Architected Review (the Cost Optimization pillar covers exactly the S3 levers on this page) can unlock remediation credits. For a credit-eligible / qualifying engagement, the partner is paid through AWS programs and the customer pays $0 — you walk away with a permanently lower S3 bill and an unspent budget. Honest framing: AWS-funding applies to qualifying engagements; where it does not, it is a vetted-partner referral that pays for itself out of the savings, since a well-run S3 audit routinely cuts the line item 40–70%.

What the partner actually does: pulls Storage Lens + Cost Explorer (grouped by usage type) to rank waste, writes the lifecycle policies (transitions, expirations, incomplete-multipart abort, noncurrent-version expiration), flips appropriate buckets to Intelligent-Tiering, scopes and right-classes replication, fronts read-heavy buckets with CloudFront, adds the free S3 gateway VPC endpoint to kill NAT egress, and sets up Budgets + Cost Anomaly Detection so the savings stick. Founder time is typically one to two hours of access-granting and decisions; the partner does the rework.

CloudRoute's role is routing: we match you to a vetted AWS partner with a real S3 / cost-optimization track record in your Region and stack, the partner handles the AWS-funding paperwork where the engagement qualifies, and CloudRoute is paid by the partner — not by you. You see one outcome: a lower bill.

lever comparison

S3 cost levers ranked — savings, effort, and risk

Not every lever is worth the same effort. This is the rough ranking we use to sequence an S3 audit: the no-regret moves first (free, zero downside), then the high-savings storage moves, then the architectural egress work. Savings ranges are typical, not guarantees — they depend on your current access patterns and what is already optimized.

LeverTypical savingsEffortRisk / tradeoffTool
Abort incomplete multipart uploads5–30% of bucket sizeTrivial (1 rule)None — pure waste recoveryLifecycle rule
Expire noncurrent versions10–35% on write-heavy bucketsTrivial (1 rule)Shortens recovery window — keep ~30dLifecycle rule
Expire truly deletable data10–40% of storageLowMust confirm retention/compliance firstLifecycle rule
Lifecycle transitions (IA / Glacier)40–70% of storageLow–mediumRetrieval + minimum-duration fees if mis-scopedLifecycle rule
Intelligent-Tiering20–60% on mixed accessLowMonitoring fee hurts on huge tiny-object countsBucket / prefix config
S3 gateway VPC endpointRemoves NAT ~$0.045/GB on S3 trafficLowNone — endpoint is freeVPC config
CloudFront in front of S3Egress cut 50–85% + fewer GETsMediumCache invalidation / TTL designCloudFront
Scope / right-class replicationCuts duplicate storage + transferMediumConfirm DR/compliance scopeReplication config
Coalesce small objects / fix LISTsCuts request + 128KB-min costsMedium–highApplication-level changeApp / S3 Inventory
Sequence: do the trivial no-regret lifecycle rules on every bucket first (multipart abort + noncurrent-version expiration), then storage-class moves on the biggest buckets, then the egress architecture. The first three rows are essentially free money. Exact prices move — verify in the AWS S3/CloudFront pricing pages and your Cost Explorer.
ready to stop overpaying for S3?
Get matched with a partner who runs the S3 audit — often AWS-funded
Start in 3 minutes →
a recent match

A media startup cut S3 ~58% — anonymized

inquiry · series-a media/UGC platform, EU-Central
Series-A user-generated-content platform, ~14 engineers, ~340 TB in S3, AWS bill ~$31K/month (S3 ~$9.4K of it)

Situation: Fast-growing UGC product. Every bucket sat 100% in S3 Standard with no lifecycle policy. Mobile uploads created a constant stream of failed multipart uploads. Versioning was on bucket-wide with no noncurrent expiration. Thumbnails and originals were served directly from S3 to end users — the DataTransfer-Out line was nearly as large as storage. The two-person platform team had no bandwidth to dig into S3 internals.

What CloudRoute did: Routed within 20 hours to an EU-Central partner with a media/S3 + cost-optimization track record. The engagement ran as an AWS-funded Well-Architected Cost pillar review. The partner: added AbortIncompleteMultipartUpload (7d) and noncurrent-version expiration (30d) org-wide; moved originals to Intelligent-Tiering; wrote lifecycle transitions for processed derivatives (Standard → Standard-IA at 30d → Glacier IR at 120d); fronted the delivery buckets with CloudFront; and added the free S3 gateway VPC endpoint to stop the transcoding fleet paying NAT egress to read source files.

Outcome: Recovered ~22 TB of orphaned multipart parts and ~31 TB of noncurrent versions in week one (pure waste). S3 line dropped from ~$9.4K to ~$3.9K/month — a ~58% cut — within two billing cycles, with egress down ~71% after CloudFront. Total AWS bill fell ~$5.5K/month. The Well-Architected engagement was AWS-funded; CloudRoute's commission was paid by the partner. The customer paid $0 for the optimization work.

engagement window: 3 weeks · founder time: ~1.5 hours · monthly S3 savings: ~$5.5K · cost to customer: $0

faq

Common questions

How much can S3 cost optimization actually save?
For a bucket footprint that has never been optimized, a 40–70% cut to the storage line is typical, and egress can fall 50–85% if you move read-heavy delivery behind CloudFront. The biggest early wins are usually pure-waste recovery (incomplete multipart uploads, orphaned noncurrent versions, deletable temp data) that costs nothing to implement. Total savings depend on how much is already optimized and on your access patterns — a bucket that is mostly hot, frequently-served data has less headroom than a cold archive sitting in Standard.
What is the single easiest S3 cost win?
Add a lifecycle rule that aborts incomplete multipart uploads after 7 days, on every bucket. Failed and abandoned multipart uploads leave parts that are billed as storage forever and do not show up in the normal object list, so they accumulate silently — often 5–30% of a busy bucket. The rule has essentially no downside (a legitimate upload that has not completed in 7 days has failed) and recovers pure waste. Pair it with a noncurrent-version expiration rule for the second-easiest win.
Intelligent-Tiering or lifecycle policies — which should I use?
Use Intelligent-Tiering when access patterns are unknown or mixed and object sizes are reasonable — it auto-moves objects between tiers based on real access with no retrieval fees on the frequent/infrequent tiers, so you cannot get the timing wrong. Use deterministic lifecycle transitions when you know the access pattern (e.g. logs are hot for 30 days then cold forever) because it skips the per-object monitoring fee. Avoid Intelligent-Tiering on buckets with enormous counts of tiny (sub-128KB) objects, where the monitoring fee can outweigh the savings; use a lifecycle policy or coalesce the objects instead.
Why is my S3 bill high when my storage is small?
Because storage is only one of four meters. The usual culprits when storage looks small are requests (billions of small GETs, or full-bucket LISTs on every job run) and data transfer / egress (serving objects directly to the internet at ~$0.09/GB, cross-Region replication, or workloads reaching S3 through a NAT Gateway). Pull your S3 spend in Cost Explorer grouped by usage type — if DataTransfer-Out or Requests-Tier1/Tier2 is a big slice, the fix is CloudFront, VPC gateway endpoints, and access-pattern changes, not a cheaper storage class.
Does moving data to Glacier always save money?
No — and assuming it does is the most common S3 optimization mistake. Glacier classes have low storage prices but charge higher per-request and per-GB retrieval fees and impose minimum storage durations (90 days for Glacier Instant Retrieval, 180 for Deep Archive). If you transition data that still gets read, the retrieval fees can exceed the storage savings; if you transition short-lived data into a long-minimum class and delete it early, you pay the full minimum anyway. Glacier wins for genuinely cold, larger objects you will rarely or never read — match the access pattern to the class.
How do I cut S3 data transfer (egress) costs?
Two structural moves. First, put CloudFront in front of read-heavy buckets: S3-to-CloudFront transfer is free, CloudFront internet egress is cheaper than direct S3 egress and discounts faster at volume, and caching collapses origin GET costs — a download-heavy product can cut egress well over half. Second, add a (free) S3 gateway VPC endpoint so your EC2/EKS workloads reach S3 over the AWS private network instead of paying NAT Gateway data-processing fees (~$0.045/GB). Also keep traffic in-Region (same-Region S3-to-EC2 is free) and scope cross-Region replication to only what needs it.
What tool shows me where my S3 waste is?
S3 Storage Lens. Its free dashboard aggregates every bucket and surfaces exactly the cost-leak metrics: storage by class, object count and average size, incomplete-multipart-upload bytes, noncurrent-version bytes, and request activity — plus cost-optimization recommendations. Sort buckets by size and look for all-Standard distribution (no lifecycle policy), large incomplete-multipart bytes, and ballooning noncurrent versions. Pair it with S3 Inventory for object-level detail and Cost Explorer (grouped by usage type) for the dollar view.
Is the partner-led S3 audit really free?
For qualifying engagements, yes. AWS funds partner-led cost-optimization and Well-Architected engagements through its partner programs, and a Well-Architected Review (Cost Optimization pillar) can unlock remediation credits — so for a credit-eligible engagement the partner is paid by AWS and you pay $0 while keeping the savings. Where an engagement does not qualify for funding, it is a vetted-partner referral that pays for itself out of the savings, since a thorough S3 audit routinely cuts the line item 40–70%. CloudRoute is paid by the partner, never by you.

Want your S3 bill cut 40–70% without doing the work yourself?

CloudRoute routes you to a vetted AWS partner who runs the S3 audit and the rework — often AWS-funded, so you cut the bill for $0. One to two hours of your time. No procurement.

typical storage cut40–70%
matched within< 24h
cost to you$0*
S3 Cost Optimization — Cut Storage & Egress 40–70% (2026) · CloudRoute