How to Build n8n Lead Capture to CRM With One Canonical Webhook
Build n8n lead capture to CRM with a single canonical webhook that normalizes every source, dedupes on email, and routes to the right CRM before insert.
A growing business sprouts lead sources like weeds. The website form, the Typeform on the landing page, the Facebook lead ad, the chatbot, the trade-show scanner, the missed-call text-back. Each one wants its own little integration, and six months later you've got six half-built flows that all create slightly different contacts. n8n lead capture to CRM gets sane the moment you stop building per-source and build one canonical entry point instead.
The templates ranking for this keyword hard-wire one source to one CRM. n8n's library has a Webflow-to-Pipedrive sync and a web-form-to-Odoo capture flow, and agency playbooks like Thinkbot's CRM automation guide describe the moving parts. Every one of them couples a single form to a single CRM. None give you the one normalizing webhook that accepts any source and routes it before insert.
Build the funnel, not five funnels
The opinion that saves you a quarter of cleanup: never build a second source-specific capture flow. The first time a new lead source shows up, the temptation is to clone the existing flow and tweak it. Resist. Add the source to the one canonical webhook instead. Five source-specific flows means five places the dedupe logic can drift, five field-mapping bugs, five things to fix when your CRM changes. One canonical entry point means you fix it once.
Every minute spent here is repaid the first time a source changes its payload.
What you can automate in lead capture
- Accept leads from any source at a single webhook URL
- Normalize wildly different payloads into one clean internal shape
- Dedupe on a normalized email before any CRM write
- Route to different CRMs or lists by source, campaign, or rule
- Enrich the lead with company data before the rep sees it
- Score the lead so hot ones jump the queue
- Log every capture to Google Sheets as a source-of-truth backup
The first three are the spine. Get them right and the rest bolts on cleanly.
The lead-capture pipeline
Webhook (one URL, any source)
→ Set/Code (normalize to canonical shape)
→ CRM search (does this email exist?)
→ IF found
true → update
false → create
→ Switch (route by destination) → CRM write + Sheets log
One door in. Clean shape. Dedupe. Route. That order never changes regardless of where the lead came from.
1. One webhook to catch them all
Stand up a single Webhook node and treat its URL as your universal lead intake. Point the website form, the Typeform webhook, the ad platform, and the chatbot at it. Each source sends its own payload shape, and that's fine, the next step is where they converge.
The Webhook node's default timeout is 120 seconds, which is plenty for a form post. If a source can't hit a raw webhook (some ad platforms only post to specific shapes), add a thin per-source adapter that maps into the canonical payload and forwards. The adapters stay dumb; the brain stays central.
2. Normalize to a canonical shape
This is the load-bearing node. Every source's payload gets mapped into one internal structure with the same field names, every time:
const b = $json.body || $json;
return [{ json: {
email: (b.email || b.Email || b.work_email || '').trim().toLowerCase(),
name: (b.name || b.full_name || `${b.first_name||''} ${b.last_name||''}`).trim(),
phone: (b.phone || b.phone_number || '').replace(/[^\d+]/g, ''),
domain:(b.email || '').split('@')[1]?.toLowerCase() || '',
source: b.source || $json.headers?.['x-source'] || 'web'
}}];
After this node, nothing downstream cares whether the lead came from Typeform or a Facebook ad. They all look the same. That uniformity is the entire payoff of the canonical pattern.
3. Dedupe on the normalized email
Now search the CRM for the normalized email before writing. HubSpot, Pipedrive, Salesforce, every node supports a search or query operation. An IF node branches on whether a record came back. Found means update the existing contact (and maybe append the new source to a "sources" field). Not found means create.
Because every lead passed through the same normalize node, the email you're matching on is always lowercased and trimmed. The dedupe doesn't have to know or care about the source's quirks. One check, applied uniformly.
4. Route to the destination
A Switch node sends the clean lead where it belongs. Route by source (paid leads to a sales rep, organic to nurture), by campaign, or by a scoring rule. Different branches can write to entirely different CRMs, HubSpot for marketing-qualified, Salesforce for sales-qualified, a Google Sheet for the long tail. The capture and cleaning are shared; only the terminal write node changes.
5. Log every capture
Append every lead to Google Sheets the moment it's normalized, before the CRM write even succeeds. If the CRM is down or rate-limited, you still have the lead. That sheet is your backstop and your audit trail. Reconcile it against the CRM weekly and you'll catch any silent insert failures, which a CRM-only flow hides.
Implementation patterns
Pattern A — the source tag that survives. Stamp source in the normalize node and carry it all the way to the CRM as a field. When a lead updates from a second source, append rather than overwrite. Six months later you can answer "which channel actually originated this customer," which attribution reports usually fumble.
Pattern B — score then route. Drop a scoring step between normalize and route. An OpenAI node (or a rules table) reads the lead and assigns a 0-100 score; the Switch routes hot leads to a priority sequence and the rest to nurture. High-intent prospects stop getting diluted in the same bucket as tire-kickers.
The whole argument for a canonical webhook is maintenance, not elegance. When your CRM changes a required field, or you swap email providers, or a source tweaks its payload, you change one normalize node and one write branch. Teams that built a flow per source change it everywhere, miss one, and quietly start creating malformed contacts again. Centralize the cleaning and the dedupe; let the sources be as messy as they like.
n8n nodes you'll use most
| Node | Purpose |
|---|---|
| Webhook | Single canonical intake URL for every lead source |
| Set / Code | Normalize every payload into one canonical field shape |
| HubSpot / Pipedrive / Salesforce (search) | Dedupe on the normalized email before writing |
| IF | Branch update vs create on the dedupe result |
| Switch | Route the clean lead to the right CRM or list |
| OpenAI (optional) | Score the lead before routing hot vs cold |
| Google Sheets | Backup log of every capture, independent of the CRM |
Getting started
- Stand up one Webhook node and treat its URL as your universal intake.
- Point every source (forms, ads, chatbot) at that single URL.
- Build the normalize node that maps any payload into the canonical shape.
- Search your CRM on the normalized email and branch with an IF node.
- Add a Switch to route the clean lead to the right destination.
- Log every capture to Google Sheets before the CRM write.
- Add a scoring step between normalize and route when volume justifies it.
The routing brain is a ready-made template. The AI Lead Scoring and Email Routing template scores each captured lead with GPT-4o-mini, splits hot from cold, and logs every contact to Google Sheets, exactly the score-then-route pattern above. And for one of the trickier sources, the Missed-Call Text-Back Rescue template turns a missed call into a captured, triaged lead instead of a lost one.
Browse the lead-generation templates →The AI Lead Scoring and Email Routing template ships the score-and-route half of this pipeline: GPT-4o-mini scores every captured lead, hot leads route to a priority email sequence and cold leads to nurture, and every contact lands in Google Sheets, so high-intent prospects never get diluted in one undifferentiated list. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to the full catalog plus future templates, which pays off once you run more than one capture or routing automation.
Lead sources will keep multiplying whether you plan for it or not. A canonical webhook means each new one is a five-minute payload mapping, not another half-built flow to maintain. For the CRM-side mechanics read How to Automate Your CRM Workflows with n8n, and for the dedupe-and-upsert detail on a specific CRM see How to Build n8n Salesforce Automation. One door. Clean shape. Dedupe before insert. Build it once.
Start with the AI Lead Scoring template →Common questions
How do I capture leads from multiple sources into one CRM with n8n?
How does n8n stop duplicate leads across forms?
Can one n8n workflow feed different CRMs?
Get the workflow templates this guide is built on
Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.
Get 3 tested n8n templates, free
The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Test-run on a live n8n instance like everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.
- 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
- 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
- 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14
More automation guides

How to Build n8n Pipedrive Automation With a Stale-Deal Digest
Search "n8n Pipedrive automation" and you'll find the same article five times: a numbered list of workflows you could build, none of which you can copy and run. n8n Pipedrive automation is worth more…

How to Build n8n Salesforce Automation That Survives Production
The Salesforce integration that works in a demo and falls apart in production usually fails the same way: it creates a fresh Lead every time a form is submitted, and three months later the rep is star…

How to Automate NPS Surveys with n8n and Smart Segmentation
A Net Promoter Score that just sits in a dashboard is a vanity metric. The number moved, nobody acted, the detractor who scored you a 3 churned three weeks later, and the promoter who'd have left a gl…