How to Build an AI Lead Enrichment Workflow?

JB Jezequel JB Jezequel B2B lead generation tools

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.

Walkthrough: HubSpot contacts with no email or title, completed through Evaboot, judged by Claude, written back

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.

Agent kit Free · Public

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.

Prompt · GitHub
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.

Prompt · n8n
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 lead enrichment: an enrichment tool finds the email, job title and company facts, AI adds job function, seniority and fit to the CRM contact

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:

FieldWhere it comes fromRule
EmailEvaboot profile export or email finderOnly when Evaboot rates it safe and it is on the company's domain
Job titleEvaboot profile exportOnly when the CRM has none
LinkedIn URL and websiteEvaboot profile exportOnly when the CRM has none
Job functionClaude, from the titleOnly when a title is known
SeniorityClaude, from the titleOne of HubSpot's own values
AI enrichment summaryClaude, from all the factsOne line, with a fit: good, maybe or no
AI enrichment statusThe workflowEnriched, 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.

  1. Add Three Fields to HubSpot
  2. Pull Only the Contacts That Need It
  3. Run the Evaboot Waterfall
  4. Let the Agent Judge Each Contact
  5. Review Every Change
  6. 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:

HubSpot contact properties: AI enriched at, AI enrichment status and AI enrichment summary

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.

Terminal: the 8 contacts enrich.py pull returned, all with no email and no job title: 3 with a Sales Navigator id, 3 with a website, 2 with a public LinkedIn URL; names blurred

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:

Terminal: enrich.py evaboot runs the waterfall on 8 contacts: 3 enriched by the profile export, 5 completed by the email finder, 0 not found; names blurred

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:

Terminal: enrich.py check passes and enrich.py review lists the fields per contact, with one email held because it is not on the company's domain; names and emails blurred

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:

Terminal: enrich.py push dry run, then push --apply updates 8 contacts and 24 fields

Each contact now shows what was found and why it fits, in its own record:

HubSpot contacts after AI lead enrichment: job title, AI enrichment status and summary, job function and seniority; names blurred

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:

n8n AI lead enrichment workflow after a run: HubSpot search, 6 contacts split between the Evaboot profile export and the email finder, all contacts judged by Claude, 6 contacts updated

The setup takes four steps:

  1. Import the Workflow and Add Three Credentials
  2. Fill In Who Fits
  3. Check the Two Evaboot Calls
  4. 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:

n8n Settings node with since_days 7, limit 50, and the buyers description

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:

n8n HTTP Request node Evaboot profile export: POST to api.evaboot.com/v1/extractions/single with the Evaboot API header auth and the profile_id from hs_linkedin_url

The email finder sends the first name, the last name, the company and the website, and gets the email and its status:

n8n HTTP Request node Evaboot email finder: POST to api.evaboot.com/v1/email-finder/single with first name, last name, company name and company domain

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:

RunContactsEnrichedEmail onlyNot foundHeld
AI Agent83501 email, off-domain
n8n63300

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:

  1. Overwriting What Your Team Wrote
  2. Trusting Every Safe Email
  3. Expecting a Title From a Name
  4. 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.

Lead enrichment waterfall: a Sales Navigator id gets a profile export with title, company and email; name and company only get an email from the email finder; AI judges both

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