AI as an Enrichment Fallback
Outcome: a fallback column that recovers a measured share of missed rows, with every inferred value flagged as inferred and contact data explicitly excluded.
- Surface
- App and MCP server
- Level
- Intermediate
- Uses
- AI research agent · scrape_emails_from_website
- Credits
- ~10 for a 20-row fallback run
- Prerequisite
- An enrichment run with misses in it
The rule that governs this whole lesson
AI may infer facts. It may never invent contact details.
A model asked for a work email will produce firstname.lastname@company.com. It looks right, it is unverifiable without sending, and it bounces at a rate that damages your sending domain. There is no acceptable use of a model-generated email address.
For contact recovery, the fallback is site scraping followed by verification — real addresses found on real pages, then checked.
Where AI legitimately fills a gap
| Missing field | AI fallback | Reliability |
|---|---|---|
| Industry / category | Read the site and classify | Good |
| What they sell | Read the site | Good |
| B2B or B2C | Read the site | Good |
| Company size band | Infer from team page, job posts, footprint | Moderate — band only |
| Country / HQ | Read contact or about page | Good |
| Tech stack | Read job posts and integrations page | Moderate, and complements detection |
| Revenue | — | No. Not inferable. |
| Email or phone | — | No. Scrape and verify instead. |
Notice the pattern: AI can read something that exists. It cannot know something nobody published.
Mark everything inferred
Every fallback value gets a source flag next to it.
| Column | Values |
|---|---|
industry | the value |
industry_source | provider / inferred / missing |
Three things this buys you:
- Scoring can weight them differently. An inferred value is weaker evidence and can score lower.
- You can measure the fallback. Compare outcomes for inferred versus provider rows, and decide whether the column earns its cost.
- Nobody downstream is misled. A rep looking at an account should be able to tell a fact from an inference.
Writing inferred values back to a CRM without the source flag is how a system of record quietly fills with plausible fiction. Six months later nobody can tell which fields were observed and which were guessed, and the CRM stops being trusted for anything. Carry the flag through the export.
Structuring the fallback
Run the provider enrichment first
Always. It is cheaper and more accurate.
Filter to the misses
The fallback column runs only where the provider returned nothing. Never on the whole table.
Give the agent the anchors
Domain, company name, and whatever the provider did return. Partial data improves the inference substantially.
Constrain the output
Same closed value set as the provider field, so the two columns merge cleanly.
Require the abstain
“If the website does not make this clear, answer Unknown.” An inference with no basis is worse than a gap.
Merge with the flag
One industry column, one industry_source column.
Measuring whether it is worth it
Compute two numbers after the run:
- Recovery rate — of the rows the provider missed, what share did the fallback fill with a non-Unknown value?
- Cost per recovered row — fallback credits ÷ rows recovered.
Then judge: below about 30% recovery, the fallback is usually not worth its cost, and the honest move is to accept the gap and let the score reflect it. Above 50% it is typically a clear win.
Do this now
Find your misses
Filter to rows where a key enrichment field is blank. Count them.
Pick one field
The one whose absence most affects your gate.
Build the fallback prompt
Anchors, constrained values, abstain instruction.
Run on 20 missed rows
Read every answer.
Verify ten by hand
Open the sites. Was the inference right?
Add the source flag
And merge into a single field.
Compute recovery rate and cost
Decide whether to keep the column.
Check your work
- The fallback runs only on missed rows
- No contact detail is ever model-generated
- Every fallback value carries a source flag
Unknownappears in the output- You have a recovery rate and a cost per recovered row
Where this breaks
Letting inferred values into the same column as provider values without a flag destroys your ability to reason about data quality. Every score, every gate and every report then mixes observed facts with model guesses at an unknown ratio, and when a number looks wrong there is no way to find out why. The flag column is free. It is not optional.
Further automation
Track recovery rate over time. A rising miss rate on the provider side usually means your sourcing drifted into a segment with thinner coverage — which is worth knowing as a targeting signal, not just as a data problem.
Next lesson
11 — Classifying rows, the highest-value AI column per credit spent.
Reference for this lesson: How enrichment works, AI agents, scrape_emails_from_website, Waterfall Enrichment.