Tutorial • Intermediate • 25 min • Updated Sep 2026

Automate Lead Management with n8n

From Typeform to HubSpot to Slack — without writing code. Save 5 hours per week on manual lead handling.

25 minn8n • Typeform • ChatGPT • HubSpot • SlackNo code
What You'll Build
Lead fills Typeform → n8n triggers → ChatGPT scores lead (hot/warm/cold) and writes summary → Adds to HubSpot with score → Notifies Slack #sales. Includes error handling and a free n8n template.
Prerequisites
• n8n account (free self-hosted or cloud) — n8n.io
• Typeform with one form (Name, Email, Company, Need)
• HubSpot free CRM + Slack workspace
• OpenAI API key for ChatGPT node

Steps — Detailed

Step 1: Create n8n Workflow & Typeform Trigger (5 min)
1. In n8n, create new workflow → Add Typeform Trigger node → Connect your Typeform → Copy webhook URL → Paste in Typeform → Connect.
2. Test: Submit a test lead in Typeform → You should see data in n8n (Name, Email, etc). If not, check webhook URL and Typeform → Connect → Webhooks.
Tip: Use n8n's "Listen for Test Event" to capture sample data.
Step 2: Enrich with ChatGPT (7 min)
1. Add OpenAI → Chat node after Typeform.
2. Prompt: "Score this lead as hot/warm/cold based on Company and Need. Need: {{$json.Need}}, Company: {{$json.Company}}. Return JSON: {score, summary}"
3. Set model: GPT-4o, temperature 0.3 (consistent).
4. Test: Execute node → Should return {score: "hot", summary: "..."}. If it returns text, add "Return JSON only" to prompt.
Step 3: Create HubSpot Contact (5 min)
1. Add HubSpot → Create Contact node.
2. Map fields: Email → {{$json.Email}}, First Name → {{$json.Name}}, Company → {{$json.Company}}, Custom field "Lead Score" → {{$('OpenAI').item.json.score}}, "AI Summary" → {{$('OpenAI').item.json.summary}}.
3. If contact exists, HubSpot will update — enable "Update if exists".
Step 4: Notify Slack (3 min)
1. Add Slack → Send Message node → Connect Slack → Select #sales channel.
2. Message: "New {{$('OpenAI').item.json.score}} lead: {{$json.Name}} ({{$json.Company}}) — {{$('OpenAI').item.json.summary}}"
3. Add condition: Only notify if score = hot (use IF node before Slack).
Step 5: Error Handling & Test (5 min)
1. Add Error Workflow or use IF node: If OpenAI fails → Still create HubSpot contact with raw Need and tag "needs review".
2. Test end-to-end: Submit Typeform → Check HubSpot contact created with score → Check Slack message.
3. Activate workflow (toggle On).
Common Mistakes
No error path: If ChatGPT fails, lead is lost. Always add fallback to create contact with raw data.
Hardcoded webhook: Typeform webhook URL changes if you duplicate form — update n8n trigger.
Test with real data: Use your own email + company to verify HubSpot and Slack before going live.

Variations

  • Replace HubSpot with Pipedrive, Salesforce, or Airtable (same nodes, different credentials).
  • Add enrichment: Clearbit or Apollo to add company size → better scoring.
  • Add follow-up: After Slack, wait 1 day → If no owner assigned, remind in Slack.

FAQ

Do I need coding for this?

No — n8n is visual. You connect nodes by dragging. No code needed, but you can add JavaScript if you want.

What if ChatGPT fails?

Add an error path: if the AI node fails, still create the HubSpot contact with raw form data and tag it 'needs review'.

Can I use this with other CRMs?

Yes — replace HubSpot node with Pipedrive, Salesforce, or Airtable. Same flow.

Free n8n Template
Import this workflow in n8n → Import from File → Paste JSON. Includes all 5 nodes + error handling.
View Workflow