From GTM Skills
Provides n8n workflow blueprints for GTM motions: inbound, outbound, signals, CRM sync, and lifecycle. Includes MCP integration patterns, node design, error handling, and production deployment guidance.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gtm-skills:n8n-toolkitThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
n8n is the orchestration layer for GTM when Clay's spreadsheet model or a
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.
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.
signal_type; never one generic "signal outreach" branch.| 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 |
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 |
Every production flow uses this stack:
TRIGGER → NORMALIZE → ENRICH/SCORE → ROUTE → ACTION + LOG
↓ ↓ ↓
idempotency rate limit human gate (if send)
Layer rules:
event_id for dedupe.email, domain,
company, source, signal_type, icp_tier).references/node-patterns.md.icp_score, signal_type, intent, geo.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:
Wait node between API calls (100–500ms) for rate limitsSplit In Batches (size 10–50) for bulk[PROD] INB-01 Form Enrich RouteThree patterns — detail in references/mcp-patterns.md:
Pattern A — Agent triggers n8n (recommended)
Jesse/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.
[PROD]; enable Error Trigger workflowRun scripts/check-output.py on deliverable before handoff.
Full node lists in references/gtm-flow-catalog.md.
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.
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).
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.
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-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
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.
# 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.
Deliverable package:
templates/workflow-blueprint.md) — flow ID, trigger,
node diagram, field schema, routing rulesfunding-signal-play, etc.)[PROD] {FLOW-ID} {description}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_id or 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.
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 templaten8n-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 eventsnpx claudepluginhub leadmagic/gtm-skills --plugin gtm-skillsBuild n8n workflows for GTM automation — triggers, enrichment, CRM pipelines, error handling. Use when automating GTM processes beyond Clay.
Routes n8n workflow tasks to specialist skills for building, editing, testing, and debugging via the n8n-mcp MCP server. Always consult first before any n8n action.
Routes to the correct n8n skill for any workflow task, lists cross-cutting rules, and summarizes all n8n MCP tools. Always loaded at session start.