mmailctl
Metadata-only privacy — we literally can’t read your email

Clean a decade of inbox in minutes.

mailctl groups thousands of messages by sender, list-id, size and age — so you can review and bulk-delete with a few keystrokes.

j k to navigate · x select · ⇧X select group · d delete

mailctl / dashboardsyncing
L
LinkedIn
1,284 messages · 96 MB
promo
G
GitHub notifications
9,402 messages · 412 MB
list
M
Medium Daily Digest
612 messages · 38 MB
newsletter
U
Uber Receipts
318 messages · 24 MB
receipts
mailctl · keyboard demo
$ mailctl login
 signed in as [email protected]

$ mailctl connect gmail
 connected · scope = metadata + modify

$ mailctl group --by=sender --limit=10
  list-id   sender                 count   size
  ──────────────────────────────────────────────
  github    notifications@github     9,402   412 MB
  linkedin  invites@linkedin           1,284   96 MB
  medium    [email protected]           612   38 MB

$ mailctl delete --sender=notifications@github
 about to delete 9,402 messages · undo window = 7 days
 done in 12.3s

The web UI does the same thing — j/k to move, ⇧X to select a group, d to delete.

90 s
OAuth → first bulk action
50,000
messages synced in 5 min
10,000+
messages deleted per click
7 days
to undo any action
Works withGmailOutlookGoogle WorkspaceMicrosoft 365IMAP — coming in v2
Built for triage

One-message-at-a-time is broken.

mailctl treats your inbox like a database — groupable, filterable, and bulk-actionable.

⇧X · d

Bulk actions, not one-by-one triage

Select 10,000 messages from one sender. Delete, archive, or label them all. Undo within 7 days.

list-id:*

Transparent grouping

Every group shows the exact match: sender, List-Id header, size range, age window. No black-box AI.

metadata

Narrowest OAuth scopes that exist

gmail.metadata + gmail.modify. Mail.ReadBasic + Mail.ReadWrite. We never request body access.

j k x d

Keyboard-first

Built like a terminal. j/k to move, x to select, ⇧X selects the whole group, d to delete.

RFC 8058

Unsubscribe that actually works

Prefers RFC 8058 List-Unsubscribe headers. Falls back to URL + auto-archive.

match → action

Rules engine

Turn any one-time cleanup into a rule. Match by sender, list, subject regex, size, or age.

Why mailctl

We don’t read your email.
Others do.

CapabilitymailctlTypical AI inbox tools
Reads message bodiesNeverRequired
OAuth scopemetadata onlyfull read
Bulk delete > 1kYes, batchedOften capped
Undo window7 daysUsually none
Transparent groupingYesBlack-box AI
PricingFree / $5$10–30+ /mo
How it works

From OAuth to first bulk action in 90 seconds.

  1. 01
    Connect

    Sign in to mailctl, then connect Gmail or Outlook. We store an encrypted refresh token — nothing else from your provider account.

  2. 02
    Sync

    An Inngest worker streams message metadata in the background. The dashboard becomes usable after the first 5,000 messages.

  3. 03
    Cleanup

    Open a group, hit ⇧X to select all of it, d to delete. mailctl batches the calls to your provider — 50k messages in under 5 min.

FAQ

Questions people actually ask.

Can you read my email?+

No. Gmail's metadata scope physically cannot return message bodies. Outlook's Mail.ReadBasic excludes bodies and attachments by design. The OAuth provider — not us — enforces this.

What if I delete something by accident?+

Every bulk action gets a 7-day undo token. One click restores the messages, even if they were deleted from Trash.

How fast is it on a 100,000-message inbox?+

Background sync completes in ~10 minutes. The dashboard is usable after the first 5,000 messages are indexed. Bulk-deleting 10,000 messages takes about 15 seconds.

Do you support IMAP / Yahoo / iCloud?+

Not yet. v1 is Gmail + Outlook only. IMAP support (Yahoo, AOL, Zoho, iCloud) is planned for v2.

Is mailctl open about its limits?+

Yes — read /privacy for the exact OAuth scopes and stored columns. If we ever need to widen scope, that page changes first.

What you get back

An inbox you can actually use.

Not just “features.” The concrete outcomes you keep after twenty minutes with mailctl.

4 h

Hours back, every week

Stop reading the same newsletter you ignore every Monday. Delete it once, set a rule, never see that sender again.

−80%

A mailbox that fits

Free Gmail quotas creep close to full. Bulk-deleting receipts, notifications, and old newsletters frees gigabytes — without paying Google for storage.

0

Inbox anxiety

The 27,000-unread counter is finally tractable. Group, glance, delete in chunks of thousands. The dread of opening Gmail goes away.

Important emails surface

Once the noise is gone, the messages that actually matter — from people, not platforms — stop getting buried.

Mistakes are reversible

Every bulk action has a 7-day undo. You can experiment aggressively without fear of losing something important.

🔒

Privacy you can verify

We use the narrowest OAuth scopes that exist — physically incapable of returning message bodies. Read the privacy page; the constraint is in the OAuth provider, not a promise.

Stay clean automatically

Every cleanup becomes a rule. Future messages from blocked senders auto-archive on arrival. You clean once; it stays clean.

Faster than your mouse

Keyboard-first design means you can triage hundreds of senders per minute. j/k to navigate, ⇧X to select a group, d to delete.

$

Honest pricing

Free tier is the whole product for one mailbox. Pro is $5/month for multiple inboxes and rules. No AI upsell. No annual-only games.

Stay in the loop

Get an email when we ship something.

Roughly one short note a month — never more. Unsubscribe in one click (we’d know if it didn’t work).

No tracking pixels. No third-party analytics on this list.

Your inbox isn’t going to clean itself.

Free while in beta. Sign in, connect a mailbox, and reclaim a weekend.

v2 will add IMAP for Yahoo / AOL / Zoho / iCloud.