macOS · Menu bar · Downloads folder

Old screenshots and stale installers, quietly piling up. Sweeper spots them — you decide what goes.

Every export, install, and one-off Screenshot 2026-… eventually lands in ~/Downloads and never leaves. Sweeper lives in your menu bar, checks the top level of that folder, and flags anything of a tracked type that's sat unopened for 30+ days. It never deletes anything on its own — you review the exact list, then move it to the Trash in one click.

Notarized Mac download coming soon.

How it works

Scans on launch, every 30 minutes, and on demand.

Sweeper watches only the top level of ~/Downloads — subfolders are never touched. A file gets flagged only when it's both a tracked type and unopened for 30+ days. Either alone isn't enough.

1

Scan the top level

On launch, every 30 minutes, and on demand via Rescan Now. Subfolders untouched.

2

Check last opened

Spotlight's kMDItemLastUsedDate first — the same signal LaunchServices uses — falling back to modification date.

3

Flag the matches

Tracked type and 30+ days unopened. Shown with name, size, and days-since-opened.

4

You decide

Review the list, click a file to open it, or move the rest to the Trash. Nothing moves on its own.

Downloads Sweeper's menu bar dropdown showing 58 old files totaling 214.3 MB, with a list of flagged files and a Move 58 Files to Trash button
The real menu, mid-review — straight from the app.
0 min
Background rescan interval
0 days
Unopened before a file counts as "old"
0
Tracked file categories, top level only
Safety, sold hard

It never deletes anything. It moves things to the Trash.

A blunt auto-cleaner is scary — it might trash something you actually need. Sweeper's whole design is built around never being that: you always see the exact list first, and the only mutating action is a confirmed move to the Trash, which is recoverable until you empty it.

Every match is shown before anything is touched — name, size, and days since it was last opened. Click a file to open it instead, and it drops out of the list immediately, without waiting for the next scan. The only way anything reaches the Trash is clicking Move N Files to Trash… and confirming.

This is a best-effort signal, not a guarantee. Baked into the README, not just marketing copy.
Confirmation dialog — always on Every "Move to Trash" asks first. There's no setting that skips it.
Subfolders inside Downloads The scanner only ever looks at the top level.
Never scanned
Files opened in the last 30 days Recency alone keeps a file off the list, tracked type or not.
Never flagged
File types outside the tracked list Not a screenshot, installer, archive, document, or image? Ignored.
Ignored entirely
Tracked types, unopened 30+ days Screenshots, installers, archives, documents, images — see below.
Flagged for review
Anything, until you click "Move to Trash" Being on the list is not the same as being deleted.
Nothing is touched
README.md — how "unopened" is determined
# source of truth, in order kMDItemLastUsedDate Spotlight's own "last opened" — same one LaunchServices uses modification date fallback if that attribute was never set session memory files you opened through Sweeper itself, this run # this is a best-effort signal, not a guarantee
Everything it tracks

Five categories. Top level only. Nothing else.

Small, predictable surface — no jargon, no hidden rules.

Screenshots

.png / .jpg / .jpeg whose filename starts with "Screenshot."

Installers

.dmg, .pkg — the disk images and packages that pile up after every app install.

Archives

.zip exports and downloads that were only ever needed once.

Documents

.pdf, .docx, .xlsx, .csv — invoices, reports, one-off exports.

Images

.png, .jpg, .jpeg — wallpapers, saved photos, one-off downloads.

Top level only

Subfolders inside Downloads are never scanned, no matter what's in them.


Everything else it does

Small surface. No Dock icon. No surprises.

One menu bar app, nothing else running.

Menu bar only

Just a trash icon up top. No Dock icon, no windows to manage.

See before you sweep

Name, size, and days-since-opened for every match, before anything is touched.

Click to open

Opening a file from the list drops it out immediately — no waiting for the next rescan.

Rescans every 30 minutes

Or trigger one on demand with Rescan Now — always current.

Remembers what you opened

Kept out of the list for the session, even if Spotlight is slow to catch up.

Free & open source

MIT licensed. Build from source with Xcode Command Line Tools and swift build.

Get it

Give Downloads a way out.

Free, open source, and honest about what it can't do.

Notarized Mac download coming soon.

macOS 13+ MIT license Trash, never delete

Build from source with Xcode Command Line Tools and swift build, using the instructions above — a notarized download is coming soon. setup-signing.sh keeps your Downloads folder permission grant stable across rebuilds. MIT licensed — the scan and Trash logic is all in the open.