Skip to main content

Privacy-first engine that turns your purchase/shipment emails into an image-searchable catalog of the physical things you own.

Project description

Inbox Catalog

Your inbox already knows everything you've bought. It's just trapped in a pile of order confirmations you'll never scroll back through.

Inbox Catalog reads those emails and turns them into a live, structured catalog of what you own — item, maker, price, date, and the product photo — so the stuff you bought stops being out of sight, out of mind.

It runs on your machine. Nothing is uploaded. Mail is opened strictly read-only — it can't send, delete, move, or flag anything.

Why this exists

I buy a lot of small things from a lot of small shops. After a good sale, half of it vanishes into "I'll deal with that later," and I forget what's even coming. Pre-orders are the worst — you pay in March, it ships in September, and by then it's gone from your brain.

Budget apps don't help, because they only see who you paid (some cryptic Shopify or PayPal string), not what you bought. So they file everything under "shopping" and shrug.

Your order emails have the actual item. This reads them back to you — no manual logging, no spreadsheet, no receipts to file. Just: here's what you have.

What you can point it at

  • A visual shelf — a browsable grid of everything you own, with photos, sorted by category. The screenshot-able "here's my collection" thing.
  • Pre-order radar — what's paid for and hasn't arrived yet, so nothing slips through.
  • Did it ship? — orders confirmed but with no shipping email yet, pulled straight from your inbox.
  • Spending in your own categories — not a bank's merchant guess. If your brain sorts things into "hobby / home / work," so does this — because it reads the item, not the charge.
  • A receipt drawer — searchable proof of purchase for when something breaks, without ever filing a thing.
  • Did I already buy this? — a quick check before you re-buy from that artist for the third time.

Same catalog, one tool. Point it at whichever question you have.

How it works

Three ways in — and you never pick. The skill figures out which one fits and just does it. The only thing you decide is letting it read your mail (which every path needs, and which always stays read-only):

  • Already have Gmail connected in Claude Code? It reads your orders directly. Works on any shop, no setup.
  • Personal Gmail? A ~3-click app password (guide included) gets you the live, photo-powered version.
  • Locked-down work account, or just privacy-minded? Point it at a Google Takeout .mbox export — no credentials at all.

Want to see it work before connecting anything? There's a zero-setup demo built in. 👇

Install (Claude Code)

Two slash commands in Claude Code:

/plugin marketplace add ssskay/inbox-catalog
/plugin install inbox-catalog@inbox-catalog

Then open a fresh session and say "catalog the demo purchases". Claude runs a bundled set of demo orders and hands you back a catalog — four board games with makers, prices, and categories. No mailbox, no credentials, no risk. That's the whole experience, minus your actual stuff.

Not on the plugin system? Copy the folder in instead:

git clone https://github.com/ssskay/inbox-catalog ~/.claude/skills/inbox-catalog

New here? GETTING-STARTED.md walks you from the demo to your first real-mail run, step by step. Not sure what's set up? Run python3 -m inboxcatalog doctor.

(Shipping your own fork? The full walkthrough — local testing, publishing, versioning — is in PUBLISHING.md.)

Bonus: an Amazon returns tracker

A second bundled profile (--profile amazon) turns Amazon order / shipment / delivery / return-window emails into a returns dashboard: a keep / return / evaluate / returned state per item, a return-window clock (days left, expired), and a life-zone triage that groups purchases by which part of your life they serve. The demo data here is synthetic too — obviously-fake @example.com mail — and it exercises every feature in one run, so you can try all of it before connecting a real inbox:

$ python3 -m inboxcatalog --profile amazon --ingest --fixtures --apply
$ python3 -m inboxcatalog --profile amazon --returns

==== Returns — policy window 30d ====

Still returnable (8) — most urgent first:
  [3] Anime Collectible Figure 4 inch      evaluate    22.99 USD   ⏳ 5 days left   <-- decide!
  [1] Craft Vinyl Roll 12x5ft Matte        evaluate    25.98 USD   ⏳ 21 days left
  ...
Expired (1):
  [9] Yoga Mat Extra Thick Non-Slip        evaluate    26.00 USD   ⏳ expired 24d ago

$ python3 -m inboxcatalog --profile amazon --triage

🔨 Crafting (2 · 2 returnable)   🌟 Fandom & Fun (2)   🏷️ Resale (1)   🎁 Gifts (1)
unrouted (1) — needs your call:
  • Bamboo Cutting Board Medium            evaluate    ⏳ 25 days left
💰 Spend flags: 1 item over $75 · 5 orders within 7 days

Zones are generic out of the box and fully user-configurable — drop your own taxonomy in a local, gitignored config file (see references/life-zone-routing.md).

Make it recognize your shops

Out of the box it only knows one category (board games — the demo). Pointed at a real inbox, it'll connect and find your order emails but catalog close to nothing, because it doesn't yet know your shops. That's not a bug — it's waiting for a profile.

A profile is a short file that tells the engine which senders and keywords count as "a purchase" for you, plus optional templates for your favorite shops. Write one for pins, sneakers, manga, whatever you're into, and the catalog fills up. See references/writing-a-profile.md.

Your profile is your data — keep your personal shop lists out of any public fork.

The origin story (a case study in weird)

This started with a genuinely cursed shopping category — small-artist collectibles from random indie shops, resale marketplaces, and one-off drops, with names that mean nothing to a merchant categorizer. No app could make sense of it. So I built a little thing that read the order emails and turned them into a real, searchable database. One profile, and suddenly the mess had shape.

Then it clicked: that niche was never the point. The framework underneath — email in, catalog out — doesn't care what you collect. So I pulled the niche out into a profile and made the framework generic. The weirdest possible use case turned out to be the best proof it works for anyone.


Built by SaraData Gremlin Go Brr. Read-only, local-first, forkable.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

inbox_catalog-0.1.0.tar.gz (60.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

inbox_catalog-0.1.0-py3-none-any.whl (79.8 kB view details)

Uploaded Python 3

File details

Details for the file inbox_catalog-0.1.0.tar.gz.

File metadata

  • Download URL: inbox_catalog-0.1.0.tar.gz
  • Upload date:
  • Size: 60.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for inbox_catalog-0.1.0.tar.gz
Algorithm Hash digest
SHA256 dc4065144c25dd6154923d154f59496b46fb38fa702472c38fc85987fcbb2a87
MD5 90f27d921c3fa54ab09f7a698d9fac3e
BLAKE2b-256 b4cb7fed66a068780bf854af45104b61305cf574b796547d1d3c4810bb04476c

See more details on using hashes here.

File details

Details for the file inbox_catalog-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: inbox_catalog-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 79.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for inbox_catalog-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 90ae75237574e277afc4362d8d38751110aa0d04138c436b35d45f1016cd1d01
MD5 a184483dd80ee5a8773eb4a6acbc453b
BLAKE2b-256 fad4506eccc6308d9c1b73316210bbf290074c818830116c1be5a31d60023177

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page