Skip to main content
Lifetime license included with every purchase
n8n workflowslead captureCRM syncwebhook routing

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.

Nn8n Marketplace Team·July 3, 2026·Updated July 3, 2026·8 min read

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.

One door, built once

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

NodePurpose
WebhookSingle canonical intake URL for every lead source
Set / CodeNormalize every payload into one canonical field shape
HubSpot / Pipedrive / Salesforce (search)Dedupe on the normalized email before writing
IFBranch update vs create on the dedupe result
SwitchRoute the clean lead to the right CRM or list
OpenAI (optional)Score the lead before routing hot vs cold
Google SheetsBackup log of every capture, independent of the CRM

Getting started

  1. Stand up one Webhook node and treat its URL as your universal intake.
  2. Point every source (forms, ads, chatbot) at that single URL.
  3. Build the normalize node that maps any payload into the canonical shape.
  4. Search your CRM on the normalized email and branch with an IF node.
  5. Add a Switch to route the clean lead to the right destination.
  6. Log every capture to Google Sheets before the CRM write.
  7. 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
Skip the build

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.

Get the AI Lead Scoring template

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
FAQ

Common questions

How do I capture leads from multiple sources into one CRM with n8n?
Point every source at a single canonical Webhook node, then normalize the fields (lowercase email, format phone, extract domain) in a Set node before routing. One entry point means you build the dedupe and insert logic once instead of per source.
How does n8n stop duplicate leads across forms?
Normalize the email to lowercase, then search the CRM for that email before inserting. If the contact exists, update it; if not, create it. Because every source flows through the same webhook, the dedupe check runs uniformly no matter where the lead came from.
Can one n8n workflow feed different CRMs?
Yes. After normalizing, a Switch node can route by source or by rule to HubSpot, Pipedrive, Salesforce, or a Google Sheet. The capture and cleaning logic stays shared; only the final write node differs per destination.
Stop reading. Start running.

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.

Free — $40 value

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