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
Recruitersthreads; 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.comin the Has the words field, action = skip inbox + applyRecruiters. - 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+ targetedfrom: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 toamanschhina@gmail.comis 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 mixedfrom:(...) OR to:addresssyntax 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
Recruiterslabel ID:Label_2661975697823705100- Addresses:
amanschhina@gmail.com(primary),aman.s.chhina@gmail.com(dotted alias) - Gmail filter management: Settings → Filters and Blocked Addresses (+
mailFilters.xmlimport/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); uselabel:<name>. - False positives from the phrase filter attach to single messages, so thread-level
label:search can under-report them; targetedfrom:sender searches within the label are the reliable way to find transactional false positives.