What this automation does
Every new lead arrives with an email address and not much else. Enrichment fills in the context a rep or a downstream automation needs to act on it.
- Trigger. A new contact is created in the CRM, or a form submission arrives before the CRM record exists.
- Normalize. The workflow lowercases the email, extracts the domain, and checks it against a list of free and disposable email providers.
- Check the cache. If this company domain was enriched in the last 90 days (or whatever window you choose), reuse that result instead of paying for another lookup.
- Run the provider waterfall. Query your primary company data provider. If key fields come back empty, try a second provider. Stop as soon as required fields are filled.
- Read the website. Fetch the homepage and one or two key pages, and have an LLM return a structured summary: what the company sells, who it sells to, and a fit rating against your ideal customer profile with a one-line reason.
- Write back safely. Update dedicated enrichment fields with values, source and timestamp. Copy into primary fields only when they are blank. Log every lookup and its cost.
When it is worth building
Build it when reps are opening a browser tab for every new lead, or when routing and scoring rules depend on fields that are usually empty. If your lead routing needs employee count and region, and half your leads arrive without them, enrichment is the prerequisite.
It is not worth a custom build if you have one provider, low volume, and your CRM’s built-in enrichment covers the fields you use. Turn that on and move on. The custom version earns its cost when you combine providers, add AI interpretation, or need the enriched data in more than one system.
Architecture
| Layer | What we use | Why |
|---|---|---|
| Trigger | CRM webhook, or n8n’s HubSpot or Pipedrive trigger | Fires within seconds of a new contact. n8n’s Salesforce trigger polls on an interval, so use a Salesforce Flow or outbound message when speed matters |
| Data providers | One to three company and person data APIs, called with n8n’s HTTP Request node | No single provider has complete coverage; a waterfall raises fill rate |
| Cache | A Postgres table keyed by domain | Prevents paying twice for the same company and speeds up repeat leads |
| Website reading | A fetch step plus Claude Haiku 5.5 or a small OpenAI GPT model | Cheap, fast summarization of a few pages per company |
| Fit scoring | LLM rating plus a rules check on provider fields | The model judges fit from text; rules enforce hard limits like headcount |
| Write-back | CRM update node with field-level rules | Protects human edits and records provenance |
How to build it
- List the fields that matter. Start from what routing, scoring and reps actually use. Ten well-filled fields beat forty sparse ones. Create enrichment-specific properties in the CRM for each.
- Pick providers and order them. Test two or three providers on a sample of 200 of your real past leads. Measure fill rate per field and spot-check accuracy. Put the provider with the best coverage for your market first.
- Build the cache. Store each domain’s result with a fetched-at date. Check it before any paid call.
- Add the website step. Fetch the homepage text, strip navigation and scripts, and send it to the model with your ICP description and a strict output schema. Ask for “unknown” rather than a guess when the page is thin.
- Write field-level merge rules. Never overwrite a field a user edited. Only fill blanks in primary fields. Always update the enrichment fields and their timestamps.
- Guard against loops. A CRM update can fire the same trigger again. Add a flag or check the enrichment timestamp so a record is processed once.
- Backfill carefully. Run the workflow over existing records in batches that respect provider rate limits and your monthly credit budget.
The downloadable starter template below covers the HubSpot trigger, domain cache, one provider call and the AI website summary.
What breaks in production
- Wrong company match. “Summit Group” exists in dozens of states. Match on domain, not company name, and treat name-only matches as low confidence.
- Parent and subsidiary confusion. A lead from a regional office gets the parent’s global headcount. Store both when the provider returns them, and decide which your routing uses.
- Credit burn. A form spam wave or a bulk import can consume a month of provider credits in an hour. Set a daily spend cap and skip enrichment for leads flagged as spam.
- Thin or blocked websites. Single-page sites, sites behind bot protection, and parked domains produce weak summaries. Return “insufficient information” and let the lead through unscored.
- Stale data. Headcount and funding change. Re-enrich on a schedule only for active opportunities, not the entire database.
- Rate limits. Providers throttle bursts. Queue requests and retry with backoff instead of failing the whole batch.
Timeline and cost
A single-CRM workflow with one provider, a cache and the AI website summary typically takes one to two weeks. A multi-provider waterfall with backfill and custom fit scoring takes closer to three. Lumeor builds lead enrichment in the range of $4,000 to $10,000. Ongoing costs are mostly provider subscriptions or credits (check each vendor’s current pricing), plus a small amount of model usage per new company. If you are choosing an orchestration tool, our n8n vs Make comparison covers the trade-offs for API-heavy workflows like this one.
How to measure success
- Fill rate for each target field, before and after
- Share of lookups served from cache versus paid calls
- Provider cost per enriched lead
- Accuracy on a monthly spot check of 25 random records
- Share of leads that reach routing with all required fields present