Bulk-unsubscribe from newsletters in Apple Mail — carefully, and without losing mail you need.
English · Русский
All releases · macOS 13+ · Apple Silicon and Intel · ~3 MB
The app finds newsletters across your mailboxes, shows you the list, and waits for your
decision. It never sends or deletes anything on its own. Unsubscribing goes strictly through
the official List-Unsubscribe header, and "delete" means moving to Trash, which is reversible.
- Works with every mailbox configured in Apple Mail, all at once
- No IMAP, no passwords: it drives Apple Mail via AppleScript
- Remembers your decisions — each run asks you less
- Tells you when a newer version is out — you install it yourself
- English and Russian interface
- macOS 13+, Apple Silicon and Intel
A List-Unsubscribe header does not mean the message is a newsletter. Mail.ru and Yandex
attach it to personal correspondence too. Unsubscribing from everything carrying that header
would cut you off from mail you actually want.
So the order here is fixed: scan → report → your confirmation → action. The app groups messages by sender, explains for each one why it looks like a newsletter (or doesn't), and waits. Until you press the button, nothing happens.
Only the two safe methods from the List-Unsubscribe header:
- one-click POST (RFC 8058) — a plain HTTP request; your mailbox isn't involved;
- mailto — an email from your address. These are spaced out (4 seconds per mailbox, persisted across runs), because providers like Yandex and Mail.ru will lock an account that suddenly starts sending in bursts.
Links inside the message body are never clicked automatically — they can do anything, including confirming to a spammer that your address is alive. Those senders go into a separate "unsubscribe manually" list, where one click opens the relevant message in Mail.
Some services (Yandex and Kinopoisk, for example) return 404 on their own unsubscribe link — for those the app goes straight to the manual route, where the in-body button does work.
Five steps: pick mailboxes → scan → report → unsubscribe → done. The bar at the top takes you back to any step.
| Start | Pick mailboxes and a period |
|---|---|
![]() |
![]() |
Addresses in the second screenshot are covered — those are the author's real mailboxes.
Download Unsubscriber.zip →
unzip → move Unsubscriber.app to Applications.
Then remove the quarantine flag, otherwise macOS won't let it open:
xattr -dr com.apple.quarantine /Applications/Unsubscriber.appAlternatively: launch it, then go to System Settings → Privacy & Security → Open Anyway.
This step exists because the build isn't signed with an Apple Developer ID (that costs $99/year) and isn't notarized. Gatekeeper treats any such app the same way, regardless of what it does. You can check what you're running: the whole source is in this repository, and you can always build it yourself instead — see below.
On the first scan macOS will ask permission to control Apple Mail — it can't work without it.
git clone https://github.com/markov12/unsubscriber.git
cd unsubscriber/macos
./build.sh
open Unsubscriber.appRequires Xcode Command Line Tools (xcode-select --install); full Xcode is not needed.
No third-party dependencies — system frameworks only. A build made on your own machine
isn't quarantined, so it opens without the step above.
Your mail never leaves your Mac. No analytics, no telemetry, no account, no identifiers.
- action log:
~/Library/Logs/Unsubscriber/session.log— local only; - your decisions and reports:
~/Library/Application Support/MailUnsubscriber/; - outgoing traffic is only: the unsubscribe requests themselves, and one request to
api.github.comat launch asking for the latest release number. That request carries nothing about you — no address, no identifier, no usage data.
If you file a bug report from inside the app, your mailbox addresses are masked in the log, and you see the whole text before anything is submitted.
- Apple Mail only; your accounts must already be set up there.
- Classification is rule-based, no ML. Ambiguous senders are honestly marked as ambiguous.
- Subject keywords cover Russian and English. Other languages fall back to the language-independent signals (bulk headers, sender address, read ratio).
- The build isn't notarized, hence the quarantine step on first launch.
- A Windows version (Outlook) is planned. It won't share code with the macOS app —
different mail client, different automation. What it will share: the classification rules,
the
List-Unsubscribeparsing, and the overall flow. - Signing and notarization, so the app opens with a normal double-click.
Hence the repo layout: macos/ holds the macOS app; folders for other platforms will appear
next to it. Shared docs and the license live at the root.
The easiest way to report a bug is from inside the app: the 💬 icon in the header. Details, and the project's hard constraints for code contributions, are in CONTRIBUTING.md.
GPL-3.0. Fork and improve it freely; if you distribute your version, its source must stay open too.



