LinkedIn to HubSpot, enriched leads with AI notes
Your CRM is full of “leads,” but not enough context. You open a contact in HubSpot, then jump to LinkedIn, then back to HubSpot, then to a doc. You lose the thread. And you still have to write a decent first message.
This is where HubSpot lead enrichment hits hardest for sales ops and demand gen teams. Agency folks doing outbound feel it too, because every client expects “personalized outreach” at scale. The outcome is simple: each contact gets a LinkedIn URL plus AI-written notes you can actually use.
This workflow pulls LinkedIn data, summarizes it, and updates HubSpot (or Pipedrive) automatically. You’ll see what it fixes, how it runs, what you need, and what to tweak so the AI notes match your voice.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: LinkedIn to HubSpot, enriched leads with AI notes
flowchart LR
subgraph sg0["HubSpot Flow"]
direction LR
n4@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model2", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/hubspot.svg' width='40' height='40' /></div><br/>HubSpot Trigger"]
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If2", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn profile by ..", pos: "b", h: 48 }
n19@{ icon: "mdi:robot", form: "rounded", label: "Data Enrichment AI Agent1", pos: "b", h: 48 }
n22@{ icon: "mdi:cog", form: "rounded", label: "Update data in HubSpot", pos: "b", h: 48 }
n24@{ icon: "mdi:cog", form: "rounded", label: "HDW Search LinkedIn Profile2", pos: "b", h: 48 }
n26@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn Profile Det..", pos: "b", h: 48 }
n28@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn Profile Pos..", pos: "b", h: 48 }
n29["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/hubspot.svg' width='40' height='40' /></div><br/>HubSpot Get Contact Data"]
n6 --> n19
n6 --> n7
n7 --> n19
n5 --> n29
n4 -.-> n19
n22 -.-> n19
n29 --> n6
n24 -.-> n19
n28 -.-> n19
n26 -.-> n19
n18 -.-> n19
end
subgraph sg1["Pipedrive Trigger Update Data for Existing Client Flow"]
direction LR
n2@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model1", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Get Company from CRM1", pos: "b", h: 48 }
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/pipedrive.svg' width='40' height='40' /></div><br/>Pipedrive Trigger Update Dat.."]
n16@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Enrich Flag is True", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn profile by ..", pos: "b", h: 48 }
n20@{ icon: "mdi:robot", form: "rounded", label: "Data Enrichment AI Agent2", pos: "b", h: 48 }
n21@{ icon: "mdi:cog", form: "rounded", label: "Update data in Pipedrive1", pos: "b", h: 48 }
n23@{ icon: "mdi:cog", form: "rounded", label: "HDW Search LinkedIn Profile1", pos: "b", h: 48 }
n25@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn Profile Det..", pos: "b", h: 48 }
n27@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn Profile Pos..", pos: "b", h: 48 }
n2 -.-> n20
n16 --> n20
n3 -.-> n20
n21 -.-> n20
n23 -.-> n20
n27 -.-> n20
n25 -.-> n20
n17 -.-> n20
n15 --> n16
end
subgraph sg2["Pipedrive Trigger New Contact Flow"]
direction LR
n0@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Get Company from CRM", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/pipedrive.svg' width='40' height='40' /></div><br/>Pipedrive Trigger New Contact"]
n9@{ icon: "mdi:robot", form: "rounded", label: "Data Enrichment AI Agent", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn profile by ..", pos: "b", h: 48 }
n11@{ icon: "mdi:cog", form: "rounded", label: "Update data in Pipedrive", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "HDW Search LinkedIn Profile", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn Profile Det..", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "HDW Get LinkedIn Profile Posts", pos: "b", h: 48 }
n0 -.-> n9
n1 -.-> n9
n11 -.-> n9
n12 -.-> n9
n8 --> n9
n14 -.-> n9
n13 -.-> n9
n10 -.-> n9
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5,n15,n8 trigger
class n19,n20,n9 ai
class n4,n2,n0 aiModel
class n6,n7,n16 decision
classDef customIcon fill:none,stroke:none
class n5,n29,n15,n8 customIcon
The Challenge: Researching Every Lead Without Losing Hours
“Do a bit of LinkedIn research before you reach out” sounds reasonable until you have 30 new contacts to touch. Now you’re hunting for the right profile, scanning job history, guessing what matters, and trying to turn that into a message without sounding creepy. It’s not just time. It’s context switching, duplicate tabs, and inconsistent notes that never make it back into the CRM. And when the team scales, the quality drops fast because everyone researches differently.
It adds up fast. Here’s where it breaks down in day-to-day work.
- You waste about 10 minutes per lead just finding the correct LinkedIn profile and confirming it’s the right person.
- Notes live in random places (a doc, a Slack DM, a browser tab), so the next person who touches the lead starts from zero.
- Outreach gets generic because nobody has time to summarize a profile and recent posts consistently.
- Manual copy-paste into HubSpot fields causes mistakes, and those mistakes quietly poison segmentation and follow-ups.
The Fix: LinkedIn Research That Writes Back Into HubSpot
This automation watches for new or updated contacts in your CRM, then enriches them with LinkedIn context automatically. When a contact comes in (or when you flag them as “needs enrichment”), the workflow tries to find their LinkedIn profile using the email first. If that fails, it falls back to a smarter search using name and company data. Once it finds a match, it pulls profile details and recent activity, then hands that raw info to an AI agent. The AI turns it into clean, skimmable notes and updates your HubSpot contact record with the LinkedIn URL, a professional summary, and a posts/activity summary.
The workflow starts from HubSpot or Pipedrive triggers. From there, AnySite’s LinkedIn node collects profile and post data, and an OpenAI-powered agent summarizes what matters. Finally, HubSpot gets updated with consistent properties that your team can use for outreach, routing, and segmentation.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say your team adds 20 new contacts a week into HubSpot from forms, events, and list uploads. If you spend roughly 10 minutes finding the right LinkedIn profile and another 10 minutes writing a usable summary, that’s about 6 hours weekly. With this workflow, the “work” becomes tagging a contact for enrichment (or letting the creation trigger run), then waiting for the notes to land on the record. Realistically, you’re down to a few minutes of spot-checking instead of hours of research.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- HubSpot to store enriched contact properties.
- AnySite LinkedIn (HDW community node) to fetch LinkedIn profiles and posts.
- OpenAI API key (get it from your OpenAI dashboard) to generate the AI notes.
Skill level: Intermediate. You’ll be connecting accounts, creating HubSpot properties, and self-hosting if you want the LinkedIn community node to work.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A contact event kicks things off. The workflow triggers when a new HubSpot contact is created, when a HubSpot contact is updated with an enrichment flag, or when a Pipedrive person is created/updated (depending on which CRM you use).
It decides if enrichment is needed. Simple checks make sure you’re not enriching everything all the time. If the “need_enrichment” property (or the Pipedrive equivalent) isn’t set, the workflow can skip, which keeps costs and noise down.
LinkedIn data gets collected. Using the AnySite LinkedIn community node, it tries an email-based lookup first. If there’s no match, it searches by name and company, then pulls profile details and recent posts for the best candidate.
AI writes usable notes and the CRM gets updated. The AI agent summarizes the person’s background and activity into clean text, then the workflow updates HubSpot properties like linkedin_url, profile_summary, and linkedin_posts_summary. You can also log results to Google Sheets if you want a simple audit trail.
You can easily modify the enrichment flag rules to run only for specific pipelines, regions, or lead sources based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the HubSpot Trigger
Set up the HubSpot webhook that starts the enrichment flow when a contact is created or marked for enrichment.
- Add the HubSpot Event Trigger node and connect it to your HubSpot app.
- Credential Required: Connect your
hubspotDeveloperApicredentials. - In HubSpot Event Trigger, set eventsUi to include
contact.propertyChangefor theneed_enrichmentproperty. - Keep the webhook URL active in HubSpot so HubSpot Event Trigger can receive events.
Step 2: Connect Pipedrive Triggers for Person Events
Configure Pipedrive to kick off LinkedIn enrichment on new or updated person records.
- Add the Pipedrive New Person Trigger node with action set to
createand entity set toperson. - Credential Required: Connect your
pipedriveApicredentials to Pipedrive New Person Trigger. - Add the Pipedrive Update Trigger node with action set to
changeand entity set toperson. - Credential Required: Connect your
pipedriveApicredentials to Pipedrive Update Trigger.
Step 3: Set Up HubSpot Contact Fetch and Routing Logic
This step ensures the workflow enriches only the right HubSpot events and pulls the contact data needed for AI processing.
- In Fetch HubSpot Contact, set operation to
getand authentication toappToken. - Set contactId to
{{ $json.contactId }}and include properties forfirstname,lastname,email, andcompany. - Credential Required: Connect your
hubspotAppTokencredentials to Fetch HubSpot Contact. - Configure Creation Event Check to match
{{ $('HubSpot Event Trigger').item.json.subscriptionType }}equalscontact.creation. - Configure Enrich Flag Check so
{{ $('HubSpot Event Trigger').item.json.subscriptionType }}equalscontact.propertyChangeand{{ $json.properties.need_enrichment.value }}equalstrue.
Step 4: Configure AI Enrichment Agents and Language Models
Connect the language models to the enrichment agents and verify the agent input payloads.
- In OpenAI Chat Engine, select the
gpt-4omodel and connect it to LinkedIn Enrichment Agent. - Credential Required: Connect your
openAiApicredentials to OpenAI Chat Engine. - In OpenAI Chat Engine B, select the
gpt-4omodel and connect it to Pipedrive Enrichment Agent. - Credential Required: Connect your
openAiApicredentials to OpenAI Chat Engine B. - In OpenAI Chat Engine C, select the
gpt-4omodel and connect it to HubSpot Enrichment Agent. - Credential Required: Connect your
openAiApicredentials to OpenAI Chat Engine C. - Verify the input text in LinkedIn Enrichment Agent uses
User data:\nemail - {{ $json.data.emails[0].value }}\nname - {{ $json.data.name }}\norganization id - {{ $json.data.org_id }}. - Verify the input text in HubSpot Enrichment Agent uses
User data:\nemail - {{ $json['identity-profiles'][0].identities[0].value }}\nname - {{ $json.properties.hs_full_name_or_email.value }}\nCompany name - {{ $json.properties.company.value }}.
Step 5: Connect LinkedIn and CRM Tooling for Enrichment
These tools are called by the agents to find LinkedIn profiles, fetch details, and update CRM records. Due to high node counts, configure LinkedIn tools by function groups.
- For LinkedIn email lookup, confirm Find LinkedIn by Email, Find LinkedIn by Email B, and Find LinkedIn by Email C use
{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Email', `user email`, 'string') }}. - Credential Required: Connect your
hdwLinkedinApicredentials to all LinkedIn tools (12+ nodes, including profile search, details, and posts). - In Search LinkedIn Profiles, Search LinkedIn Profiles B, and Search LinkedIn Profiles C, keep keywords set to
{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Keywords', ``, 'string') }}and additional fields for location, first/last name, and company keywords. - In Fetch LinkedIn Details, Fetch LinkedIn Details B, and Fetch LinkedIn Details C, set operation to
getProfileand user to{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('User', `user alias`, 'string') }}. - In Retrieve LinkedIn Posts, Retrieve LinkedIn Posts B, and Retrieve LinkedIn Posts C, set operation to
getPostsand urn to{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('User_URN', `user URN with prefix: fsd_profile:ACoAA..`, 'string') }}. - For Pipedrive company lookups, keep Fetch CRM Company and Retrieve CRM Company B set to resource
organizationand operationget, with organizationId set to{{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Organization_ID', `org_id`, 'number') }}.
[CONFIGURE_YOUR_API_KEY]. Replace these with your actual Pipedrive custom field keys in Update Pipedrive Contact and Modify Pipedrive Contact before running the workflow.Step 6: Configure CRM Update Actions
These nodes write enriched LinkedIn insights back to Pipedrive and HubSpot.
- In Update Pipedrive Contact, set personId to
{{ $('Pipedrive New Person Trigger').item.json.data.id }}and keep resource aspersonwith operationupdate. - Credential Required: Connect your
pipedriveApicredentials to Update Pipedrive Contact and Modify Pipedrive Contact. - In Modify Pipedrive Contact, set personId to
{{ $('Pipedrive Update Trigger').item.json.data.id }}and map the AI values in customProperties. - In Update HubSpot Contact, set authentication to
appTokenand email to{{ $json.properties.email.value }}. - Credential Required: Connect your
hubspotAppTokencredentials to Update HubSpot Contact. - Map custom properties in Update HubSpot Contact to
linkedin_posts_summary,profile_summary, andlinkedin_urlusing the AI expressions already configured.
Step 7: Test and Activate Your Workflow
Run a controlled test for both HubSpot and Pipedrive triggers before enabling the workflow in production.
- Use Execute Workflow and trigger Pipedrive New Person Trigger with a test person to confirm LinkedIn Enrichment Agent runs and updates data via Update Pipedrive Contact.
- Trigger a HubSpot contact creation or set
need_enrichmenttotrueand confirm HubSpot Event Trigger → Fetch HubSpot Contact → Creation Event Check / Enrich Flag Check → HubSpot Enrichment Agent executes successfully. - Verify LinkedIn fields and summaries are written to Pipedrive and HubSpot records as expected.
- Once tests succeed, toggle the workflow to Active so it runs automatically.
Watch Out For
- HubSpot private app tokens and permissions can block updates. If the workflow runs but fields stay empty, check the HubSpot credential scopes and the contact property internal names first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
Plan on about an hour if your HubSpot properties and API keys are ready.
Yes, but you’ll want someone comfortable with setting up HubSpot properties and pasting API keys. The LinkedIn part requires self-hosted n8n because it uses a community node.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs (often a few cents per enriched contact, depending on prompt size) and AnySite usage.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Start by editing the prompts inside the LinkedIn Enrichment Agent, HubSpot Enrichment Agent, or Pipedrive Enrichment Agent so the summaries match your outreach style. You can also change the enrichment rules in the “Enrich Flag Check” and “Validate Enrich Flag” logic so it only runs for certain lead sources, lifecycle stages, or owners. If you prefer different outputs, map the AI response into different HubSpot properties in the “Update HubSpot Contact” step.
Usually it’s missing permissions or a wrong property name. Check that your HubSpot credential is allowed to read and write contacts, then confirm the internal property keys (like linkedin_url) match exactly what you created in HubSpot. If it only fails sometimes, you may be hitting rate limits while enriching batches, so add a short delay between contacts.
If you self-host n8n, there’s no execution cap (it’s mostly your server and API limits). On n8n Cloud, capacity depends on your plan’s monthly executions. In practice, most teams run enrichment in small batches because LinkedIn lookups and AI calls can be rate-limited.
Often, yes. The main reason is the LinkedIn enrichment node here is a community node intended for self-hosted n8n, and the workflow uses branching logic (email lookup, then fallback search, then profile + posts, then summarization) that gets expensive and awkward in Zapier. n8n also makes it easier to store structured fields, merge results, and loop through batches without paying per “path.” That said, if you only want “copy a LinkedIn URL into HubSpot,” Zapier or Make can be simpler. If you’re unsure, Talk to an automation expert and describe your volume and your exact fields.
Once this is set up, your CRM stops being a list of names and starts being a set of ready-to-contact people. The workflow does the research grind so your team can focus on conversations.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.