DEV Community

Vhub Systems
Vhub Systems

Posted on

I Got a 'Yes, Let's Chat' Reply at 7 PM on a Friday. I Saw It Monday Morning. The Prospect Had Already Signed With a Competito..

Tags: n8n, sales automation, b2b, productivity, tutorial


The email came in at 7:04 PM on a Friday.

"This is actually great timing — we're evaluating options for Q2. What does your calendar look like next week?"

A clear, warm, actionable expression of interest. The kind of reply that, if you respond to it in 90 seconds with a Calendly link, turns into a booked call within the hour.

You saw it Monday morning at 9:07 AM. You scheduled the call for Thursday. By the time Thursday arrived, the prospect had already signed with a competitor who had an automated booking flow that responded the same Friday night.

That was a $24,000 deal.


"I got a 'yes, let's chat' reply at 7 PM on a Friday. I saw it Monday morning. Scheduled the call for Thursday. By then the prospect had already signed with a competitor who booked them same-day using a Calendly auto-reply. That was a $24,000 deal."

This is not a rare failure mode. It is a predictable, structural flaw in every outbound sales workflow that relies on a human to read and route replies. The signal arrived. The system did not process it in time.

The fix is not "check your email more often on weekends." The fix is removing the human from the routing step entirely — and only surfacing the replies that require a human decision.

This article walks through the architecture of an n8n-based outbound reply classification and routing system that routes hot replies to Slack within 5 minutes of arrival, creates CRM tasks for every "not now" and OOO re-engagement window automatically, and handles unsubscribes, referrals, and wrong-person replies without the SDR reading a single email before routing is complete.


Who This Is For

You are running Apollo, Instantly, or Lemlist sequences at 200–1,000 emails per month. You have a 1–5 person sales function — possibly just yourself. You receive 20–80 replies per month: a mix of interested, not-now, out-of-office, unsubscribe, wrong person, and referral replies.

You manually read and route every one.

The second failure mode sounds less catastrophic than the $24,000 Friday story, but it compounds over months:

"I have probably 30 emails sitting in my sequence reply folder that said 'not now, check back in Q3' from 4–6 months ago. I never created the follow-up tasks. Those are all warm prospects I just lost because I didn't have a system."

Thirty warm prospects. All of them sent a signal — "I'm not ready now, but I will be." None of them have a dated follow-up task in your CRM. Some of those Q3 windows have already opened and closed.

The third failure mode is pure time waste:

"Reading and triaging outbound replies is the most repetitive part of my day. Most of it is OOO and unsubscribes. I should be spending zero minutes on those — they should route themselves. I only want to see the hot ones."

Agreed. An OOO auto-reply from someone who will return on April 7 does not require a human to read it. It requires a system that extracts April 7, creates a follow-up task for April 8, and pauses the sequence until then. That system should take 75 minutes to build once.


Why Your Current Stack Does Not Solve This

Before building, it is worth understanding exactly where the existing tools fail — because the answer is not "no one has tried." The answer is "every tool solves an adjacent problem and stops short of the routing layer."

Apollo

Apollo marks a prospect as "Replied" and pauses their sequence — but does not classify reply intent, does not route hot replies to Slack, and does not create CRM tasks for "not now, check back in Q3" replies. A $24,000 "yes, let's chat" reply and an unsubscribe request are handled identically: both pause the sequence, neither routes itself.

Lemlist

Lemlist detects that a reply occurred and can pause a sequence. Its "Interested" detection uses basic keyword matching — producing false positives on OOO replies and missing nuanced "not now" phrasing. No AI classification layer, no CRM tasks for future-date follow-ups extracted from reply text. A "reach out again in Q3" reply falls off the radar entirely.

Front (Shared Inbox)

Front routes replies to a team view and supports manual tagging. It reduces the "buried in personal inbox" problem but does not automatically classify reply intent or trigger downstream automations. A 3-person SDR team running Front pays $147/month for a shared inbox that still requires full manual triage before any action is taken.

Zapier + Gmail Keyword Rules

Without an AI classification step, a Zapier workflow cannot distinguish "yes, let's chat" from "not now" or an OOO auto-reply. A keyword-matching rule set produces enough false positives that the SDR stops trusting the system and reverts to manual triage after one or two misrouted hot replies.

Instantly

Instantly consolidates replies and tags them as "Positive" / "Negative" / "OOO" — but classification accuracy is inconsistent for nuanced replies, it does not create CRM tasks for future follow-up dates, and it does not route positive replies to Slack in real time. It is an inbox organization tool, not an end-to-end routing system.

The gap is consistent across all five tools: they detect that a reply happened. They do not act on what the reply says.


Architecture: n8n + AI Classification + 6-Way Routing

The system has four components. Total running cost: ~$1–$5/month in AI API calls at 50–200 replies/month.

Component 1 — Email Ingestion Trigger

A Gmail trigger fires on every new email with a [replies] label (applied by a Gmail filter to all inbound replies to your outbound sending domain). Alternatively, use an IMAP polling trigger set to every 5 minutes on your outbound reply inbox.

The filter step matters: it isolates outbound replies from newsletter unsubscribes, vendor emails, and internal messages. Only sequence replies enter the classification pipeline.

Component 2 — AI Classification Node

An OpenAI node (or HTTP Request node to the Claude API) receives the reply body and outputs a JSON classification:

{
  "classification": "INTERESTED",
  "re_engagement_date": null,
  "referred_contact_name": null,
  "referred_contact_email": null,
  "ooo_return_date": null
}
Enter fullscreen mode Exit fullscreen mode

Seven classification categories: INTERESTED, NOT_NOW, OOO, UNSUBSCRIBE, WRONG_PERSON, REFERRAL, OTHER.

Cost per classification: ~$0.001–$0.003 using GPT-4o-mini or Claude Haiku. At 100 replies/month, that is under $0.30.

Component 3 — 6-Way Routing Logic

Each classification category routes to a different downstream workflow:

  • INTERESTED → Slack DM to #hot-replies: "🔥 HOT REPLY — Prospect Name: [first 200 chars of reply] → [Gmail link]" + CRM task created (due: today, priority: high, title: "Call [Prospect Name] — replied interested")
  • NOT_NOW → CRM task auto-created with due date = extracted re_engagement_date (or today + 90 days if no date mentioned); sequence paused; contact tagged "Not Now — Follow Up [Date]"
  • OOO → Extract ooo_return_date from reply text; create CRM task due ooo_return_date + 1 day; sequence paused until return date
  • UNSUBSCRIBE → CRM field: email_unsubscribed = true, unsubscribed_date = today; sequence terminated; reply logged
  • WRONG_PERSON → Gmail draft created with referral-follow-up template; Slack notification: "Wrong person at [Company] — forward draft to [referred contact name] if available"; optional Apify LinkedIn Profile Scraper enrichment of the referred contact (auto-fetches title, company, LinkedIn URL before creating the new CRM record — converting a 15-minute manual process into a zero-touch referral pipeline entry)
  • REFERRAL → Parse referred contact name/email; create new CRM contact; create "new outreach" task; Slack: "Referral from [Company] → [referred contact]"

Component 4 — CRM Update (All Branches)

Every reply, regardless of classification, logs to your CRM: reply received timestamp, AI classification result, extracted fields, Gmail message ID. This creates a full audit trail across all reply types.


Step-by-Step Setup (~75 Minutes)

Step 1 — Set Up Your Reply Label in Gmail (10 minutes)

Create a Gmail filter: from:[your outbound sending domain] or based on the reply-to header your sequence tool appends. Apply label [replies]. Test the filter against 5–10 recent replies before activating the n8n workflow — verify that OOO auto-replies, prospect replies, and unsubscribes all receive the label correctly.

Step 2 — Configure the AI Classification Prompt (15 minutes)

In n8n, add an OpenAI node (model: gpt-4o-mini). Use this prompt:

You are a B2B sales reply classifier. Classify the following email reply
into exactly one category: INTERESTED, NOT_NOW, OOO, UNSUBSCRIBE,
WRONG_PERSON, REFERRAL, OTHER.

Also extract (if present):
- re_engagement_date: the date or timeframe mentioned for follow-up
- ooo_return_date: the return date from an out-of-office message
- referred_contact_name: name of the person the sender is redirecting to
- referred_contact_email: email address of the referred contact

Reply email:
{{replyBody}}

Output: JSON only. No explanation.
Enter fullscreen mode Exit fullscreen mode

Test against 10 sample replies covering each classification type. If classification accuracy on your specific domain is below 90%, add 2–3 examples of your most common reply types directly to the prompt.

Step 3 — Build the Slack Alert for Hot Replies (10 minutes)

In the INTERESTED branch, add a Slack node routed to #hot-replies:

🔥 HOT REPLY — Action Required
Prospect: {{prospectName}} ({{companyName}})
Email: {{prospectEmail}}
Reply preview: {{first200CharsOfReply}}
→ Full reply: {{gmailLink}}
CRM: {{crmContactUrl}}
Enter fullscreen mode Exit fullscreen mode

Goal: within 5 minutes of a prospect expressing interest, the Slack DM arrives with full context and a direct Gmail link. No inbox check required. The founder opens Calendly on their phone and sends a booking link in 90 seconds.

Step 4 — Configure CRM Task Creation (15 minutes)

INTERESTED branch: CRM task, due = today, priority = high, title = "Call [Prospect Name] — replied interested to outbound."

NOT_NOW branch: CRM task, due = AI-extracted re_engagement_date (e.g., "Q3" → July 1, "after budget refresh in April" → April 1) or today + 90 days if no date extracted. Tag contact "Not Now — Follow Up [Date]." Pause sequence.

OOO branch: CRM task, due = ooo_return_date + 1 day. Pause sequence until return date.

This step captures the 30 warm prospects currently sitting in the "not now" folder with no follow-up task. Every future "not now" and OOO reply now creates a dated CRM task automatically. The prospect is not lost — they enter a re-engagement queue with full context preserved.

Step 5 — Configure Unsubscribe and Referral Handling (10 minutes)

UNSUBSCRIBE branch: Update CRM contact: email_unsubscribed = true, unsubscribed_date = today. Terminate all active sequences for this contact. Log the event. This is a compliance step — manual unsubscribe processing is an anti-spam law risk in addition to an operational inefficiency.

WRONG_PERSON branch: Create a Gmail draft with the referral template. Add an optional Apify LinkedIn Profile Scraper node to auto-enrich the referred contact's profile before creating the new CRM record — this step converts a 15-minute manual lookup into a zero-touch referral pipeline entry.

Step 6 — Test Each Branch and Activate (15 minutes)

Before going live, manually trigger each classification branch using a test reply library (one sample reply per classification type). Verify: Slack DM fires within 5 minutes for INTERESTED, CRM tasks are created with correct due dates for NOT_NOW and OOO, unsubscribes are logged with correct CRM field updates, referral drafts are created in Gmail. Set workflow to Active.


What Happens Next

A prospect sends "This is actually great timing — we're evaluating options for Q2. What does your calendar look like next week?" at 7:04 PM on a Friday.

At 7:04 PM on the same Friday, a Slack DM arrives in #hot-replies:

🔥 HOT REPLY — Action Required
Prospect: Sarah Chen (Momentum Analytics)
Email: s.chen@momentumanalytics.com
Reply preview: "This is actually great timing — we're evaluating
options for Q2. What does your calendar look like next week?"
→ Full reply: [Gmail link]
CRM: [HubSpot contact link]
Enter fullscreen mode Exit fullscreen mode

The founder is not at their desk. They open the Slack notification on their phone, tap the Calendly link they have bookmarked, and send "Here's my calendar — happy to find a time that works" in 90 seconds. The call is booked before the prospect opens a competitor's email.

A prospect replies "Sounds interesting but our budget is frozen until Q4 — check back then" on a Tuesday afternoon. A CRM task is created: "Follow up with [Prospect] — replied not now, said Q4" — due October 1, 2026. Sequence paused. Contact tagged "Not Now — Follow Up Q4." The SDR does not read this email. The prospect is not lost.

An OOO reply arrives from a prospect who returns on April 14. A CRM task is created for April 15: "Re-engage [Prospect] — returned from OOO, was in sequence." Sequence paused until April 14.

The SDR inbox contains zero OOO replies, zero unsubscribes, zero wrong-person redirects. The #hot-replies Slack channel contains every expression of interest within 5 minutes of arrival.

What this system does not do: It does not send the calendar invite automatically — that requires a separate calendar booking integration layer. It does not classify replies with 100% accuracy — a small percentage of nuanced replies will land in OTHER and require manual review. The testing guide in the workflow package identifies which edge cases to handle before going live on your live inbox.


Get the System

Outbound Reply Classification and Routing System — $29

The complete package includes: n8n workflow JSON (import-ready Gmail/IMAP trigger → AI classification → 6-way routing → CRM update + Slack alert), AI prompt library (6 classification prompts optimized for B2B sales reply types plus date and contact extraction prompts), CRM integration variants for HubSpot API, Pipedrive API, and Airtable, reply routing playbook PDF with Slack DM template and OOO scheduling logic and unsubscribe compliance checklist, and testing guide with sample reply library to verify each branch before activating on your live inbox.

→ [GUMROAD_URL]

B2B Outbound Automation Pack — $39

Pain #235 (Outbound Reply Classification and Routing) + Pain #218 (Post-Call Follow-Up Email System). Automate the two highest-friction manual tasks in a founder's outbound day: reply triage and post-call follow-up writing.

→ [GUMROAD_URL]

Requirements: n8n (self-hosted or cloud), Gmail or any IMAP-accessible outbound inbox, OpenAI or Claude API account (~$1–$5/month at typical reply volumes), HubSpot or Pipedrive or Airtable CRM. No coding required. Setup time: ~75 minutes.

The $24,000 deal that went to your competitor because they responded on Friday night and you responded Monday morning — that is a solvable problem. The system described above, once active, routes hot replies to Slack within 5 minutes regardless of when they arrive. Build it once.


Knowledge Consulted

  • /home/openclawops/shared/research-article-brief-235.md
  • /home/openclawops/shared/research-pain-profile-235.md
  • Pain #234 duplicate confirmed in content-published.md → article written for Pain #235 per directive fallback rule

Top comments (0)