N8n toolkit skill
Complete n8n GTM toolkit — workflow blueprints for inbound, outbound, signals, CRM sync, and lifecycle.
by LeadMagic·MIT license·★ 62 Stars on the repo·GitHub ↗
npx degit LeadMagic/gtm-skills/skills/tools/n8n-toolkit#main ~/.claude/skills/n8n-toolkitChecked ·commit main
Inside this skill
SKILL.md · the author's own words# n8n Toolkit ## Overview n8n is the orchestration layer for GTM when Clay's spreadsheet model or a single MCP agent isn't enough — multi-branch routing, custom APIs, queue pause/resume, and cross-tool pipelines with real error recovery. The mistake: copying a generic "webhook → API → CRM" template without motion-specific logic, idempotency, or human gates before sends. This skill is the n8n implementation anchor: **which flows to build** by GTM motion, **how to build them** node-by-node, and **how MCP fits** (agents draft/research; n8n executes with guardrails). Load `n8n-automation` for when to choose n8n vs Clay; load `mcp-setup` for agent-side MCP config. ## When to Use
Word-for-word excerpt, not a result. Read the full SKILL.md ↓
Files of N8n toolkit
Show the full text358 lines
n8n Toolkit
Overview
n8n is the orchestration layer for GTM when Clay's spreadsheet model or a single MCP agent isn't enough — multi-branch routing, custom APIs, queue pause/resume, and cross-tool pipelines with real error recovery. The mistake: copying a generic "webhook → API → CRM" template without motion-specific logic, idempotency, or human gates before sends.
This skill is the n8n implementation anchor: which flows to build by GTM
motion, how to build them node-by-node, and how MCP fits (agents
draft/research; n8n executes with guardrails). Load n8n-automation for
when to choose n8n vs Clay; load mcp-setup for agent-side MCP config.
When to Use
- "Build an n8n workflow for inbound leads"
- "n8n outbound enrichment pipeline"
- "Connect MCP to n8n" / "n8n orchestrate MCP tools"
- "Signal workflow — funding, job change, hiring"
- "CRM sync between HubSpot and Salesforce"
- "Replace Clay export with n8n for complex routing"
- "n8n reply classification webhook"
- "Event-driven GTM automation"
Use Clay instead (clay-toolkit, clay-loops-toolkit): spreadsheet
enrichment, waterfall columns, recurring signal monitors with credit control.
Use MCP agents instead (mcp-setup, leadmagic-mcp): ad-hoc research,
drafting, CRM reads — with human confirmation on writes.
Use n8n when: deterministic pipelines, SLA-bound inbound, bulk batch jobs, multi-system sync, or branching that exceeds Clay formulas.
Authoritative Foundations
- n8n. Visual iPaaS with 400+ nodes, self-host or cloud. Queue mode for pause/resume. Sub-workflows for reusable modules. Error Trigger workflows for global failure handling.
- Model Context Protocol (MCP). Standardizes agent tool discovery. n8n sits below agents as execution plane — agents call n8n webhooks to run approved pipelines; n8n does not replace MCP for interactive research.
- iPaaS Integration Patterns. Webhook (real-time), poll/cron (batch), idempotency keys (dedupe), dead-letter queue (failed records), circuit breaker (stop on API outage).
- Winning by Design Bowtie. Inbound flows must hand off Marketing → Sales with SPICED fields; closed-won → CS with health score. n8n enforces field requirements at routing gates.
- ColdIQ Signal-to-Action. One signal → one play. n8n Switch node routes
by
signal_type; never one generic "signal outreach" branch.
n8n vs Clay vs MCP — Decision Matrix
| Need | Tool | Why |
|---|---|---|
| Waterfall email enrichment on a list | Clay | Column-native, credit-efficient |
| Recurring funding/job-change monitor | Clay Loops | Built-in cadence + table UX |
| Inbound form → enrich → route in <60s | n8n | Webhook SLA, branching |
| HubSpot ↔ Salesforce bidirectional sync | n8n | Custom field mapping, conflict rules |
| Reply webhook → classify → CRM task | n8n | Sequencer webhooks + AI node |
| Agent researches 5 accounts interactively | MCP | Tool calls with human in loop |
| Agent triggers approved bulk enrich job | MCP → n8n webhook | Agent proposes; n8n executes |
| Complex if/else across 6+ systems | n8n | Switch, Merge, sub-workflows |
Step-by-Step: How to Build a GTM Flow
Phase 1: Flow Selection
Pick blueprint from references/gtm-flow-catalog.md:
| Motion | Flow ID | Trigger | Latency Target |
|---|---|---|---|
| Inbound | INB-01 Form → enrich → score → route |
Webhook | <60s |
| Inbound | INB-02 Inbound triage + Slack |
Webhook | <30s |
| Outbound | OUT-01 List upload → batch enrich → CRM |
Manual/Cron | 2–4h / 5K rows |
| Outbound | OUT-02 Clay webhook → sequencer |
Webhook | <2min |
| Signal | SIG-01 Funding → enrich → task |
Cron daily | Same day |
| Signal | SIG-02 Job change → champion play |
Cron daily | Same day |
| Lifecycle | LIF-01 Meeting held → nurture branch |
CRM webhook | <5min |
| Lifecycle | LIF-02 Trial signup → onboarding |
Webhook | <2min |
| RevOps | REV-01 CRM hygiene re-verify |
Weekly cron | Batch |
| RevOps | REV-02 Forecast rollup → Slack |
Cron | Weekly |
| Agent | MCP-01 MCP-approved pipeline trigger |
Webhook | On demand |
Phase 2: Architecture (5-Layer Stack)
Every production flow uses this stack:
TRIGGER → NORMALIZE → ENRICH/SCORE → ROUTE → ACTION + LOG
↓ ↓ ↓
idempotency rate limit human gate (if send)
Layer rules:
- Trigger: Webhook, Cron, CRM trigger, or another workflow. Always capture
event_idfor dedupe. - Normalize: Set node — map to canonical schema (
email,domain,company,source,signal_type,icp_tier). - Enrich/Score: HTTP Request (LeadMagic, Clay API), Code node (ICP score),
or AI node (classify reply). See
references/node-patterns.md. - Route: Switch on
icp_score,signal_type,intent,geo. - Action: CRM upsert, sequencer enroll, Slack, task create. Never auto-send cold email without human gate unless pre-approved tier-1 signal play.
Phase 3: Node Implementation
Standard node order — full configs in references/node-patterns.md:
Webhook → Set (normalize) → IF (idempotency check in Redis/Sheet)
→ HTTP Request (enrich) → Code (score) → Switch (route)
→ HubSpot Upsert → Slack → Respond to Webhook
Required on every production workflow:
- Error Trigger workflow (global) → Slack + log row
Waitnode between API calls (100–500ms) for rate limitsSplit In Batches(size 10–50) for bulk- Credentials in n8n store — never in exported JSON
- Workflow name:
[PROD] INB-01 Form Enrich Route
Phase 4: MCP Integration
Three patterns — detail in references/mcp-patterns.md:
Pattern A — Agent triggers n8n (recommended)
Cursor/Claude agent (MCP: CRM read, enrichment lookup)
→ Human approves "run enrichment job"
→ HTTP POST to n8n webhook (MCP-01)
→ n8n executes batch pipeline with audit log
Pattern B — n8n calls external APIs (not MCP directly)
n8n HTTP Request → LeadMagic / HubSpot / Clay API
(MCP is for agents; n8n uses REST natively)
Pattern C — n8n AI Agent node + MCP-style tools
n8n LangChain Agent node with Tool Workflow nodes
→ Sub-workflow per tool (enrich, CRM read, classify)
→ Use for reply classification (LIF-03) with bounded tools
Load mcp-setup for agent-side guardrails. n8n webhook auth: HMAC header
or secret query param — never expose unauthenticated production webhooks.
Phase 5: Test and Deploy
- Test mode: Pin test data; run node-by-node execution
- Dry run: Set CRM nodes to read-only branch first
- Canary: Route 5% traffic via Switch before full cutover
- Activate: Tag
[PROD]; enable Error Trigger workflow - Monitor: First 24h — Slack on every error + daily execution count
Run scripts/check-output.py on deliverable before handoff.
GTM Flow Quick Reference
Full node lists in references/gtm-flow-catalog.md.
Inbound (INB-01)
Form webhook (HubSpot/Typeform/Cal.com)
→ Normalize fields
→ LeadMagic: verify email
→ IF invalid → Slack #bad-leads + stop
→ LeadMagic: company enrich
→ Code: ICP score (0–100)
→ Switch:
≥70 → Create CRM contact + assign round-robin + Slack #hot-leads
40–69 → Nurture list + marketing tag
<40 → Archive + reason code
→ Respond 200 (form UX)
Align fields with inbound-triage and SPICED-lite on CRM create.
Outbound (OUT-01)
Cron weekly OR manual webhook (list_id)
→ Google Sheets / Airtable: get rows where status=queued
→ Split In Batches (25)
→ LeadMagic find email → verify
→ IF verified → HubSpot upsert + status=enriched
→ IF not found → status=manual_review
→ On batch complete → Slack summary
Hand off to sequencer via OUT-02 (Clay or n8n webhook to Smartlead).
Signal (SIG-01 Funding)
Cron daily 6am
→ Source: CRM watchlist OR funding API / Clay export webhook
→ Filter: funding in last 7 days + ICP tier 1–2
→ Enrich contacts at account
→ Set signal_type=funding, why_now, source_url
→ CRM: create task for owner + tag signal:funding
→ Slack: #signals with account link
Route copy from funding-signal-play — not generic outreach in n8n.
Reply handling (LIF-03)
Sequencer reply webhook (Instantly/Smartlead/Outreach)
→ AI node OR HTTP to classification API (ai-prompts-toolkit P08)
→ Switch: positive / objection / OOO / unsubscribe / wrong person
→ positive → CRM task + Slack AE
→ unsubscribe → CRM opt-out + suppression list
→ wrong person → referral extract → new contact create
Maps to reply-handling categories exactly.
MCP trigger (MCP-01)
Webhook POST { job_type, params, requested_by, approval_token }
→ IF valid HMAC + approval_token → route job_type
→ enrich_batch | sync_crm | classify_replies
→ Execute sub-workflow
→ Log to Sheet: timestamp, job_type, rows, status
→ Callback URL optional
Sub-Workflow Library
Extract reusable modules:
| Sub-workflow | Input | Output |
|---|---|---|
sw-enrich-contact |
email or domain | verified_email, company, title |
sw-icp-score |
company fields | score 0–100, tier |
sw-crm-upsert-contact |
contact object | crm_id, created/updated |
sw-slack-notify |
channel, message | ok |
sw-idempotency-check |
event_id | skip or continue |
Call via Execute Workflow node — keeps main flows readable.
Environment and Credentials
# Self-hosted n8n .env — never commit
N8N_ENCRYPTION_KEY=...
LEADMAGIC_API_KEY=lm_xxx
HUBSPOT_ACCESS_TOKEN=pat-xxx
SLACK_WEBHOOK_URL=https://hooks.slack.com/...
N8N_WEBHOOK_HMAC_SECRET=whsec_xxx
Credential types: Header Auth (API keys), OAuth2 (HubSpot/SF), Predefined (Slack). Rotate keys quarterly; re-link credentials after rotation.
Output Format
Deliverable package:
- Workflow blueprint (
templates/workflow-blueprint.md) — flow ID, trigger, node diagram, field schema, routing rules - Node configuration — HTTP endpoints, auth, body, response mapping
- MCP integration note — if agents trigger this flow (Pattern A/C)
- Error handling — Error Trigger workflow, retry policy, dead-letter
- Deployment checklist — 8-point pre-activation (see Quality Check)
Quality Check
- Flow ID assigned from catalog (INB/OUT/SIG/LIF/REV/MCP)
- Canonical schema on Normalize step (email, domain, source, event_id)
- Idempotency check before CRM writes
- Rate limiting between API nodes (100–500ms Wait)
- Human gate before any cold outbound send
- Error Trigger workflow linked; failures notify Slack
- Credentials in store — not in export JSON
- Webhook authenticated (HMAC or secret)
- Signal flows map to one play (
funding-signal-play, etc.) - Inbound captures SPICED-lite fields for CRM
- Batch flows use Split In Batches with size ≤50
- Workflow named
[PROD] {FLOW-ID} {description}
Common Pitfalls
n8n as spreadsheet. Rebuilding Clay waterfalls row-by-row in n8n costs more to maintain. Fix: Clay enriches; n8n routes and syncs.
Unauthenticated webhooks. Public URL gets spammed; CRM fills with junk. Fix: HMAC verification node first step.
No idempotency. Form double-submit creates duplicate contacts. Fix:
event_idor email hash check in Redis/Sheet before create.Agent auto-sends via n8n. Compliance and brand risk. Fix: MCP-01 requires
approval_token; sends stay in sequencer with human review.One giant workflow. 40 nodes, unmaintainable. Fix: sub-workflows per enrich, CRM, notify.
Silent failures. Error branch empty. Fix: global Error Trigger + row log.
Mixed signal routing. One branch for all signals. Fix: Switch on
signal_type; load play skill per type.
Execution Artifacts
references/framework-notes.md— Framework anchorstemplates/output-template.md— Deliverable structurescripts/check-output.py— Validates workflow deliverablesreferences/gtm-flow-catalog.md— Full flow blueprints by motionreferences/mcp-patterns.md— MCP + n8n integration patternsreferences/node-patterns.md— HTTP, webhook, batch, AI, error nodestemplates/workflow-blueprint.md— Design doc template
Related Skills
n8n-automation— When to use n8n vs Clay (decision layer)mcp-setup/leadmagic-mcp— Agent-side MCP configurationclay-toolkit/clay-loops-toolkit— Enrichment and signal loopsai-prompts-toolkit— Prompts for AI nodes (classify, research)crm-toolkit/crm-integration— CRM field requirementsinbound-triage— Inbound scoring rulesreply-handling— Reply category → action mappingproactive-alerts— Slack alert formattingevent-analytics— Track flow executions as events
| 1 | |
| 2 | name n8n-toolkit |
| 3 | description >- |
| 4 | Complete n8n GTM toolkit — workflow blueprints for inbound, outbound, signals, |
| 5 | CRM sync, and lifecycle; MCP integration patterns; node design, error handling, |
| 6 | and production deployment. Use when building n8n flows for GTM, connecting MCP |
| 7 | servers to orchestration, or replacing Clay for complex branching. Triggers on: |
| 8 | "n8n workflow", "n8n GTM flow", "n8n inbound", "n8n outbound", "n8n MCP", |
| 9 | "build n8n automation", "n8n webhook CRM", "n8n enrichment pipeline". |
| 10 | license MIT |
| 11 | compatibility Claude Code, Codex, GitHub Copilot, Cursor, Gemini CLI, OpenCode, Goose, Hermes, Windsurf, Zed |
| 12 | metadata |
| 13 | version "2.0.0" |
| 14 | author LeadMagic |
| 15 | category tools |
| 16 | tags [n8n, automation, workflow, webhook, mcp, inbound, outbound, enrichment, gtm-flows] |
| 17 | related_skills [n8n-automation, mcp-setup, leadmagic-mcp, leadmagic-toolkit, clay-toolkit, clay-loops-toolkit, ai-prompts-toolkit, crm-toolkit, crm-integration, inbound-triage, reply-handling, proactive-alerts, event-analytics] |
| 18 | frameworks |
| 19 | - "n8n — Open-source workflow automation, 400+ integrations, queue mode" |
| 20 | - "Model Context Protocol — Agent tool access and orchestration" |
| 21 | - "iPaaS Integration Patterns — Event-driven, webhook, batch ETL" |
| 22 | - "Winning by Design — Bowtie handoffs (marketing → sales → CS)" |
| 23 | - "ColdIQ — Signal-to-action routing" |
| 24 | |
| 25 | |
| 26 | # n8n Toolkit |
| 27 | |
| 28 | ## Overview |
| 29 | |
| 30 | n8n is the orchestration layer for GTM when Clay's spreadsheet model or a |
| 31 | single MCP agent isn't enough — multi-branch routing, custom APIs, queue |
| 32 | pause/resume, and cross-tool pipelines with real error recovery. The mistake: |
| 33 | copying a generic "webhook → API → CRM" template without motion-specific |
| 34 | logic, idempotency, or human gates before sends. |
| 35 | |
| 36 | This skill is the n8n implementation anchor: **which flows to build** by GTM |
| 37 | motion, **how to build them** node-by-node, and **how MCP fits** (agents |
| 38 | draft/research; n8n executes with guardrails). Load `n8n-automation` for |
| 39 | when to choose n8n vs Clay; load `mcp-setup` for agent-side MCP config. |
| 40 | |
| 41 | ## When to Use |
| 42 | |
| 43 | "Build an n8n workflow for inbound leads" |
| 44 | "n8n outbound enrichment pipeline" |
| 45 | "Connect MCP to n8n" / "n8n orchestrate MCP tools" |
| 46 | "Signal workflow — funding, job change, hiring" |
| 47 | "CRM sync between HubSpot and Salesforce" |
| 48 | "Replace Clay export with n8n for complex routing" |
| 49 | "n8n reply classification webhook" |
| 50 | "Event-driven GTM automation" |
| 51 | |
| 52 | **Use Clay instead** (`clay-toolkit`, `clay-loops-toolkit`): spreadsheet |
| 53 | enrichment, waterfall columns, recurring signal monitors with credit control. |
| 54 | |
| 55 | **Use MCP agents instead** (`mcp-setup`, `leadmagic-mcp`): ad-hoc research, |
| 56 | drafting, CRM reads — with human confirmation on writes. |
| 57 | |
| 58 | **Use n8n when:** deterministic pipelines, SLA-bound inbound, bulk batch |
| 59 | jobs, multi-system sync, or branching that exceeds Clay formulas. |
| 60 | |
| 61 | ## Authoritative Foundations |
| 62 | |
| 63 | **n8n.** Visual iPaaS with 400+ nodes, self-host or cloud. Queue mode for |
| 64 | pause/resume. Sub-workflows for reusable modules. Error Trigger workflows |
| 65 | for global failure handling. |
| 66 | **Model Context Protocol (MCP).** Standardizes agent tool discovery. n8n |
| 67 | sits **below** agents as execution plane — agents call n8n webhooks to run |
| 68 | approved pipelines; n8n does not replace MCP for interactive research. |
| 69 | **iPaaS Integration Patterns.** Webhook (real-time), poll/cron (batch), |
| 70 | idempotency keys (dedupe), dead-letter queue (failed records), circuit breaker |
| 71 | (stop on API outage). |
| 72 | **Winning by Design Bowtie.** Inbound flows must hand off Marketing → Sales |
| 73 | with SPICED fields; closed-won → CS with health score. n8n enforces field |
| 74 | requirements at routing gates. |
| 75 | **ColdIQ Signal-to-Action.** One signal → one play. n8n Switch node routes |
| 76 | by `signal_type`; never one generic "signal outreach" branch. |
| 77 | |
| 78 | ## n8n vs Clay vs MCP — Decision Matrix |
| 79 | |
| 80 | | Need | Tool | Why | |
| 81 | |---|---|---| |
| 82 | | Waterfall email enrichment on a list | Clay | Column-native, credit-efficient | |
| 83 | | Recurring funding/job-change monitor | Clay Loops | Built-in cadence + table UX | |
| 84 | | Inbound form → enrich → route in <60s | n8n | Webhook SLA, branching | |
| 85 | | HubSpot ↔ Salesforce bidirectional sync | n8n | Custom field mapping, conflict rules | |
| 86 | | Reply webhook → classify → CRM task | n8n | Sequencer webhooks + AI node | |
| 87 | | Agent researches 5 accounts interactively | MCP | Tool calls with human in loop | |
| 88 | | Agent triggers approved bulk enrich job | MCP → n8n webhook | Agent proposes; n8n executes | |
| 89 | | Complex if/else across 6+ systems | n8n | Switch, Merge, sub-workflows | |
| 90 | |
| 91 | ## Step-by-Step: How to Build a GTM Flow |
| 92 | |
| 93 | ### Phase 1: Flow Selection |
| 94 | |
| 95 | Pick blueprint from `references/gtm-flow-catalog.md`: |
| 96 | |
| 97 | | Motion | Flow ID | Trigger | Latency Target | |
| 98 | |---|---|---|---| |
| 99 | | Inbound | `INB-01` Form → enrich → score → route | Webhook | <60s | |
| 100 | | Inbound | `INB-02` Inbound triage + Slack | Webhook | <30s | |
| 101 | | Outbound | `OUT-01` List upload → batch enrich → CRM | Manual/Cron | 2–4h / 5K rows | |
| 102 | | Outbound | `OUT-02` Clay webhook → sequencer | Webhook | <2min | |
| 103 | | Signal | `SIG-01` Funding → enrich → task | Cron daily | Same day | |
| 104 | | Signal | `SIG-02` Job change → champion play | Cron daily | Same day | |
| 105 | | Lifecycle | `LIF-01` Meeting held → nurture branch | CRM webhook | <5min | |
| 106 | | Lifecycle | `LIF-02` Trial signup → onboarding | Webhook | <2min | |
| 107 | | RevOps | `REV-01` CRM hygiene re-verify | Weekly cron | Batch | |
| 108 | | RevOps | `REV-02` Forecast rollup → Slack | Cron | Weekly | |
| 109 | | Agent | `MCP-01` MCP-approved pipeline trigger | Webhook | On demand | |
| 110 | |
| 111 | ### Phase 2: Architecture (5-Layer Stack) |
| 112 | |
| 113 | Every production flow uses this stack: |
| 114 | |
| 115 | |
| 116 | TRIGGER → NORMALIZE → ENRICH/SCORE → ROUTE → ACTION + LOG |
| 117 | ↓ ↓ ↓ |
| 118 | idempotency rate limit human gate (if send) |
| 119 | |
| 120 | |
| 121 | **Layer rules:** |
| 122 | **Trigger:** Webhook, Cron, CRM trigger, or another workflow. Always capture |
| 123 | `event_id` for dedupe. |
| 124 | **Normalize:** Set node — map to canonical schema (`email`, `domain`, |
| 125 | `company`, `source`, `signal_type`, `icp_tier`). |
| 126 | **Enrich/Score:** HTTP Request (LeadMagic, Clay API), Code node (ICP score), |
| 127 | or AI node (classify reply). See `references/node-patterns.md`. |
| 128 | **Route:** Switch on `icp_score`, `signal_type`, `intent`, `geo`. |
| 129 | **Action:** CRM upsert, sequencer enroll, Slack, task create. **Never auto-send |
| 130 | cold email without human gate** unless pre-approved tier-1 signal play. |
| 131 | |
| 132 | ### Phase 3: Node Implementation |
| 133 | |
| 134 | Standard node order — full configs in `references/node-patterns.md`: |
| 135 | |
| 136 | |
| 137 | Webhook → Set (normalize) → IF (idempotency check in Redis/Sheet) |
| 138 | → HTTP Request (enrich) → Code (score) → Switch (route) |
| 139 | → HubSpot Upsert → Slack → Respond to Webhook |
| 140 | |
| 141 | |
| 142 | **Required on every production workflow:** |
| 143 | Error Trigger workflow (global) → Slack + log row |
| 144 | `Wait` node between API calls (100–500ms) for rate limits |
| 145 | `Split In Batches` (size 10–50) for bulk |
| 146 | Credentials in n8n store — never in exported JSON |
| 147 | Workflow name: `[PROD] INB-01 Form Enrich Route` |
| 148 | |
| 149 | ### Phase 4: MCP Integration |
| 150 | |
| 151 | Three patterns — detail in `references/mcp-patterns.md`: |
| 152 | |
| 153 | **Pattern A — Agent triggers n8n (recommended)** |
| 154 | |
| 155 | Cursor/Claude agent (MCP: CRM read, enrichment lookup) |
| 156 | → Human approves "run enrichment job" |
| 157 | → HTTP POST to n8n webhook (MCP-01) |
| 158 | → n8n executes batch pipeline with audit log |
| 159 | |
| 160 | |
| 161 | **Pattern B — n8n calls external APIs (not MCP directly)** |
| 162 | |
| 163 | n8n HTTP Request → LeadMagic / HubSpot / Clay API |
| 164 | (MCP is for agents; n8n uses REST natively) |
| 165 | |
| 166 | |
| 167 | **Pattern C — n8n AI Agent node + MCP-style tools** |
| 168 | |
| 169 | n8n LangChain Agent node with Tool Workflow nodes |
| 170 | → Sub-workflow per tool (enrich, CRM read, classify) |
| 171 | → Use for reply classification (LIF-03) with bounded tools |
| 172 | |
| 173 | |
| 174 | Load `mcp-setup` for agent-side guardrails. n8n webhook auth: HMAC header |
| 175 | or secret query param — never expose unauthenticated production webhooks. |
| 176 | |
| 177 | ### Phase 5: Test and Deploy |
| 178 | |
| 179 | **Test mode:** Pin test data; run node-by-node execution |
| 180 | **Dry run:** Set CRM nodes to read-only branch first |
| 181 | **Canary:** Route 5% traffic via Switch before full cutover |
| 182 | **Activate:** Tag `[PROD]`; enable Error Trigger workflow |
| 183 | **Monitor:** First 24h — Slack on every error + daily execution count |
| 184 | |
| 185 | Run `scripts/check-output.py` on deliverable before handoff. |
| 186 | |
| 187 | ## GTM Flow Quick Reference |
| 188 | |
| 189 | Full node lists in `references/gtm-flow-catalog.md`. |
| 190 | |
| 191 | ### Inbound (`INB-01`) |
| 192 | |
| 193 | |
| 194 | Form webhook (HubSpot/Typeform/Cal.com) |
| 195 | → Normalize fields |
| 196 | → LeadMagic: verify email |
| 197 | → IF invalid → Slack #bad-leads + stop |
| 198 | → LeadMagic: company enrich |
| 199 | → Code: ICP score (0–100) |
| 200 | → Switch: |
| 201 | ≥70 → Create CRM contact + assign round-robin + Slack #hot-leads |
| 202 | 40–69 → Nurture list + marketing tag |
| 203 | <40 → Archive + reason code |
| 204 | → Respond 200 (form UX) |
| 205 | |
| 206 | |
| 207 | Align fields with `inbound-triage` and SPICED-lite on CRM create. |
| 208 | |
| 209 | ### Outbound (`OUT-01`) |
| 210 | |
| 211 | |
| 212 | Cron weekly OR manual webhook (list_id) |
| 213 | → Google Sheets / Airtable: get rows where status=queued |
| 214 | → Split In Batches (25) |
| 215 | → LeadMagic find email → verify |
| 216 | → IF verified → HubSpot upsert + status=enriched |
| 217 | → IF not found → status=manual_review |
| 218 | → On batch complete → Slack summary |
| 219 | |
| 220 | |
| 221 | Hand off to sequencer via `OUT-02` (Clay or n8n webhook to Smartlead). |
| 222 | |
| 223 | ### Signal (`SIG-01` Funding) |
| 224 | |
| 225 | |
| 226 | Cron daily 6am |
| 227 | → Source: CRM watchlist OR funding API / Clay export webhook |
| 228 | → Filter: funding in last 7 days + ICP tier 1–2 |
| 229 | → Enrich contacts at account |
| 230 | → Set signal_type=funding, why_now, source_url |
| 231 | → CRM: create task for owner + tag signal:funding |
| 232 | → Slack: #signals with account link |
| 233 | |
| 234 | |
| 235 | Route copy from `funding-signal-play` — not generic outreach in n8n. |
| 236 | |
| 237 | ### Reply handling (`LIF-03`) |
| 238 | |
| 239 | |
| 240 | Sequencer reply webhook (Instantly/Smartlead/Outreach) |
| 241 | → AI node OR HTTP to classification API (ai-prompts-toolkit P08) |
| 242 | → Switch: positive / objection / OOO / unsubscribe / wrong person |
| 243 | → positive → CRM task + Slack AE |
| 244 | → unsubscribe → CRM opt-out + suppression list |
| 245 | → wrong person → referral extract → new contact create |
| 246 | |
| 247 | |
| 248 | Maps to `reply-handling` categories exactly. |
| 249 | |
| 250 | ### MCP trigger (`MCP-01`) |
| 251 | |
| 252 | |
| 253 | Webhook POST { job_type, params, requested_by, approval_token } |
| 254 | → IF valid HMAC + approval_token → route job_type |
| 255 | → enrich_batch | sync_crm | classify_replies |
| 256 | → Execute sub-workflow |
| 257 | → Log to Sheet: timestamp, job_type, rows, status |
| 258 | → Callback URL optional |
| 259 | |
| 260 | |
| 261 | ## Sub-Workflow Library |
| 262 | |
| 263 | Extract reusable modules: |
| 264 | |
| 265 | | Sub-workflow | Input | Output | |
| 266 | |---|---|---| |
| 267 | | `sw-enrich-contact` | email or domain | verified_email, company, title | |
| 268 | | `sw-icp-score` | company fields | score 0–100, tier | |
| 269 | | `sw-crm-upsert-contact` | contact object | crm_id, created/updated | |
| 270 | | `sw-slack-notify` | channel, message | ok | |
| 271 | | `sw-idempotency-check` | event_id | skip or continue | |
| 272 | |
| 273 | Call via **Execute Workflow** node — keeps main flows readable. |
| 274 | |
| 275 | ## Environment and Credentials |
| 276 | |
| 277 | |
| 278 | # Self-hosted n8n .env — never commit |
| 279 | N8N_ENCRYPTION_KEY=... |
| 280 | LEADMAGIC_API_KEY=lm_xxx |
| 281 | HUBSPOT_ACCESS_TOKEN=pat-xxx |
| 282 | SLACK_WEBHOOK_URL=https://hooks.slack.com/... |
| 283 | N8N_WEBHOOK_HMAC_SECRET=whsec_xxx |
| 284 | |
| 285 | |
| 286 | Credential types: Header Auth (API keys), OAuth2 (HubSpot/SF), Predefined |
| 287 | (Slack). Rotate keys quarterly; re-link credentials after rotation. |
| 288 | |
| 289 | ## Output Format |
| 290 | |
| 291 | Deliverable package: |
| 292 | |
| 293 | **Workflow blueprint** (`templates/workflow-blueprint.md`) — flow ID, trigger, |
| 294 | node diagram, field schema, routing rules |
| 295 | **Node configuration** — HTTP endpoints, auth, body, response mapping |
| 296 | **MCP integration note** — if agents trigger this flow (Pattern A/C) |
| 297 | **Error handling** — Error Trigger workflow, retry policy, dead-letter |
| 298 | **Deployment checklist** — 8-point pre-activation (see Quality Check) |
| 299 | |
| 300 | ## Quality Check |
| 301 | |
| 302 | [ ] Flow ID assigned from catalog (INB/OUT/SIG/LIF/REV/MCP) |
| 303 | [ ] Canonical schema on Normalize step (email, domain, source, event_id) |
| 304 | [ ] Idempotency check before CRM writes |
| 305 | [ ] Rate limiting between API nodes (100–500ms Wait) |
| 306 | [ ] Human gate before any cold outbound send |
| 307 | [ ] Error Trigger workflow linked; failures notify Slack |
| 308 | [ ] Credentials in store — not in export JSON |
| 309 | [ ] Webhook authenticated (HMAC or secret) |
| 310 | [ ] Signal flows map to one play (`funding-signal-play`, etc.) |
| 311 | [ ] Inbound captures SPICED-lite fields for CRM |
| 312 | [ ] Batch flows use Split In Batches with size ≤50 |
| 313 | [ ] Workflow named `[PROD] {FLOW-ID} {description}` |
| 314 | |
| 315 | ## Common Pitfalls |
| 316 | |
| 317 | **n8n as spreadsheet.** Rebuilding Clay waterfalls row-by-row in n8n costs |
| 318 | more to maintain. Fix: Clay enriches; n8n routes and syncs. |
| 319 | |
| 320 | **Unauthenticated webhooks.** Public URL gets spammed; CRM fills with junk. |
| 321 | Fix: HMAC verification node first step. |
| 322 | |
| 323 | **No idempotency.** Form double-submit creates duplicate contacts. |
| 324 | Fix: `event_id` or email hash check in Redis/Sheet before create. |
| 325 | |
| 326 | **Agent auto-sends via n8n.** Compliance and brand risk. Fix: MCP-01 requires |
| 327 | `approval_token`; sends stay in sequencer with human review. |
| 328 | |
| 329 | **One giant workflow.** 40 nodes, unmaintainable. Fix: sub-workflows per |
| 330 | enrich, CRM, notify. |
| 331 | |
| 332 | **Silent failures.** Error branch empty. Fix: global Error Trigger + row log. |
| 333 | |
| 334 | **Mixed signal routing.** One branch for all signals. Fix: Switch on |
| 335 | `signal_type`; load play skill per type. |
| 336 | |
| 337 | ## Execution Artifacts |
| 338 | |
| 339 | `references/framework-notes.md` — Framework anchors |
| 340 | `templates/output-template.md` — Deliverable structure |
| 341 | `scripts/check-output.py` — Validates workflow deliverables |
| 342 | `references/gtm-flow-catalog.md` — Full flow blueprints by motion |
| 343 | `references/mcp-patterns.md` — MCP + n8n integration patterns |
| 344 | `references/node-patterns.md` — HTTP, webhook, batch, AI, error nodes |
| 345 | `templates/workflow-blueprint.md` — Design doc template |
| 346 | |
| 347 | ## Related Skills |
| 348 | |
| 349 | `n8n-automation` — When to use n8n vs Clay (decision layer) |
| 350 | `mcp-setup` / `leadmagic-mcp` — Agent-side MCP configuration |
| 351 | `clay-toolkit` / `clay-loops-toolkit` — Enrichment and signal loops |
| 352 | `ai-prompts-toolkit` — Prompts for AI nodes (classify, research) |
| 353 | `crm-toolkit` / `crm-integration` — CRM field requirements |
| 354 | `inbound-triage` — Inbound scoring rules |
| 355 | `reply-handling` — Reply category → action mapping |
| 356 | `proactive-alerts` — Slack alert formatting |
| 357 | `event-analytics` — Track flow executions as events |
| 358 |
Discussion
Alternatives
Browse more free Claude skills or everything in Sales.