A new contact lands in your CRM with a name and a company, and nothing else. No email, no title, no idea whether it fits.
Your reps either fill the gaps by hand or skip the lead. Both cost you pipeline.
This guide explains what AI lead enrichment is, what it should add to your CRM, and shows a workflow we tested on 14 HubSpot contacts.
30-Second Summary
- AI lead enrichment completes a lead record: the data comes from an enrichment tool, and AI adds what it means, such as a job function, a seniority and a fit.
- Our AI lead enrichment workflow finds the HubSpot contacts with no email or no title, completes them through Evaboot, and lets Claude judge each one.
- It is a waterfall: a Sales Navigator profile export first, then the email finder for anyone the profile cannot complete.
- It writes only empty fields, an email only when Evaboot rates it safe, and holds any email on another domain than the company's for a person to check.
- In our test, the agent completed 8 contacts for 8 credits, and held one valid email that was not on the company's domain.
You can run the workflow from an AI Agent in Claude Code, Codex or Cursor, or from n8n, every morning.
We ran both on real HubSpot contacts. Copy the workflow below, or follow the same method with your own tools.
We will walk you through the process step by step.
Everything is in one public GitHub repo: the skill, a small helper script, the fit rules and the n8n workflow. Paste the prompt into your AI Agent, or pick the n8n tab to run it every morning.
Let your AI agent set it up
Paste this prompt into Claude Code, Codex or Cursor. Your agent clones the public repo, follows its instructions and asks before every change.
Clone https://github.com/evaboot-labs/ai-lead-enrichment, read AGENTS.md and follow the skill. Enrich my new HubSpot contacts, and show me every change before you write anything.
In the repo
- The ai-lead-enrichment skill: pull, waterfall, judge, review, write back
- enrich.py: every HubSpot and Evaboot call, the checks and the review
- FIT.md: who fits, and the field rules
- The n8n workflow, with its setup guide
Set it up in n8n
Paste this prompt into your AI agent and it walks you through the import, one step at a time. Or open the workflow JSON on GitHub and import it yourself.
Set up the AI lead enrichment workflow in my n8n. Clone https://github.com/evaboot-labs/ai-lead-enrichment and follow docs/n8n.md. Walk me through the three HubSpot properties, importing n8n/ai-lead-enrichment.json, the HubSpot, Evaboot and Anthropic credentials, and the settings, one step at a time.
In the repo
- The workflow JSON: every morning at 7, from HubSpot back to HubSpot
- docs/n8n.md: the properties, the three credentials and the settings
- The same write-back rules as the script
We used HubSpot, Evaboot and Claude in our example, but with a few tweaks, the same method works with another CRM or model.
In this guide
- What Is AI Lead Enrichment?
- What an AI Enrichment Workflow Adds to Your CRM
- How to Build an AI Lead Enrichment Workflow
- How to Run Your Lead Enrichment in n8n
- Example: 14 Contacts, Two Ways
- Common Lead Enrichment Mistakes
What Is AI Lead Enrichment?
AI lead enrichment is completing a lead record with the data it is missing, then letting AI add what that data means.
The data comes from an enrichment tool: an email finder, a profile export or a company database. AI cannot find an email or a job title on its own; it can only guess one.
AI adds the judgment: which department the title belongs to, how senior the person is, and whether the lead fits who you sell to.
What an AI Enrichment Workflow Adds to Your CRM
Each field has a source and a rule. Here is what our workflow writes in HubSpot:
| Field | Where it comes from | Rule |
|---|---|---|
| Evaboot profile export or email finder | Only when Evaboot rates it safe and it is on the company's domain | |
| Job title | Evaboot profile export | Only when the CRM has none |
| LinkedIn URL and website | Evaboot profile export | Only when the CRM has none |
| Job function | Claude, from the title | Only when a title is known |
| Seniority | Claude, from the title | One of HubSpot's own values |
| AI enrichment summary | Claude, from all the facts | One line, with a fit: good, maybe or no |
| AI enrichment status | The workflow | Enriched, email only or not found |
Nothing your team wrote is ever overwritten. The workflow fills empty fields and its own three fields, nothing else.
How to Build an AI Lead Enrichment Workflow
Our workflow turns an incomplete contact into a checked, complete one, in six steps.
The agent finds and judges. You read the changes, and only then does it write.
- Add Three Fields to HubSpot
- Pull Only the Contacts That Need It
- Run the Evaboot Waterfall
- Let the Agent Judge Each Contact
- Review Every Change
- Write Only the Empty Fields
1. Add Three Fields to HubSpot
The workflow keeps its own work in three contact properties: AI enrichment status, AI enrichment summary and AI enriched at.
The status takes a contact out of the next run, so nobody is enriched or charged twice:
2. Pull Only the Contacts That Need It
enrich.py pull asks HubSpot for contacts created in the last 7 days with no email or no job title that were never enriched.
We tested it on 8 new contacts with a first name, a last name and a company: three with a Sales Navigator id, three with a company website only, and two with a public LinkedIn URL.
3. Run the Evaboot Waterfall
A waterfall tries the richest source first. A contact with a Sales Navigator id gets a profile export: title, months in role, company size, industry, growth and a verified email.
Every other contact goes to the email finder, on name and company. It returns an email and its status, and nothing else:
A public LinkedIn URL is not enough for the profile export: Evaboot needs the Sales Navigator id, which its own exports store. Both public URLs went to the email finder.
4. Let the Agent Judge Each Contact
The agent writes a job function, a seniority, a fit and one summary line per contact, from FIT.md and the facts Evaboot found.
One judged contact
- Title found: Ingénieur data
- Job function: Engineering
- Seniority: senior
- Fit: no
- Summary: Data engineer at Boond, a 51-200 person software company: builds the product, does not prospect.
Without a title, it says so instead of guessing. Five of our eight contacts got an email but no title, so their fit stayed at maybe.
5. Review Every Change
enrich.py check rejects a bad judgment: a seniority HubSpot does not know, a summary over 30 words, or a guess at someone's gender. Then enrich.py review shows every field that will change:
One email was held. It was valid, but not on the company's domain, so the workflow wrote it in the summary for a person to check instead of in the email field.
The agent also flagged a contact that was not a person: a company page named after the marketing team, marked "no".
6. Write Only the Empty Fields
On your yes, enrich.py push --apply updates HubSpot in one call. Our test wrote 24 fields on 8 contacts:
Each contact now shows what was found and why it fits, in its own record:
How to Run Your Lead Enrichment in n8n
n8n runs the same waterfall every morning. A HubSpot search finds the contacts, two Evaboot nodes complete them, Claude judges them, and each contact is updated with the same rules.
Here is the whole workflow, after a run on 6 new contacts:
The setup takes four steps:
- Import the Workflow and Add Three Credentials
- Fill In Who Fits
- Check the Two Evaboot Calls
- Run It, Then Publish
1. Import the Workflow and Add Three Credentials
Import n8n/ai-lead-enrichment.json from the repo, then add a HubSpot app token, an Evaboot API key and an Anthropic key.
The Evaboot key is a Header Auth credential: the name is Authorization, the value is Bearer followed by your key.
2. Fill In Who Fits
The Settings node holds how many days back to look, how many contacts to take per run, and who your buyers are:
Keep the buyers short: the roles and the company size you sell to, and who is not a fit.
3. Check the Two Evaboot Calls
The profile export sends the contact's Sales Navigator URL to Evaboot and gets the full profile back:
The email finder sends the first name, the last name, the company and the website, and gets the email and its status:
4. Run It, Then Publish
Click Execute workflow and open a contact in HubSpot. In our run, 3 contacts were enriched by the profile export and 3 got an email from the finder.
Publish the workflow, and it runs every morning at 7 on the contacts created since the last run.
Example: 14 Contacts, Two Ways
We ran the agent on 8 contacts and n8n on 6 more, all created the same day in our test HubSpot:
| Run | Contacts | Enriched | Email only | Not found | Held |
|---|---|---|---|---|---|
| AI Agent | 8 | 3 | 5 | 0 | 1 email, off-domain |
| n8n | 6 | 3 | 3 | 0 | 0 |
Three things stood out. Every contact with a Sales Navigator id came back with a title; none of the others did.
The email finder is not fully stable. On one n8n run, it found no email for one contact; on the next run, it found a safe one.
What changed between two runs
- Email finder: no email, then a safe email
- Claude's fit for one contact: maybe, then no
Claude judged the same contact differently on two runs: maybe once, no the next time. Keep the summary as a hint for your reps, not a gate.
Common Lead Enrichment Mistakes
Most enrichment problems come from writing too much, not finding too little.
Here are the four mistakes we see most:
- Overwriting What Your Team Wrote
- Trusting Every Safe Email
- Expecting a Title From a Name
- Enriching the Whole CRM Every Day
1. Overwriting What Your Team Wrote
A rep corrected a title last week. A blind enrichment run puts the old one back.
Fill empty fields only, and keep the AI's work in its own fields.
2. Trusting Every Safe Email
"Safe" means the mailbox exists, not that it belongs to your lead's company.
Compare the email's domain with the company website, and hold the ones that differ.
3. Expecting a Title From a Name
An email finder returns an email, not a job. Five of our eight contacts had no title after enrichment.
Store the Sales Navigator id when leads enter your CRM: Evaboot's exports keep it, and the profile export needs it.
4. Enriching the Whole CRM Every Day
Every lookup costs a credit. Enriching every contact every morning burns credits on people you will never call.
Enrich new contacts once, and let a status field take them out of the next run.
Frequently asked questions
What is AI lead enrichment?
Completing a lead record with missing data, such as an email, a job title or company facts, then letting AI add what the data means: a job function, a seniority and a fit.
The data comes from an enrichment tool; AI adds the judgment.
How does lead enrichment work with a CRM?
The workflow reads the incomplete contacts from the CRM, finds the missing data with an enrichment tool, and writes it back.
Write only into empty fields, so nothing your team entered is lost.
Can AI find a lead's email address?
No. AI can only guess an email, and a guessed email bounces.
An email finder like Evaboot finds it and verifies it; AI then judges the lead.
Is lead enrichment worth it?
Yes, for contacts you will actually contact. A complete record saves your reps the research.
Enrich new contacts as they arrive, not your whole database every day.
How much does AI lead enrichment cost?
Our workflow costs 1 Evaboot credit per profile export and 1 per email found, plus your AI model.
Our 8-contact test cost 8 credits.
Rate this article