This workflow corresponds to n8n.io template #13344 — 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 →
{
"name": "Instant CRM Enrichment with Lusha",
"nodes": [
{
"id": "ecf7ba4f-2416-4eb6-8c76-894dbce13bde",
"name": "\ud83d\udccb Auto-Enrich New HubSpot Contacts",
"type": "n8n-nodes-base.stickyNote",
"position": [
-100,
-560
],
"parameters": {
"width": 900,
"height": 540,
"content": "## Auto-Enrich New HubSpot Contacts with Lusha\n\n**Who it's for:** RevOps & Sales teams using HubSpot\n\n**What it does:** The moment a new contact is created in HubSpot, Lusha enriches it with verified phone, job title, seniority, and company firmographics. A data quality check ensures only enriched contacts are updated, and reps get a Slack alert for high-value new contacts.\n\n### How it works\n1. HubSpot trigger fires when a new contact is created\n2. Checks if the contact has an email address\n3. Lusha enriches the contact by email\n4. A data quality check validates enrichment results\n5. Enriched data is written back to HubSpot\n6. High-seniority contacts trigger a Slack alert for reps\n\n### Setup\n1. Install the [Lusha community node](https://www.npmjs.com/package/@lusha-org/n8n-nodes-lusha)\n2. Add your Lusha API, HubSpot OAuth2, and Slack credentials\n3. Customize the seniority filter and Slack channel\n4. Activate the workflow \u2014 every new HubSpot contact will be enriched in real time"
},
"typeVersion": 1
},
{
"id": "55579ea9-7be4-4980-8f67-2af24bc96295",
"name": "\ud83d\udd14 1. HubSpot Trigger",
"type": "n8n-nodes-base.stickyNote",
"position": [
-30,
50
],
"parameters": {
"color": 7,
"width": 450,
"height": 270,
"content": "Fires instantly when a new contact is created in HubSpot. A check ensures the contact has an email before calling Lusha.\n\n**Nodes:** HubSpot Trigger \u2192 Has Email? (IF)\n\n\ud83d\udca1 Replace with a Salesforce trigger if you use Salesforce."
},
"typeVersion": 1
},
{
"id": "796777ae-b083-492f-911a-d89cd6507350",
"name": "\ud83d\udd0d 2. Lusha Enrichment + Quality Check",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
50
],
"parameters": {
"color": 7,
"width": 560,
"height": 270,
"content": "Lusha enriches the contact by email, returning verified phone, title, seniority, and company data. A code node checks if Lusha returned meaningful data before updating CRM.\n\n**Nodes:** Lusha Enrich \u2192 Data Quality Check \u2192 Was Enriched? (IF)\n\n\ud83d\udcd6 [Lusha API docs](https://www.lusha.com/docs/)"
},
"typeVersion": 1
},
{
"id": "9d3ea981-c835-4317-89f9-a5f1da14da9e",
"name": "\ud83d\udcbe 3. Update CRM + Notify",
"type": "n8n-nodes-base.stickyNote",
"position": [
1100,
50
],
"parameters": {
"color": 7,
"width": 560,
"height": 270,
"content": "Enriched data is written back to the HubSpot contact record. Contacts with VP/Director/C-Suite seniority also trigger a Slack alert.\n\n**Nodes:** Update HubSpot \u2192 Is High Seniority? \u2192 Slack Alert\n\n\ud83d\udca1 Customize which seniority levels trigger alerts."
},
"typeVersion": 1
},
{
"id": "7fe87584-b7f3-4f76-9981-e92a270ebcd3",
"name": "New Contact Created in HubSpot",
"type": "n8n-nodes-base.hubspotTrigger",
"position": [
0,
400
],
"parameters": {
"eventsUi": {
"eventValues": [
{
"name": "contact.creation"
}
]
}
},
"credentials": {
"hubspotOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "0d20f389-b6f7-4c24-80bb-397fe0c0adb5",
"name": "Has Email?",
"type": "n8n-nodes-base.if",
"position": [
280,
400
],
"parameters": {
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "803b6976-1cb5-407b-893f-8417aa8211c7",
"operator": {
"type": "string",
"operation": "notEmpty"
},
"leftValue": "={{ $json.properties?.email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "5f99e7cc-d259-4365-a99b-712f7c067671",
"name": "Enrich Contact with Lusha",
"type": "@lusha-org/n8n-nodes-lusha.lusha",
"position": [
560,
400
],
"parameters": {
"email": "={{ $('New Contact Created in HubSpot').first().json.properties.email }}",
"searchBy": "email",
"operation": "enrichSingle",
"contactEnrichAdditionalOptions": {}
},
"credentials": {
"lushaApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "dc3adc4b-9e92-4151-9ab4-3aeda698f22f",
"name": "Data Quality Check",
"type": "n8n-nodes-base.code",
"position": [
840,
400
],
"parameters": {
"jsCode": "// Check enrichment quality \u2014 did Lusha return useful data?\nconst lusha = $json;\nconst crm = $('New Contact Created in HubSpot').first().json;\n\nconst hasPhone = !!lusha.primaryPhone;\nconst hasTitle = !!lusha.jobTitle;\nconst hasCompany = !!lusha.companyName;\nconst fieldsFound = [hasPhone, hasTitle, hasCompany].filter(Boolean).length;\n\nreturn { json: {\n contactId: crm.objectId,\n email: crm.properties?.email,\n // Lusha data\n firstName: lusha.firstName || crm.properties?.firstname || '',\n lastName: lusha.lastName || crm.properties?.lastname || '',\n phone: lusha.primaryPhone || '',\n jobTitle: lusha.jobTitle || '',\n seniority: lusha.seniority || '',\n linkedinUrl: lusha.linkedinProfile || '',\n company: lusha.companyName || '',\n companyDomain: lusha.companyDomain || '',\n industry: lusha.companyMainIndustry || '',\n companySize: Array.isArray(lusha.companySize) ? lusha.companySize[1] : '',\n location: lusha.companyLocation || '',\n // Quality metadata\n wasEnriched: fieldsFound >= 2,\n fieldsFound,\n enrichedAt: new Date().toISOString()\n} };"
},
"typeVersion": 2
},
{
"id": "715df54d-843b-4576-9741-c42daa60e02a",
"name": "Was Enriched?",
"type": "n8n-nodes-base.if",
"position": [
1120,
400
],
"parameters": {
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "2eb6ee90-83bf-4257-a449-5fd5d6f0edec",
"operator": {
"type": "boolean",
"operation": "true"
},
"leftValue": "={{ $json.wasEnriched }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "ccff4e63-90a4-44e1-8358-3d37cdbadab1",
"name": "Update HubSpot Contact",
"type": "n8n-nodes-base.hubspot",
"position": [
1400,
300
],
"parameters": {
"resource": "contact",
"contactId": "={{ $json.contactId }}",
"operation": "update",
"updateFields": {
"phone": "={{ $json.phone }}",
"company": "={{ $json.company }}",
"website": "={{ $json.companyDomain }}",
"industry": "={{ $json.industry }}",
"jobtitle": "={{ $json.jobTitle }}",
"numberofemployees": "={{ $json.companySize }}"
}
},
"credentials": {
"hubspotOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "e2c4d779-012f-45c7-9e07-d401bd24d1ca",
"name": "Check Seniority Level",
"type": "n8n-nodes-base.code",
"position": [
1400,
500
],
"parameters": {
"jsCode": "// Check if contact is high seniority (VP, Director, C-Suite)\nconst seniority = ($json.seniority || '').toLowerCase();\nconst isHighSeniority = ['vp', 'vice president', 'director', 'c-suite', 'cxo', 'founder', 'owner', 'head'].some(s => seniority.includes(s));\nreturn { json: { ...$json, isHighSeniority } };"
},
"typeVersion": 2
},
{
"id": "8de8ca59-e915-4937-8e61-848e530b53d2",
"name": "Is High Seniority?",
"type": "n8n-nodes-base.if",
"position": [
1680,
500
],
"parameters": {
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "6e389f2f-b959-4e77-aab6-61949caaaffb",
"operator": {
"type": "boolean",
"operation": "true"
},
"leftValue": "={{ $json.isHighSeniority }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "f46e0369-ce37-4088-9b18-fd6a99661639",
"name": "Alert Rep on Slack",
"type": "n8n-nodes-base.slack",
"position": [
1960,
400
],
"parameters": {
"text": "=\u2728 *High-Value New Contact*\n\n*{{ $json.firstName }} {{ $json.lastName }}*\n{{ $json.jobTitle }} ({{ $json.seniority }})\n\ud83c\udfe2 {{ $json.company }} | {{ $json.industry }}\n\ud83d\udce7 {{ $json.email }}\n\ud83d\udcf1 {{ $json.phone || 'N/A' }}\n\ud83d\udd17 {{ $json.linkedinUrl || 'N/A' }}\n\n_Auto-enriched by Lusha ({{ $json.fieldsFound }} fields found)_",
"channel": "#new-contacts",
"otherOptions": {}
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
}
],
"connections": {
"Has Email?": {
"main": [
[
{
"node": "Enrich Contact with Lusha",
"type": "main",
"index": 0
}
],
[]
]
},
"Was Enriched?": {
"main": [
[
{
"node": "Update HubSpot Contact",
"type": "main",
"index": 0
},
{
"node": "Check Seniority Level",
"type": "main",
"index": 0
}
],
[]
]
},
"Data Quality Check": {
"main": [
[
{
"node": "Was Enriched?",
"type": "main",
"index": 0
}
]
]
},
"Is High Seniority?": {
"main": [
[
{
"node": "Alert Rep on Slack",
"type": "main",
"index": 0
}
],
[]
]
},
"Check Seniority Level": {
"main": [
[
{
"node": "Is High Seniority?",
"type": "main",
"index": 0
}
]
]
},
"Enrich Contact with Lusha": {
"main": [
[
{
"node": "Data Quality Check",
"type": "main",
"index": 0
}
]
]
},
"New Contact Created in HubSpot": {
"main": [
[
{
"node": "Has Email?",
"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.
hubspotOAuth2ApilushaApislackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Triggers instantly when a new contact is created in HubSpot Checks the contact has a valid email, then enriches with Lusha A data quality check verifies Lusha returned meaningful data (phone, title, company) Enriched fields are written back to HubSpot; high-seniority contacts…
Source: https://n8n.io/workflows/13344/ — 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.
Triggers when a contact property changes in HubSpot (e.g., added to a sequence) Lusha enriches the contact with verified email, direct phone, and seniority A prospect record is built and validated — c
On new Stripe Invoice Payment update Hubspot and notify the team in Slack. Uses stripeTrigger, hubspot, slack. Event-driven trigger; 8 nodes.
Track all n8n workflow failures with automatic error capture, severity classification, duplicate detection, Slack alerting, performance metrics, and log retention.
Automates monitoring of error logs and notifies developers of critical errors. Sends Slack alerts for critical and non-critical errors, with auto-creation of Jira tickets for critical issues. Triggers
Stay ahead of payment disputes with this automated n8n workflow that integrates Stripe, Slack, and ClickUp. Perfect for finance teams, payment ops specialists, and SaaS businesses, this template fetch