Inbox + Sent, last 30 days
Walks well-known folders, pages messages, stores body text, skips attachment binaries. Re-runs are incremental on ChangeKey.
listed 86 · upserted 86 · skipped 0
Personal archive · Outlook + Teams
Extractor is a signed-in Microsoft session on your Mac — not a Graph app, not an admin-consent portal. It harvests Inbox and Sent, then Teams 1:1 and group chats, into local SQLite you can search and export.
What it does
Same family as CalSync’s Outlook web session — persistent WebKit store, MFA number-match, then REST against the page you just signed into.
Walks well-known folders, pages messages, stores body text, skips attachment binaries. Re-runs are incremental on ChangeKey.
Loads Teams in the same cookie jar, harvests a skype/teams token, lists conversations, pages messages. Channels skipped in v1.
SQLite FTS5 on subject, body, sender, chat title. No cloud index. Hits stay on the machine that harvested them.
RAG-ready files rewritten from SQLite after harvest — one object per message, one transcript per conversation.
MFA number-match overlay. Edit menu so ⌘V works. Headless commands refuse to pop UI if the session is dead.
Conditional Access pages, DeviceAuth loops, HTTP status, header names — JWTs stripped. Bundle the logs folder, not the database.
The contract
Most “export my Outlook” tools want an Entra app registration and an admin who will bless Mail.Read. Extractor uses the web session you can already open.
Register an app. Beg for Mail.Read / Chat.Read. Wait for Conditional Access to allow that client. Bodies leave on whatever token the app was issued.
Your org’s policies still apply. Extractor is a personal local tool — if Conditional Access forbids the client, nothing here clicks through it.
Requirements
System
macOS 13+
WebKit identifier-keyed cookie jar on 14+. 13 runs a degraded shared store.
Hardware
Apple Silicon
arm64 release. Intel is a later rebuild, not this zip.
Account
Microsoft work login
Outlook on the web must already work for you. No extra tenant admin step.
Price
Free
Personal use. Signed and notarized. Install with Homebrew or the zip. No subscription.
Download
brew install --cask sooth/tap/extractor puts Extractor.app in Applications and extractor on your PATH. Zip download still works if you do not use brew.
extractor login — complete MFA. Paste works. Then extractor whoami.
extractor mail --days 7 writes Inbox + Sent into Application Support and refreshes markdown/JSONL export.
extractor teams --days 7. If Entra blocks the embedded browser, send back the redacted log from bundle-logs — not the sqlite file.
extractor search "a phrase you know" then status for counts and the latest Teams log path.