Lead Enrichment Workflow
Automatically enrich leads with company and contact data
What you’ll build
A workflow that takes new leads and enriches them with company information, AI-generated insights, and scoring — all automatically saved to your CRM.
Time to build: 20 minutes
Nodes used: HubSpot, Web Scraper, LLM, HubSpot Update
The problem
Raw leads lack context for effective outreach:
- Only have email and name
- Don’t know company size, industry, or role
- Can’t prioritize leads effectively
- Sales team wastes time on research
This workflow enriches every lead automatically.
Workflow overview
graph LR
A[New Lead] --> B[Extract Domain]
B --> C[Web Scraper]
C --> D[LLM Analysis]
D --> E[HubSpot Update]
Step-by-step guide
Step 1: Set up the trigger
This workflow can be triggered by:
- Manual: Run with a list of leads
- Webhook: Trigger on new CRM entry
- Scheduled: Process new leads daily
For this guide, we’ll use a Google Sheet of new leads.
Step 2: Create the workflow
- Click New Workflow
- Name it “Lead Enrichment”
Step 3: Fetch new leads
Add Google Sheets Reader
Configure:
- Spreadsheet ID: Your leads sheet
- Range:
NewLeads!A:C
Columns: Name, Email, Company (optional)
Step 4: Loop and extract company domain
Add Loop node
Configure:
- Items:
{{data}}
Extract domain from email
Add an LLM node to extract the company domain:
Extract the company website from this email: {{Loop_0.currentItem.email}}
Rules:
- If email is john@acme.com, website is https://acme.com
- If it's a personal email (gmail, yahoo, etc.), return "personal"
Return only the URL or "personal". Step 5: Scrape company website
Add Conditional node
Skip personal emails:
- Condition:
{{response}}does not equal “personal”
Add Web Scraper node
Configure:
- URL:
{{response}} - Content Type: Article
This extracts:
- Company description
- Products/services
- About page content
- Recent news/blog posts
Step 6: Analyze and enrich with AI
Add LLM node for analysis
Configure:
- Model: GPT or Claude
- Instructions:
Analyze this company and enrich the lead profile.
Lead:
- Name: {{name}}
- Email: {{email}}
Company Website Content:
{{content}}
Extract and analyze:
1. Company Name
2. Industry
3. Company Size (estimate from website)
4. Main Products/Services
5. Recent News or Updates
6. Potential Pain Points (based on their industry)
7. Personalization Hooks (specific things to mention in outreach)
8. Lead Score (1-100) based on fit with B2B SaaS companies
Output as JSON:
{
"company_name": "",
"industry": "",
"estimated_size": "",
"products": "",
"recent_news": "",
"pain_points": [],
"personalization_hooks": [],
"lead_score": 0,
"score_reasoning": ""
} Step 7: Update CRM
Add HubSpot Update Company
Configure:
- Company ID: Find or create by domain
- Properties:
{
"industry": "{{industry}}",
"numberofemployees": "{{estimated_size}}",
"description": "{{products}}",
"lead_score": "{{lead_score}}",
"personalization_notes": "{{personalization_hooks}}"
} Sample output
Before enrichment
| Name | Company | |
|---|---|---|
| John Smith | john@acme.io | - |
After enrichment
| Field | Value |
|---|---|
| Name | John Smith |
| john@acme.io | |
| Company | Acme Technologies |
| Industry | B2B SaaS |
| Size | 50-100 employees |
| Products | Project management software |
| Lead Score | 85/100 |
| Personalization | ”Recently launched new AI features; Growing team in EMEA” |
Advanced options
Add LinkedIn enrichment
Enhance with LinkedIn data:
graph LR
A[Lead] --> B[Company Website]
A --> C[LinkedIn Search]
B --> D[Merge Data]
C --> D
D --> E[AI Analysis]
Trigger from CRM webhook
Process leads in real-time:
- Set up HubSpot webhook on new contact
- Workflow triggers automatically
- Lead enriched within seconds of form submission
Route high-value leads
Add automatic routing based on score:
Conditional:
If lead_score >= 80
→ Notify sales team immediately
→ Create task in CRM
Else if lead_score >= 50
→ Add to nurture sequence
Else
→ Mark as low priority
Enrich existing database
Run a batch enrichment on your current CRM:
- Export all contacts without enrichment
- Process in batches (100 at a time)
- Update CRM with enriched data
- Flag contacts that need review
Data sources for enrichment
| Source | Data Available |
|---|---|
| Company website | Products, about, news |
| Role, tenure, connections | |
| Crunchbase | Funding, investors, size |
| News APIs | Recent mentions, PR |
Best practices
Handle edge cases
- Personal emails: Skip or flag for manual review
- New companies: Less data available, lower confidence
- International: Adjust for non-English websites
Verify critical data
AI extraction isn’t perfect. For high-value leads:
Conditional:
If lead_score >= 90 AND estimated_value >= $10,000
→ Flag for human verification
Keep data fresh
Re-enrich periodically:
- Active opportunities: Weekly
- Pipeline: Monthly
- All contacts: Quarterly
Respect rate limits
When enriching large lists:
- Add delays between API calls
- Process in batches
- Run during off-peak hours
Results you can expect
| Metric | Manual | With Draft & Goal |
|---|---|---|
| Leads enriched/hour | 5-10 | 100+ |
| Data completeness | 40% | 90%+ |
| Time to first touch | 24-48 hours | < 1 hour |
| Sales team efficiency | Baseline | +30-50% |