This workflow corresponds to n8n.io template #16232 — we link there as the canonical source.
This workflow follows the HubSpot → Slack recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "",
"name": "01 - Lead Capture \u2192 HubSpot CRM + Slack Notify",
"tags": [],
"nodes": [
{
"id": "7aa49357-d522-469d-a886-0c6ca7c30269",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-310,
200
],
"parameters": {
"width": 480,
"height": 835,
"content": "## Capture leads from any form to HubSpot and notify your team in Slack\n\nThis template replaces a classic 3-step Zapier zap (Form \u2192 CRM \u2192 Slack) at zero task cost.\n\n**Who's it for**\nMarketers, founders and sales teams who collect leads from a website form and want them in HubSpot with an instant Slack heads-up.\n\n**How it works**\n1. The Webhook node receives a lead (name, email, message) as a POST request from any form tool.\n2. The Set node normalizes the fields.\n3. HubSpot creates (or updates) the contact.\n4. Slack posts a notification to your team channel.\n5. The webhook responds 200 so your form knows the lead was received.\n\n**Setup**\n1. Connect your HubSpot OAuth2 credential.\n2. Connect your Slack credential and pick the channel in the Slack node.\n3. Activate the workflow and copy the production webhook URL into your form tool (Webflow, Framer, Tally, custom HTML, etc.).\n\n**Customize**\nAdd more fields in the Set node, or swap HubSpot for Pipedrive / Airtable."
},
"typeVersion": 1
},
{
"id": "ee589934-b012-4cb7-9590-c7f004aa0b07",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
210,
190
],
"parameters": {
"color": 7,
"width": 530,
"height": 290,
"content": "## 1. Receive & normalize\nPOST your form data to the webhook URL.\nThe Set node maps raw payload fields to clean\n`name` / `email` / `message` values."
},
"typeVersion": 1
},
{
"id": "17b7ab9b-6d72-4513-8a9f-dbdc44e88673",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
710,
190
],
"parameters": {
"color": 7,
"width": 780,
"height": 290,
"content": "## 2. Save to CRM & notify\nHubSpot upserts the contact, Slack alerts your channel,\nthen the webhook answers 200 OK.\nCredentials needed: HubSpot OAuth2 + Slack OAuth2."
},
"typeVersion": 1
},
{
"id": "01-webhook",
"name": "Webhook - Receive Lead",
"type": "n8n-nodes-base.webhook",
"position": [
250,
300
],
"parameters": {
"path": "lead-capture",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "01-set",
"name": "Format Lead Data",
"type": "n8n-nodes-base.set",
"position": [
500,
300
],
"parameters": {
"mode": "manual",
"options": {},
"assignments": {
"assignments": [
{
"id": "01-set-a1",
"name": "firstname",
"type": "string",
"value": "={{ $json.firstname ?? $json.first_name ?? '' }}"
},
{
"id": "01-set-a2",
"name": "lastname",
"type": "string",
"value": "={{ $json.lastname ?? $json.last_name ?? '' }}"
},
{
"id": "01-set-a3",
"name": "email",
"type": "string",
"value": "={{ $json.email }}"
},
{
"id": "01-set-a4",
"name": "phone",
"type": "string",
"value": "={{ $json.phone ?? '' }}"
},
{
"id": "01-set-a5",
"name": "company",
"type": "string",
"value": "={{ $json.company ?? '' }}"
},
{
"id": "01-set-a6",
"name": "source",
"type": "string",
"value": "={{ $json.source ?? 'web-form' }}"
},
{
"id": "01-set-a7",
"name": "submitted_at",
"type": "string",
"value": "={{ $now.toISO() }}"
}
]
},
"duplicateItem": false
},
"typeVersion": 3
},
{
"id": "01-hubspot",
"name": "HubSpot - Create Contact",
"type": "n8n-nodes-base.hubspot",
"position": [
750,
300
],
"parameters": {
"email": "={{ $json.email }}",
"options": {},
"resource": "contact",
"operation": "upsert",
"additionalFields": {
"phone": "={{ $json.phone }}",
"company": "={{ $json.company }}",
"lastname": "={{ $json.lastname }}"
}
},
"credentials": {
"hubspotApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "01-slack",
"name": "Slack - Notify Team",
"type": "n8n-nodes-base.slack",
"position": [
1000,
300
],
"parameters": {
"text": "=\ud83c\udfaf New Lead!\n*Name:* {{ $('Format Lead Data').item.json.firstname }} {{ $('Format Lead Data').item.json.lastname }}\n*Email:* {{ $('Format Lead Data').item.json.email }}\n*Company:* {{ $('Format Lead Data').item.json.company }}\n*Source:* {{ $('Format Lead Data').item.json.source }}\n*Time:* {{ $('Format Lead Data').item.json.submitted_at }}",
"channel": {
"__rl": true,
"mode": "name",
"value": "#leads"
},
"resource": "message",
"operation": "post",
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "01-respond",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1250,
300
],
"parameters": {
"options": {
"responseCode": 200
},
"respondWith": "json",
"responseBody": "={\"success\": true, \"message\": \"Lead received\"}"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "",
"connections": {
"Format Lead Data": {
"main": [
[
{
"node": "HubSpot - Create Contact",
"type": "main",
"index": 0
}
]
]
},
"Slack - Notify Team": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Webhook - Receive Lead": {
"main": [
[
{
"node": "Format Lead Data",
"type": "main",
"index": 0
}
]
]
},
"HubSpot - Create Contact": {
"main": [
[
{
"node": "Slack - Notify Team",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
hubspotApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow receives lead data via a webhook, normalizes the fields, upserts the contact in HubSpot CRM, and posts a new-lead notification to a Slack channel before returning a JSON success response to the sender. Receives a POST request on a webhook endpoint with lead…
Source: https://n8n.io/workflows/16232/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow receives inbound leads via webhook, uses Anthropic Claude (with website scraping and web search) to score and classify them, then updates HubSpot lifecycle stage, creates deals for hot l
Real-Time Lead Processing - Captures and processes leads instantly from website forms with zero delay Intelligent Fit Scoring - Automatically scores leads 0-100 based on company size, seniority, and r
This workflow receives B2B referral submissions via a webhook, validates the payload, emails the referrer and referred lead via Gmail, alerts the sales team in Slack, deduplicates and creates records
This workflow receives inbound leads via webhook, validates and normalizes the data, scores and routes the lead to a sales rep, checks for duplicates and upserts the contact in HubSpot, drafts an outr
Job offers are a goldmine of information.