All posts

Keyword filters miss "Your June statement is ready": how intent-based email labeling works

A vendor sends you an invoice. The subject line reads “Your June statement is ready.” Your carefully built filter — the one watching for the word invoice — lets it sail straight into the inbox.

That’s the whole problem with keyword filtering in one line. Email isn’t keywords, it’s intent, and the gap between the two is where every brittle rule you’ve ever written goes to die. A person reading “Your June statement is ready” knows it’s finance in about 200 milliseconds. A regex needs you to have predicted the phrasing in advance.

This post is about what it takes to close that gap: what the classifier reads, what it costs, what the label distribution actually looks like in production, and where it’s still wrong.

What the classifier reads

When a message lands, MorningZero sends the sender, subject and body through a language model along with the taxonomy for that account — the default buckets plus any labels your own rules define. It comes back with a category, a spam judgement, and a needs-reply flag.

The default buckets are deliberately boring:

  • Needs reply — someone is waiting on you
  • Important — worth reading, no reply required
  • Newsletter and Marketing — useful-but-not-urgent, and not-useful-at-all
  • Notification — machine chatter from tools you use
  • Receipt, Calendar, Social, Personal, Work — the transactional and human remainder

The point isn’t that the labels are clever. It’s that you can act on a category instead of reading each message to discover its category.

The distribution we actually see

Here’s the part most posts like this leave out. This is the label breakdown across MorningZero‘s own production database on 5 August 2026 — 8 connected mailboxes, 15,773 messages mirrored since 16 January 2026, of which 2,866 have been classified.

CategoryMessagesShare of classified
Notification1,63357.0%
Marketing49717.3%
Newsletter2077.2%
Personal1956.8%
Social1364.7%
Work1043.6%
Calendar441.5%
Receipt431.5%
Other70.2%

Two things jump out.

Machine-generated mail is 89% of it. Notifications, marketing, newsletters, social, calendar and receipts together account for 2,560 of 2,866 messages. Personal and Work — mail written by a human to a human — are 299 messages, 10.4%.

Almost nothing needs a reply. 40 messages of 2,866 carried the needs-reply flag: 1.4%.

Now the caveats, because a number without them is just a marketing claim. These are our own working and test mailboxes, so they skew harder toward notifications than yours probably does. And only 2,866 of the 15,773 mirrored messages are classified at all — classification deliberately runs on recent mail rather than the whole backfilled archive, because paying to classify a two-year history nobody will read is a waste. So read that table as the shape of a machine-heavy inbox, not as a universal law.

Even discounted, the shape is the argument. If 89% of what arrives is machine-written and under 2% needs an answer, then reading your inbox top to bottom is spending human attention at roughly a 50:1 loss.

Why labeling isn’t metered

The reason is arithmetic, not generosity.

Classification runs on a small, fast model picked for high-volume sorting rather than reasoning depth. At that size the cost per message is a small fraction of a cent — so charging you per labeled email would punish you for receiving mail, and the billing machinery would cost more than the inference it was measuring. Background classification is absorbed instead, and credits are reserved for the genuinely expensive work: reasoning over a long thread, drafting a reply in your voice, answering a question about your mail.

That split is the actual product decision, and it’s worth checking against whatever else you’re evaluating. Some competitors meter the sorting on the same quota as the chat. We compared what each tool rations here.

Rules you write like a sentence

The classifier handles the default taxonomy. Your own judgement goes in as rules written in plain English:

“Label anything from my accountant or about taxes as Finance, and mark it Important.”

“If a recruiter emails about a job, label it Recruiting and don’t mark it needs-reply unless they name a specific role.”

“Newsletters from design blogs go to Reading. Newsletters selling me a course go to Promotions.”

The model interprets the meaning, so one sentence covers phrasings a regex would need a list for. The last example is the one that makes the point: “selling me a course” is a judgement about intent, and there is no string match that expresses it.

Rules apply across every connected account from one place, and a rule’s label can be written back to Gmail so the organisation shows up there too.

Where it’s wrong

  • Cold outreach is a judgement call, and judgement calls are wrong sometimes. A first-time email from a real person you’d want to hear from looks a lot like a well-written sales sequence. We bias toward keeping it visible, which means some cold sales mail reaches you.
  • Thread context is limited. Classification looks at the message, not your entire history with that sender.
  • Older mail is unlabeled. As the table shows, 82% of our mirror is unclassified by design. Search covers it; labels don’t.
  • Labels are only as fast as ingestion. Which brings us to the failure we should own.

The 11 days our “within seconds” claim wasn’t true

An earlier version of this post said labels appear within seconds because MorningZero listens to Gmail push notifications rather than polling on a timer. That was the design, and between 23 July and 4 August 2026 it was false.

A single deleted message broke it. Gmail’s history API reported a message that had since been purged; fetching it returned 404; the error aborted the whole ingest loop, so the history cursor never advanced. Every subsequent push replayed the same ~15,000-record window, hit the same dead message, and failed — 686 failed events over 11 days. Nothing looked broken because the 2-minute polling backstop kept mail flowing, which is exactly why nobody noticed.

Measured after the fix, on 5 August 2026: notifications arriving through the push path landed 6, 8 and 6 seconds behind the mail. The two that came via the polling fallback took 27 and 110 seconds. There have since been 45 consecutive successful push ingests and no failures.

We left this section in the post rather than quietly editing the claim, because “real-time” is easy to write and hard to keep, and you should know which one you’re reading.

Getting the most out of it

  • Start with three or four broad rules and refine from what actually annoys you. You don’t need a taxonomy on day one.
  • Phrase rules by intent: “anything about my mortgage” beats listing your bank’s sending domains.
  • Treat needs-reply as your home screen. If you check one view, check that one.
  • Pair labeling with Sweeps — labeling keeps the future clean, Sweeps clears what’s already piled up.

If you want to see the numbers for your own mail rather than ours, connect an account and look at the distribution after a day. The interesting figure isn’t how many emails you get. It’s how few of them wanted anything from you.

Frequently asked

Why do keyword email filters keep missing invoices?

Because they match strings, not meaning. A filter watching for "invoice" ignores "Your June statement is ready", "Payment receipt #4471" and "Thanks for your order" — all of which a person would file as finance instantly. An intent classifier reads sender, subject and body together and files on what the message is for.

What does it cost to classify an email with an LLM?

Far less than a cent. Classification runs on a small, fast model chosen for high-volume sorting, which is why MorningZero absorbs the cost instead of billing it to your credits — labeling stays free no matter how much mail you get. Credits are spent only on on-demand reasoning: chat, summaries and drafting.

How much of a normal inbox actually needs a reply?

In our own production data on 5 August 2026, 40 of 2,866 classified messages were flagged as needing a reply — 1.4%. Those are our own working and test mailboxes, which skew heavily toward machine-generated mail, so treat it as an order of magnitude rather than a universal number.

Does auto-labeling count against my AI credits in MorningZero?

No. Incoming-mail classification is not billed to credits. Credits are spent only on on-demand reasoning: Ask Zero chat, thread summaries and draft generation.