Most small and mid-size businesses still route leads manually: someone checks a form submission, pastes it into a spreadsheet, sends a Slack message to the right person, and updates the CRM. This takes 5–15 minutes per lead and introduces delays that hurt close rates. Leads contacted within 5 minutes are 9x more likely to convert than those contacted after 30 minutes.
Here is how to automate the entire process in n8n in under an hour.
What you will build
A workflow that:
- Triggers when a new lead form is submitted
- Scores the lead based on company size, role, and intent signals
- Routes to the correct sales rep based on score and territory
- Creates a CRM contact with all lead data
- Sends a Slack notification to the assigned rep
- Triggers an immediate personalised email to the lead
Prerequisites
- n8n (self-hosted or n8n.cloud)
- Your form tool (Typeform, HubSpot forms, Webflow, or any webhook-capable form)
- A CRM (HubSpot, Pipedrive, or any with API access)
- Slack workspace
- Email sending (Gmail, SendGrid, or similar)
Step 1: Webhook trigger
In n8n, create a new workflow and add a Webhook node as the trigger. Set the HTTP method to POST. n8n gives you a unique webhook URL. Paste this into your form tool's webhook settings.
Test it by submitting a real form. The webhook node will receive and display the full payload so you can see exactly what data your form sends.
Step 2: Lead scoring
Add a Code node (JavaScript) after the webhook. This is where you score the lead. A simple scoring model:
let score = 0;
const data = $input.first().json;
// Company size
if (data.employees > 500) score += 30;
else if (data.employees > 50) score += 20;
else score += 5;
// Role
if (['cto','cmo','vp','director','head'].some(r =>
data.role?.toLowerCase().includes(r))) score += 25;
// Intent (page they came from)
if (data.source_page?.includes('pricing')) score += 20;
return [{ json: { ...data, lead_score: score } }];
Step 3: Routing logic
Add an IF node. Route leads with score ≥ 50 to one branch (high-intent), and lower scores to another. In the high-intent branch, add a second IF node to route by territory (based on country or state field).
Step 4: CRM creation
Add your CRM node (HubSpot, Pipedrive, etc.) with "Create Contact" action. Map the form fields to CRM properties. Add a custom property for lead_score so reps can see it in the CRM.
Step 5: Slack notification
Add a Slack node. Send to the channel or DM of the assigned rep. Use expression mode to build a rich message:
🔥 New lead: {{ $json.name }} from {{ $json.company }}
Score: {{ $json.lead_score }}/75
Role: {{ $json.role }}
Source: {{ $json.source_page }}
CRM: {{ $json.crm_url }}
Step 6: Immediate email
Add a Gmail or SendGrid node. Send a personalised "thanks for your interest" email that references what the lead enquired about. Personalisation at this stage dramatically improves reply rates to follow-up.
Activate the workflow, submit a test lead, and watch it route in real time. The whole thing runs in under 3 seconds end-to-end.