Find and clean up what your Amazon S3 storage really costs

By General Input

Walk your buckets folder by folder to see where the bytes and the money actually sit, then archive, tag, or delete what you no longer need.

Integrations

  • Amazon S3
  • Slack Bot

Type

App

Categories

  • Engineering
  • Operations

Build an app for reviewing and cleaning up what my Amazon S3 storage is actually costing me. It is a browsing and cleanup tool: I open it, drill into my storage, and act on what I find without leaving the screen. Everything reads and writes through Amazon S3, with an option to post a summary to Slack.

The landing view lists my buckets using S3 List Buckets, and for each bucket shows total object count and total size. Compute those by paginating S3 List Objects (V2) across the bucket and summing as you go, 1,000 keys per page following the continuation token, with a visible progress indicator because large buckets take a while. Cache each bucket's scan result together with a scanned-at timestamp, show that timestamp in the UI, and give me a Rescan button per bucket and one for all buckets. Do not rescan automatically on every page load.

Clicking a bucket opens a folder explorer that walks key prefixes one level at a time using S3 List Objects (V2) with prefix set to the current path and delimiter set to a forward slash, so CommonPrefixes become the folders and Contents become the objects sitting directly at that level. For every folder row, roll up the entire subtree beneath it: total size, object count, the storage class mix as a breakdown, and the oldest and newest LastModified date. Breadcrumbs let me climb back up, and I can sort rows by size, object count, or age. The whole point is to see which folders are holding the bytes instead of guessing at the bucket level.

A cold data view lists prefixes where nothing has been modified in more than a configurable number of days, defaulting to 180, ranked by size. Next to each prefix show an estimated monthly storage cost derived from its size and its storage class mix, using a per gigabyte rate table I can edit in settings so it matches my region. Ship sensible defaults for Standard, Standard-Infrequent Access, Intelligent-Tiering, Glacier Instant Retrieval, Glacier Flexible Retrieval, and Deep Archive, and make clear in the UI that the estimate covers storage only, not requests or data transfer.

From any view I can multi select individual objects or select a whole prefix, then act on the selection. Archive rewrites the objects to a cheaper storage class with S3 Copy Object, copying each object onto its own key in the same bucket with the copy source set to that key, the metadata directive set to COPY, and the storage class set to the target tier, which I pick from a dropdown that defaults to Glacier Instant Retrieval. Tag for later review uses S3 Put Object Tagging to write a tag set I configure, defaulting to review=pending-delete, and should warn me that this replaces whatever tags the object already has. Delete uses S3 Delete Multiple Objects in batches of up to 1,000 keys.

Deletion must always be explicit and confirmed, never a single click. Before any delete, show a summary of exactly what is selected, meaning the object count, the total size, and the prefixes involved, and require me to type the bucket name or the prefix to confirm. When a whole prefix is selected, expand it to the real object list first so the count is never a guess. After every action, show the outcome: how many objects succeeded, which ones failed and why, and the reclaimed or shifted size. Skip and flag objects larger than 5 GB when archiving because a single copy call cannot handle them, skip objects already sitting in the target storage class, and surface a note that the cheaper archive tiers bill a minimum storage duration.

Selecting a single object opens a side panel with its full detail from S3 Head Object: exact size, content type, storage class, last modified date, ETag, and any metadata, with the same archive, tag, and delete actions available for that one object.

A Post summary to Slack button sends the current view's findings plus the actions I took in this session to a channel using the Slack Bot Send a Message operation. Let me pick the channel, set a default in settings, and see a preview of the message before it sends. The message should read like a short report: which bucket and folder I was looking at, the largest or coldest prefixes with their size and estimated monthly cost, and a list of what I archived, tagged, or deleted with the reclaimed size.

Persist an action log of every archive, tag, and delete, recording who ran it, when, the bucket and keys affected, the byte total, and the result, and give me a History view I can review and post to Slack later. Settings persist the cold threshold in days, the price table, the default archive tier, the review tag, and the default Slack channel. Everything else is read live from Amazon S3.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them