# Quarterly Cloudinary cleanup console for storage and costs

> Open one screen each quarter to see your Cloudinary plan usage, triage bloated, untagged and stale assets, and safely delete what you no longer need.

- Workflow type: app
- Services: Cloudinary
- Categories: Operations, Marketing
- Published: 2026-08-16

## What it does

- Shows your plan health at a glance: storage, bandwidth and transformations against your limits, with the percentage used on each.
- Builds three cleanup queues for you: your biggest files, assets with no tags, and assets nobody has touched since a date you pick (twelve months by default).
- Lets you work straight from the list. Tick the assets you want, then tag them as archive candidates, fix a bad name, or note why you are keeping one.
- Keeps deletions safe with a full preview and a typed confirmation, then shows how many megabytes you clawed back.

## What you'll need

- A Cloudinary account with permission to manage and delete assets.
- Your Cloudinary cloud name, API key and secret, all shown on your Cloudinary dashboard.
- A rough sense of which campaigns or folders are retired, so you know what is safe to clear.

## Prompt

Build me a media library cleanup console for Cloudinary that I open at the start of every quarter to get our storage and costs back under control. The audience is the ops or web lead who owns the Cloudinary bill, so this should read as a working surface rather than a report: I want to see what is bloating the account and act on it from the same screen.

Across the top, show a plan health strip built from Get Account Usage. Display storage, bandwidth and transformations, each as the amount used against our plan limit with the percentage used called out as the headline number. Make anything above 80 percent visually obvious. Credits cover storage, bandwidth and transformations together, and it is common to hit the transformation quota long before storage, so all three deserve equal weight in the strip.

Below the strip, show three triage queues, each built from Search Assets with its own query expression. The first is biggest files, sorted by size descending. The second is assets that have no tags. The third is assets not touched since a date I choose, where the stale threshold defaults to twelve months back from today and has a control to change it. Each queue loads independently and shows its own result count.

Every queue is a checkbox list. Each row shows a thumbnail of the asset, its file size, the folder it lives in, and its upload date. Give each queue a select-all control and keep a visible count of how many rows I currently have selected.

Once rows are selected I can act on them. Tag them as archive candidates with Manage Tags. Correct a bad name on a single row with Rename Asset. Write a keep reason onto an asset with Update Resource by Asset ID, saving the reason as contextual metadata on the asset itself so it travels with the asset outside this app. Remove the selected rows with Delete Resources by Public ID. Separately, offer a batch option that clears a whole retired campaign in one go through Delete Resources by Tag, where I pick the tag from the tags already present on the loaded assets or type one in.

Keep decisions must persist in the app, per asset. When I mark an asset as keep, remember that so the asset stops resurfacing in the next quarterly review. Show me how many assets are currently suppressed and give me a way to clear that list when I want a clean sweep.

Deletion needs guardrails. Before any delete runs, show a preview of exactly what is about to be removed: the list of assets, the count, and the total megabytes involved. Then require me to type a confirmation before it executes. After the delete completes, show the megabytes reclaimed and keep a running total of reclaimed storage for the session so I can see the payoff of the cleanup.

Two practical notes for the handlers. Cloudinary's admin endpoints page with a next_cursor, so respect it when loading queues instead of showing only the first page. The admin API is also capped per hour, so batch the bulk tag and delete calls rather than firing one request per asset, and surface a clear message if we hit the cap instead of failing silently.

## How to customize

- Change the stale cutoff from the default twelve months to whatever matches your review cycle.
- Rename the archive candidate tag so it matches the labels your team already uses.
- Point the queues at a single folder or campaign when you only want to clean up one part of the library.

## FAQ

### Will this delete anything on its own?

No. Nothing is removed until you select the assets, review a preview of exactly what is going, and type a confirmation. The console only acts when you tell it to.

### How does it decide an asset is stale?

It compares when each asset was last uploaded or updated against a cutoff date you choose. The default is twelve months back, and you can move it at any time.

### What if I want to keep something it keeps flagging?

Mark it as keep and write a short reason. The console remembers that decision for that asset so it stops resurfacing in your next quarterly review, and the reason is saved onto the asset itself.

### Can I clear a whole retired campaign at once?

Yes. There is a batch option that removes every asset carrying a chosen tag, so a campaign you tagged at upload time can be retired in one step. It still runs behind the same preview and typed confirmation.

### Do I need a paid Cloudinary plan?

No. It works on any Cloudinary plan. The usage strip reads whatever limits your plan carries, so free plan users see their free plan limits.

Use this prompt in General Input: https://www.generalinput.com/prompts/quarterly-cloudinary-cleanup-console-for-storage-and-costs