WP Media Audit works it out properly: every image checked against content, blocks, featured images, Elementor data and ACF fields — then the unused pile, the duplicates and the oversized originals land in one scored audit, with cleanup that goes to the restorable trash.
FROM $49/YEAR · LIFETIME OPTION · 14-DAY GUARANTEE
“Fourteen hundred images. We recognised maybe two hundred. Nobody would delete anything, because nobody could say what was safe — so we bought more storage instead.”— Every media library, eventually
Deleting blind breaks pages; keeping everything costs disk, backups and migrations forever. The missing piece is proof of usage — which is precisely the tedious, look-everywhere job software should do. WP Media Audit checks everywhere references actually live, and shows its reasoning per image.
One scan inventories every image and resolves what actually references it. Everything after that — the score, the findings, the cleanup — stands on that evidence, and every finding links straight to the affected images.
Featured images, classic and block content, [gallery] shortcodes, upload URLs (size-suffix normalised), post meta at large — including Elementor page data — plus site icon and logo, theme settings, widgets and term images. Detection over-captures by design: when in doubt, an image counts as used, so the unused list errs safe.
ACF stores image fields as bare numbers — naive matching would count a price of 70 as a reference to attachment 70. The scanner only counts numbers verified through ACF's own field-key twin, so custom-field references are caught and coincidences never are.
“178 images in use have no alt text” is a claim; the filtered library behind it — thumbnails, dimensions, weights, per-image “used by” reasons, edit links — is the evidence. Every finding carries a see-the-images link, and the tiles on the Overview are filters too.
Byte-identical files grouped by hash — the re-upload with a different name is caught. Each set shows a suggested keeper (a used copy when one exists) and the reclaimable bytes; the unused extras can be trashed in one go while keepers stay put.
WordPress quietly scales huge uploads and serves the smaller copy — but keeps the camera original on disk forever. The audit judges the kept original's dimensions and size, because that's what your storage and backups actually pay for. Thresholds are yours to set.
Trash everything unused, one image, or just the unused duplicate copies. Every image is re-checked as still-unused at the moment of trashing — the scan is a preview, never the authority. Batches are logged and restorable in one click; the plugin never deletes a file itself.
The whole audit as a branded A4 report — your name, logo, colour and footer note — printable or as a true PDF download, plus a full-inventory CSV for the spreadsheet crowd. Made for the “here's what we found, here's the plan” conversation.
A scheduled scan that emails the score, what changed since the last digest, and the top findings — Mondays at 8 or the 1st of the month, your call. Self-healing schedule, with a send-now button for hosts where WP-Cron never fires.
Thousands of uploads, hundreds of drafts that never published. The unused filter shows exactly what nothing references — with the reasoning per image, not a leap of faith.
You took over; the library is an attic. One scan turns it into an inventory with a score — and the white-label report turns that into the kick-off deliverable.
The same logo uploaded eleven times under eleven names. Content-hash matching finds every copy, keeps the one in use, and trashes the rest — restorably.
Hosting and backups price by the gigabyte, and camera originals are the heaviest thing on most sites. The oversized view shows exactly where the weight is — including the originals WordPress hides behind scaled copies.
“Add alt text” is easier when you know which images are actually live. Missing alt is split by in-use, one click from the filtered list — and WP Media SEO can write them automatically.
Half your images live inside Elementor data, invisible to naive cleaners. This scan reads the ids and URLs inside the JSON — an Elementor-built page protects its images like any other.
The library before and after — real bytes including every thumbnail size, not estimates. The after-figure is measured by re-scanning, not promised.
Unused, duplicates, oversized, missing alt — each with counts, weights and a link to the exact images. The “price of 70” row is the point: verified references only, no false alarms.
Everything unused to the trash, each image re-verified at that moment. Files stay on disk; batches restore in one click. The plugin never deletes a file itself.
0–100 from the evidence: unused weight, duplicates, oversized, alt coverage. Clean up, re-scan, watch it move — and let the digest keep watch after.
The usual responses to a bloated library: a cleaner-style plugin, doing it by hand, or buying more storage. Here's the honest breakdown against the strongest of them.
| WP Media Audit (us) | Cleaner-style plugins | |
|---|---|---|
| Checks Elementor page data | ✓ Ids AND urls inside the JSON | ◐ Varies — a classic breakage source |
| ACF fields without false alarms | ✓ Twin-verified — coincidences never count | ◐ Naive number-matching is common |
| Shows WHY an image counts as used | ✓ Per-image reasons in the library | ✗ Used/unused verdict only |
| Re-verifies before deleting | ✓ At the moment of trashing | ◐ Usually acts on the stored scan |
| Trash-first, restorable | ✓ Batches logged, one-click restore | ◐ Some trash, some delete outright |
| Duplicates by content hash | ✓ Renamed copies caught, keeper kept | ◐ Often a separate plugin |
| Judges the KEPT camera originals | ✓ The -scaled trick is accounted for | ✗ Rarely surfaced |
| Alt-text audit split by in-use | ✓ With edit links per image | ✗ Not their job |
| Client-ready deliverable | ✓ White-label report + PDF + CSV (Pro) | ✗ Settings pages don't present well |
| Keeps watch afterwards | ✓ Weekly/monthly digest with deltas (Pro) | ✗ One-off cleanups |
| Free to run | ✗ Pro from $49/yr (free: complete diagnosis) | ◐ Free cores, paid for the useful bits |
Credit where due: the established cleaner plugins have been at this for years and handle the common cases. The differences that matter are trust differences — shown reasoning, twin-verified ACF, re-verification at delete time, trash-first always. Full comparison →
Every plan includes every Pro feature — the cleanup with restore, duplicate handling, CSV export, white-label report with PDF, and the email digest. You're only choosing how many sites.
Up to 10 sites
25 sites · for agencies
Up to 100 sites
Up to 100 sites, forever
Prices in USD. Licence keys are domain-based — no accounts, no phoning home. The free edition (complete diagnosis) is included with every order for staging sites. VAT invoices available.
It resolves usage everywhere references really live: featured images (with the owning post verified live), classic and block content (wp-image classes, image and gallery block ids, [gallery] shortcodes, upload URLs — normalised so photo-300x200.jpg matches photo.jpg), post meta at large including Elementor's page data (both image ids and URLs inside the JSON), ACF image and gallery fields, the site icon and logo, theme settings, widgets and term images like product-category thumbnails. Detection deliberately over-captures: when in doubt, an image counts as used. The unused list is the one you act on, so it errs on the safe side.
ACF stores an image field as a bare number, which is dangerous to match naively — a price of 70 must not count as a reference to attachment 70. The scanner uses ACF's own signature: every real ACF value has an invisible twin row whose value starts with "field_". Only twin-verified numbers (and id arrays) count. That one rule is the difference between an audit you can trust and one that guesses.
Safer than any alternative we know of, for three reasons. One: nothing is ever deleted — cleanup moves images to the WordPress trash, files stay on disk, and every batch is restorable in one click until WordPress empties its own bin (default 30 days). Two: every image is re-verified as still-unused at the moment of trashing — the scan is a preview, never the authority. Three: detection over-captures, so the unused list is conservative. The honest limit: a plugin storing references in a format the scan has never seen would not be counted — which is exactly why cleanup is trash-first instead of a delete button.
Byte-identical file content, matched by hash — not filename, so hero-final.jpg and hero-final-v2-actually-final.jpg are caught when they're the same file. Each set shows a suggested keeper (a used copy when one exists) and the reclaimable weight; one click trashes the unused extras and leaves keepers and anything in use alone.
Over your thresholds — by default 2560px on either side (WordPress's own big-image limit) or 800 KB on the original file. The subtle part: WordPress silently scales huge uploads down and serves the scaled copy, but keeps the camera original on disk forever. The audit judges the KEPT original, because that's what actually sits in your storage and backups.
Every image without alt text is listed, split by whether it's actually in use — 70 missing-alt images matter differently when 40 of them are live on the site. Each finding links straight to the filtered list with thumbnails and edit links. And if you want alt text written automatically on upload (and retro-fitted across the library), that's our WP Media SEO plugin — the two are built to work together.
Attachment is only WordPress's upload bookkeeping — which post an image was uploaded to. An unattached image can be used all over the site, and an attached one can be referenced by nothing. Most cleanup tools conflate the two; this audit keeps them separate and combines them properly: unattached AND unreferenced is the strongest deletion signal.
Free is the complete diagnosis: the scan, usage detection everywhere it looks, the 0–100 score, every finding with one-click links to the affected images, the filterable library with thumbnails and per-image "used by" reasons, and the duplicates view. Pro adds acting on it: trash-all-unused, per-image and duplicate cleanup with re-verification and restore, the CSV export, the white-label report (your name, logo, colour, footer) with true PDF download, and the weekly or monthly email digest with change-since-last-digest deltas.
Order through the form and your licence key and invoice arrive by email, usually within the hour. Keys are long codes starting VPC1. — paste the whole thing into the licence textarea rather than typing it. Domain-based, no account, no phoning home, no lock-in.
14-day money-back guarantee, no questions. Email us and we refund you.
Order below and your licence key and invoice arrive by email — usually within the hour. Install it, scan, and twenty minutes from now you'll know exactly what's unused, what's duplicated, and what it all weighs — with the cleanup one re-verified click away.
14-DAY MONEY-BACK GUARANTEE · SUPPORT BY ACTUAL HUMANS