Objective

Keep the Gmail inbox clean by auto-labeling + archiving recruiter mail (and other categories) reliably, without sweeping in transactional/promo mail as false positives.

Current state (2026-07-04): the Recruiters label is driven by a hybrid filter (sender-domain allow-list + alias to: + content phrases). The content-phrase layer added 2026-06-25 has been over-triggering on transactional mail (any message containing phrases like “reach out”), so ~130 false positives were cleaned up on 2026-07-04 and the filter needs tightening (see Next Actions).

Context

Two Gmail addresses feed one inbox: amanschhina@gmail.com (primary) and aman.s.chhina@gmail.com (dotted alias, frequently used by recruiters). Gmail ignores dots at delivery, but to: filter matching is literal against the header, so both variants must be covered explicitly in any to: clause.

Recruiters label ID: Label_2661975697823705100.

Key tooling quirk: searching by label name (label:Recruiters) works; searching by raw label ID (label:Label_2661975697823705100) returns empty. Always use the name form when querying via the Gmail MCP.

Chronological Log

2026-06-17 — Initial audit + historical backlog sweep

  • Audited existing Recruiters threads; fixed 2 mislabels (Uniqlo promo, AI Agent Meetup invite).
  • Multi-session sweep of unlabeled recruiter threads back to May 2021; ~90+ threads labeled (2021–2026).
  • Discovered many older recruiter threads slipped through because they were addressed to the dotted alias.
  • Implemented a combined filter: from:(domain list) OR to:aman.s.chhina@gmail.com in the Has the words field, action = skip inbox + apply Recruiters.
  • Recruiter agency domain list grew iteratively to 26+ as new agencies appeared.
  • Concluded the label + filter + archive approach is the right setup (vs Multiple Inboxes).

2026-06-25 — Content-phrase layer added

  • 5 recruiter threads had slipped past the domain/alias filter.
  • Root cause: domain allow-list only covered known domains; the to: catch-all targeted only the dotted variant while the missed mail went to the dotless variant.
  • Researched content-based Gmail filters; analyzed language in the missed emails.
  • Added a phrase-based layer matching subject/body terms like “opportunity”, “your background”, “reach out”, “compensation”, “base + equity”.
  • Validated against ~60 labeled recruiter threads (true positives) and ~50 non-recruiter threads (false positives) — found only 1 false positive at the time (an OSU PhD student outreach).
  • Pending item noted but not done: fix the dotless to: address on the original domain filter.

2026-07-04 — False-positive cleanup (this session)

  • Noticed non-recruiter mail landing in Recruiters (archived + labeled). Examples surfaced: USPS eReceipt (DoNotReply@ereceipt.usps.gov), Anker support (support@anker.com).
  • Confirmed the culprit is the content-phrase layer — e.g. Anker’s “we wanted to reach out … we haven’t heard back” tripped “reach out”.
  • Learned the phrase filter tags individual messages, so false positives can sit as a single labeled message buried inside an otherwise-normal thread.
  • Swept the label via label:Recruiters + targeted from: searches for known transactional/promo senders.
  • Stripped ~130 false positives spanning 2018–2026: Spotify promos (largest cluster), Indeed job alerts (alert@indeed.com, match.indeed.com, myresume@indeed.com), Hack the North event/newsletter mail, Triangle Rewards (Canadian Tire), Air Canada promos/customs, Resy reservations, Cathay statements, Google account/Play/Dev/Code Jam/Coding Competitions/GCP notices, PSEG, Dunkin, Wise promos, UHC benefits, plus one-offs (Domino’s, Starbucks, US Mobile, UNIQLO, Hilton, Hyatt, Glassdoor, TOPKART, LifeStance settlement, substacks).
  • Preserved genuine recruiter mail, including 2 real Google recruiting threads (Carlos Smits / abalosg — AR role; darrylblake — application follow-up) and Amazon recruiter threads (satkahlo, juexinc).
  • Not done yet: tightening the filter itself (Gmail filter settings aren’t editable via the MCP — must be done in Settings UI), and fixing the dotless to: item still outstanding from 2026-06-25.

Next Actions

  • Tighten the content-phrase layer. “reach out” is the worst offender (matches customer-support and transactional mail). Either drop it, or require it to co-occur with a recruiter term. Add transactional senders to the Doesn’t have exclusion field.
  • Fix the dotless to: clause on the domain filter (outstanding since 2026-06-25) so mail to amanschhina@gmail.com is covered symmetrically with the dotted alias.
  • Re-validate the revised phrase set against labeled recruiters (recall) and recent transactional mail (precision) before applying retroactively.
  • Optional: periodically harvest new recruiter agency domains and append to the allow-list (keeps precision high; needs occasional maintenance).
  • Optional: spot-check the label after applying, since Gmail’s skip-inbox archive action doesn’t always fire on replies to existing threads.

Filter Design Notes

  • Layer 1 (highest precision, zero false positives): sender-domain allow-list of known recruiter agencies. Keep and extend, don’t replace.
  • Layer 2 (high signal): to:aman.s.chhina@gmail.com (dotted alias) — rarely used for anything but recruiters. Extend to cover the dotless variant too.
  • Layer 3 (high recall, source of false positives): content phrases. Needs exclusions and tighter phrasing.
  • Gmail filter mechanics: prefer OR / { } over || (symbols behave non-deterministically); filters have a per-field character cap, so split across multiple cooperating filters if needed; the { } curly-brace syntax = OR in filter fields; list:* in the Doesn’t have field cheaply excludes mailing-list/newsletter traffic. The mixed from:(...) OR to:address syntax must go in the Has the words field, not the structured From field.
  • Filters are managed via XML import/export (mailFilters.xml), which already holds filters for GitHub, Newsletters, Health, and Mailing-Lists labels.
  • Retroactive application (“Also apply to matching conversations”) processes in batches with a several-minute lag for large backlogs.

Resources

  • Recruiters label ID: Label_2661975697823705100
  • Addresses: amanschhina@gmail.com (primary), aman.s.chhina@gmail.com (dotted alias)
  • Gmail filter management: Settings → Filters and Blocked Addresses (+ mailFilters.xml import/export)
  • Note: Gmail filter rules are not editable via the Gmail MCP — label/thread operations only. Filter edits are manual in the Settings UI.

Tooling Limitation (Gmail MCP)

  • Can read/search threads, list labels, and apply/remove labels on threads and individual messages.
  • Cannot create or edit Gmail filters or settings — those stay manual.
  • Label-ID search is broken (label:<id> returns empty); use label:<name>.
  • False positives from the phrase filter attach to single messages, so thread-level label: search can under-report them; targeted from: sender searches within the label are the reliable way to find transactional false positives.