Inbox-to-CRM Reply Matching System
A production n8n system that watches two live mailboxes, matches inbound and outbound email back to the right CRM record through a fallback chain and surfaces unresolved cases for review, keeps pipeline status current automatically, and sends a daily digest only on days something is actually overdue.
New inbound or outbound email
Each mailbox is watched independently and idempotently over IMAP.
Match, then update CRM status
A shared sub-workflow matches each email against tracked records and updates the matched record's status.
Digest only when overdue
The daily summary email sends nothing on a day when no follow-up is actually overdue.
With outreach across several mailboxes, replies get missed and CRM status goes stale within days.
Keeps CRM pipeline status accurate without manual updates, prevents duplicate or missed outreach sends, and turns 'who needs a follow-up today' into a single daily email instead of a manual inbox sweep.
- Two independent mailbox monitors watch inbox and sent folders over IMAP, each idempotent so the same message is never processed twice
- A shared normalize-and-match sub-workflow used by both monitors: match by thread key first, then contact email, then subject line, before touching any record
- Matched emails update pipeline status, last-activity timestamp, and reply status directly on the CRM record; the matcher itself never sends anything
- A separate approval-gated dispatcher only sends messages a human has explicitly approved, one at a time with spacing between sends and a per-message claim guard so nothing goes out twice
- A weekday morning digest emails one combined summary of the overdue, unreplied follow-ups, and sends nothing on a day when nothing is overdue
From input to a reviewable next action.
- 01
Monitor two mailboxes
Independent IMAP watchers track inbox and sent folders per mailbox, each idempotent against reprocessing.
- 02
Normalize the message
Every new email is converted into a consistent shape before matching.
- 03
Match to a CRM record
A shared sub-workflow matches by thread key, then contact email, then subject line.
- 04
Update pipeline status
The matched record's status, last-activity timestamp, and reply status are updated automatically.
- 05
Digest overdue follow-ups
A weekday morning email summarizes the overdue, unreplied follow-ups in one message, or sends nothing if none are overdue.
Keeping CRM status honest without a manual inbox sweep
The problem wasn't sending outreach, it was everything after: replies landing in one of two mailboxes, threads getting renamed or stripped of headers by mail clients, and the CRM tracker slowly drifting out of sync with what had actually happened.
The system keeps reading and sending strictly separate. Two mailbox monitors only read and normalize; a shared sub-workflow matches each message back to its CRM record through a fallback chain (thread key, then contact email, then subject) so a stripped header doesn't mean a lost match.
Sending is handled by a completely different, approval-gated workflow. It only sends what a human explicitly approved, one message at a time with spacing between sends and a claim guard per message, so a retried run can never send the same message twice.
The last piece is a single weekday-morning digest that tells the person exactly who is overdue for a follow-up, in one email, and says nothing at all on a day when nothing is overdue.
Visible proof, without private operational data.
Select a step to see what happens there.
Independent IMAP watchers track inbox and sent folders per mailbox, each idempotent against reprocessing.
Visual documentation is being prepared. The case study remains complete and public-safe.
Mailbox monitoring, matching chain, approval-gated sends, and daily digest
Reading, matching, sending, and digesting are kept as four separate responsibilities so a bug in one does not silently cause an action in another.
- 1Watch each mailbox's inbox and sent folder independently over IMAP, tracking the last processed message per mailbox.
- 2Normalize every new email into a consistent shape regardless of source mailbox.
- 3Match the normalized email to a tracked CRM record using a fallback chain: thread key, then contact email, then subject line.
- 4Update the matched record's pipeline status, last-activity timestamp, and reply status; never send a message from this path.
- 5Run a separate, approval-gated dispatcher that only sends messages a human marked approved, one at a time with spacing and a per-message claim guard.
- 6Run a weekday morning digest that emails a single combined summary of overdue, unreplied follow-ups, sending nothing when none are overdue.
How reading, matching, sending, and digesting stay separated
A public-safe view of mailbox monitoring, the matching fallback chain, the approval-gated send path, and the digest logic.
Mailbox monitoring
Each mailbox is watched independently over IMAP with its own idempotent tracking, so the same message is never normalized or matched twice. Mailbox addresses and message content are excluded from the public case study.
Matching fallback chain
Matching tries the thread key first, then falls back to contact email, then subject line, before giving up. This keeps matches working even when a mail client strips or rewrites thread headers.
Status sync
A successful match updates the CRM record's pipeline status, last-activity timestamp, and reply status directly. The matching path never sends a message itself.
Approval-gated sending
A separate dispatcher only sends messages a human already approved in the CRM, one at a time with spacing between sends and a per-message claim guard so a retried run cannot double-send.
Overdue digest
A weekday morning job emails one combined summary of overdue, unreplied follow-ups. If nothing is overdue, no email is sent that day.
What this workflow demonstrates
Reading and sending never mix
Mailbox monitors only read and match; a distinct approval-gated workflow is the only path that can ever send a message.
Matching survives messy threads
A three-step fallback chain keeps replies matched to the right CRM record even when thread headers are stripped.
The digest respects the reader's attention
It sends one combined email only when something is actually overdue, not a daily status report regardless of relevance.
Is your CRM status only as good as your last manual update?
Share how replies get tracked today and I will map where matching and status sync can run automatically, with sending kept strictly human-approved.
