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.
This workflow automatically detects at-risk customers by listening for inactivity signals from Mixpanel, scoring their churn risk, syncing everything to HubSpot, creating a prioritized ClickUp follow-
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