AI lead enrichment works when each part of the workflow does the job it’s good at: enrichment vendors supply the facts, a language model makes the judgment calls the data can’t, and fixed rules decide who gets the lead. Build it as one workflow, from form submit to CRM update, with logging and a human review queue in place from day one. Then judge it on two numbers: speed-to-lead and routing accuracy.
What enrichment and routing should decide
Before choosing tools, write down the decisions the workflow makes for every inbound lead. In most B2B companies there are four, and every field you pay to enrich should feed one of them. If nothing changes based on funding stage, don’t buy funding stage.
| Decision | Main inputs | Who decides |
|---|---|---|
| Real prospect, or a job seeker, vendor, student or existing customer? | Email domain, form answers, free-text message | Rules first, the model for ambiguous cases |
| Fit tier against your ideal customer profile (ICP): A, B, C or disqualified | Firmographics, homepage content, persona | The model, applying your written rubric |
| Owner: account owner, territory, segment team or nobody | CRM account records, territory, segment | Rules only |
| Next step and how fast: rep, nurture or no action | Tier, intent, owner | Rules only |
This isn’t a points-based lead score, which builds over weeks of engagement; it’s a call made minutes after a form submit. If you run a lead scoring model in HubSpot, the AI tier can feed its fit side.
Architecture of the workflow
Seven steps, each writing its output to the log before the next runs:
- Trigger. A form webhook or a CRM “contact created” event. Carry the submission ID through every step so a retry can’t duplicate or reassign a lead.
- Normalize and pre-filter. Extract the domain and check it against free-mail and disposable-domain lists. Look it up in your CRM: existing customers and accounts with an open deal go straight to their owner. Spam stops here.
- Enrich. Company data from the domain, person data from the email, and the company’s homepage text.
- Qualify. A model call receives form answers, enrichment data, homepage text and your written ICP, and returns a structured verdict.
- Route. Deterministic rules turn the verdict into an owner and a next step.
- Update the CRM. Write fields, set the owner, create the task, alert the rep.
- Log. One row per lead with every input, output, timing and cost.
n8n, Make and Zapier can all run this; the n8n vs Zapier vs Make comparison covers how volume, hosting and custom logic decide between them.
One timing catch: a booking calendar on the thank-you page must route in seconds, before the model finishes. Route it on form answers plus a fast company lookup, and let the AI step confirm or flag the route right after.
Enrichment sources and cost per lead
Three kinds of sources:
- Your CRM’s built-in enrichment, if your plan includes it. Easiest to wire up, though coverage varies, especially for small companies.
- Data vendors such as Apollo, ZoomInfo or Clay, which pulls from many providers through one account. You pay per lookup or in credits.
- The company’s website. Nearly free to fetch, and it shows what databases miss: what the company sells, and to whom.
Run them as a waterfall: cheapest first, the next only if a required field is still empty. Enrich only fields your decisions use, usually employee range, industry, country and seniority. Look up the person only when the company passes basic firmographic filters, and cache company data by domain so a repeat company costs nothing.
A hypothetical month of 1,000 submissions, 300 removed by the pre-filter, with made-up prices:
| Line | Volume | Unit cost | Monthly cost |
|---|---|---|---|
| Company lookups, after cache hits | 500 | $0.20 | $100 |
| Person lookups, firmographic fit only | 350 | $0.40 | $140 |
| Model calls | 700 | $0.02 | $14 |
| Automation platform | Flat | — | $50 |
| Total | $304 |
That’s about $0.30 per submission and $0.43 per lead that reached the model, far less than the cost of five minutes of rep research per lead. Enrichment credits, not the model, are the big line, so the pre-filter and cache matter more than model choice.
AI qualification against your ICP
The model’s job is judgment, not facts. Asked for headcount, it will guess, and a guess in a CRM field looks exactly like data. Ask what enrichment can’t answer:
- Is this B2B software, an agency or a retailer, based on what the homepage says?
- Does the message signal buying intent, a support request, a partnership pitch or a job application?
- Does a messy title like “Growth & RevOps Lead” match a buyer persona?
- Taken together, which ICP tier fits?
Write the ICP as a rubric
A model can only apply criteria it can see. Put a short rubric in the prompt: must-haves, disqualifiers and a plain definition of each tier. Add five to ten real examples from closed-won deals and disqualified leads, each with the correct answer. Tell it to return “unknown” when evidence is missing and to cite the evidence behind every call.
Force a structured output
Ask for JSON that matches a fixed schema, and validate it before anything downstream reads it:
{
"tier": "A",
"intent": "buying",
"persona": "marketing_leader",
"disqualify_reason": null,
"confidence": "high",
"reason": "B2B payroll SaaS; 120 employees; VP Marketing asking about pricing.",
"missing": []
}
Use fixed value lists for tier, intent, persona and disqualify reason, so routing rules never parse prose. If validation fails, retry once, then send the lead to human review; never drop it. Keep the temperature low where the model allows it, and version the prompt, so every verdict traces back to the rubric that produced it.
Routing rules and CRM updates
Routing belongs in rules you can read, not in the model. Evaluate them top to bottom and stop at the first match:
| Condition | Route | Example deadline |
|---|---|---|
| Existing customer | Account manager or support | Same day |
| Account with an owner or open deal | Account owner | 1 hour |
| Named target account | Assigned account executive | 15 minutes |
| Low confidence or failed validation | Human review queue | 4 hours |
| Disqualified: job seeker, vendor, student, out of ICP | Relevant inbox or no action | None |
| Tier A, buying intent | Round robin by segment or territory | 15 minutes |
| Tier A with research intent, or tier B | SDR queue | Same business day |
| Tier C | Nurture sequence | Automated |
Set deadlines from rep capacity. Write each rule’s ID to the lead record, so a misrouted lead shows which rule sent it.
For the CRM update:
- Write model output to dedicated fields: AI tier, reason, confidence, prompt version, rule ID and enrichment date.
- Fill standard fields like industry only when empty. Never overwrite what a rep entered.
- Never reassign an owned lead; alert the owner instead.
- Create the follow-up task and send the rep the one-line reason, so they know why the lead matters before the first call.
Guardrails, logging and human review
Most failures here are silent: empty vendor fields, a timed-out model call, a rule that stops matching after a dropdown is renamed. Build guardrails before launch:
- Spending caps on the enrichment and model API accounts
- Timeouts on every external call, with a fallback that routes on form data alone
- Any error defaults to human review, so no lead is dropped
- The model receives only the fields it needs, and vendor terms on personal data have been checked
- Deletion and opt-out requests also clear caches and logs
- An alert when error rate or run volume moves sharply off its normal range
Log one row per lead: submission ID, step timestamps, enrichment fields and source, prompt version, model output, rule fired, owner and cost. That table is how you debug and measure.
Human review happens in three places: a daily queue for low-confidence verdicts, a weekly random sample of about 20 leads checked against the rubric, and a “wrong route” dropdown reps fill in on the lead record (“not ICP,” “should be mine”). Each misroute becomes a new prompt example or a rule fix.
Before going live, run two weeks in shadow mode: the workflow enriches, qualifies and logs, but leads still route the old way. Compare its calls with what happened, fix the rubric, then switch it on. It’s how I run most AI automation builds: read-only first, write access once the log earns it.
Measuring speed-to-lead and accuracy
Speed-to-lead is the time from form submission to the first human response: a call, a personal email or a booked meeting, not just assignment. Report the median and the slowest 10%, split by business hours and after hours, because averages hide leads that waited overnight.
Routing accuracy needs more than one signal:
| Metric | Definition | Source | If it’s off |
|---|---|---|---|
| Speed-to-lead | Submit to first human response | CRM activity timestamps | Check rep capacity, then workflow latency in the log |
| Review agreement | Sampled leads where the reviewer agrees with tier and route | Weekly sample | Add examples for categories it misses |
| Reassignment rate | Leads whose owner changes within 7 days | CRM owner history | Fix the rules behind them |
| Tier conversion | Meeting and opportunity rate by AI tier | CRM reports | If tier B converts like tier A, the rubric is too strict |
| Missed fits | Nurtured or disqualified leads that later became opportunities | Monthly CRM search | Loosen the disqualifier that caught them |
Tier conversion matters most over time. If tier A leads don’t meet and buy at a clearly higher rate than tier C, the qualification step isn’t sorting anything, however fast it runs.
Get it built
If inbound leads wait hours or land with the wrong rep, I can build this workflow on your CRM, shadow mode and logging included. The AI automation add-on starts at $2,500 a month, or begin with a Growth Audit, $1,500 fixed and credited if we continue. See pricing or get in touch.