An n8n lead-form HubSpot Slack workflow that doesn't create duplicates (free template)
Description and use
An n8n workflow that processes lead forms, avoids duplicate HubSpot contacts, filters junk, retries API calls, and posts notifications to Slack.
Problem
Lead‑form to CRM automations often create duplicate contacts, ingest junk or bot submissions, and silently lose leads when the CRM API fails.
Outcome
The template prevents duplicate contacts, filters out junk and bot submissions, retries API calls, and notifies a Slack channel with key lead information.
Workflow
- Receive form data via Webhook (POST)
- Normalize and validate data in a Code node
- If valid, upsert contact in HubSpot using batch upsert endpoint
- Send a Slack notification with lead details
- Return HTTP 200 on success or 400 with errors on failure
Evidence
Most "lead form to CRM" automations I see break in the same three ways: every resubmission creates a duplicate contact, junk and bot submissions land in the CRM, and when the CRM API hiccups the lead is silently lost.
HubSpot's batch upsert endpoint uses the email as the unique key, so a second submission from the same person updates the existing contact instead of creating a duplicate
Two cheap checks remove most of the noise: a basic email‑shape check, and a honeypot: a hidden form field (website_url_hp) that humans never see but bots fill in.
- Record date: 2026-10-22T02:11:16.219Z