An n8n flow that runs multi-touch outreach sequences against passive candidates and previously-rejected candidates — picking up where they left off, personalizing the next message, and routing replies back to the right recruiter. Replaces the typical “we forget about candidates after one outreach” pattern with sustained pipeline-building.
Define the sequence library. 3-5 named sequences in Postgres: “passive-engineer-3-touch”, “previously-rejected-12mo-recheck”, “talent-pool-quarterly-touchpoint”, etc. Each defines: trigger condition, message templates, intervals, exit conditions.
Build the n8n flow. Eight nodes:
Cron trigger — runs daily at recruitment-friendly send time
Sequence query — pulls candidates due for next touch from Postgres
ATS data enrichment — pulls latest candidate data from Ashby (recent activity, current status, last interaction)
Skip-condition check — exclude candidates who replied since last touch, who applied recently, who explicitly opted out
Claude personalization — generates the next-message body personalized to the candidate
Email send — through Gmail API or outreach platform
Sequence-state update — Postgres update with last-touched timestamp, next-due timestamp
Reply detection — checks Gmail for replies; routes to the assigned recruiter in Slack with the reply context
Test sequences on small batches. Run on 20-30 candidates per sequence; verify content quality and routing. Tune sequence intervals and personalization prompt.
Establish opt-out infrastructure. Every email includes one-click unsubscribe; opt-outs honored across all sequences.
How the routing works
Sequence trigger
Cadence
Exit condition
Passive candidate showed signal (job-change, mentioned in funding news)
3 touches over 21 days
Reply, application, opt-out
Previously rejected, 12 months ago, role still relevant
Single re-engagement touch
Reply, application, opt-out
Talent pool member, no recent contact
Quarterly touch with relevant content
Application, opt-out
Final-round-rejected, high quality, related role opens
Single targeted touch
Reply, application, opt-out
Output
For each touched candidate:
Sent message — personalized email with appropriate subject line, body referencing the candidate’s actual context
Sequence-state log — record of the touch (which sequence, which message in sequence, send timestamp)
Reply notification — when the candidate replies, Slack notification to the assigned recruiter with the reply context and suggested next action
Where it fits
This flow is the operational layer of long-cycle talent pipelining. Without it, candidates touched once typically go silent forever. With it, the pipeline maintains warmth across months and years — producing inbound application flow when the right role opens.
Mature recruiting organizations report 15-30% of senior hires originating from re-engagement of previously-touched candidates, attributable to sustained-engagement infrastructure like this.
Watch-outs
Deliverability matters. Bulk outbound from a single domain destroys deliverability fast. Use proper outreach infrastructure (dedicated domain, warm-up, SPF/DKIM/DMARC). Better to under-send than to burn deliverability.
Personalization quality matters. Generic AI-personalized outreach reads as obviously AI-generated. The personalization needs real candidate-specific context, not pattern-matched filler.
Opt-out handling is non-negotiable. Every message must include one-click unsubscribe; opt-outs respected across all current and future sequences. CAN-SPAM, CASL, GDPR all require this.
Don’t auto-send to replied candidates. Reply detection is critical — sending the next sequence message to a candidate who already replied is the worst possible CX failure.
Recruiter review on high-value candidates. For senior roles or high-priority talent pools, recruiter reviews and approves each message rather than auto-sending.
Frequency caps. Same candidate should not appear in multiple active sequences simultaneously. Cap rules in the sequence-state logic.