Enriching People
Outcome: verified work emails on your person table, a measured hit rate, and a written policy for catch-alls and misses.
- Surface
- Sync GTM app and MCP server
- Level
- Beginner
- Uses
- enrich_person · find_work_email · verify_email · find_mobile_number
- Credits
- ~15 for 25 people, verified
- Prerequisite
- Lesson 07's person table
The identifier decides the hit rate
What you send in matters more than which provider answers.
| You have | Send | Expected hit rate |
|---|---|---|
| LinkedIn profile URL | The URL | Highest — it is an exact match |
| Full name + company domain | Both, exactly as spelled | Good |
| Full name + company name | Resolve the domain first | Poor until you do |
| First name only, or a nickname | Fix the input | Very poor |
Two cheap fixes that lift hit rate more than any provider change:
- Split combined names. “Dr. Sarah Chen-Williams” should arrive as first
Sarah, lastChen-Williams. - Use the operating domain, not the parent. Enriching against a holding company’s domain misses nearly everyone.
Find, then verify — two steps
Find the address
A waterfall queries providers in turn and stops at the first usable result. You are billed for the result, not for each attempt. See Find work email.
Verify the address
A separate, cheap check that says whether the mailbox exists. Statuses: valid, invalid, catch-all, unknown. See Verify email.
Only valid counts as found
An unverified address is a guess. Counting guesses as hits inflates your numbers and shows up later as a bounce rate that damages your sending domain.
Never send to an unverified list to “test deliverability”. A bounce rate above about 5% is enough to get a sending domain filtered, and the recovery takes weeks during which every campaign underperforms for reasons that look like copy.
Reading your hit rate
After the run, compute: rows with a valid email ÷ rows attempted.
| Hit rate | What it means | What to do |
|---|---|---|
| 75–90% | Healthy corporate B2B list | Nothing |
| 55–75% | Normal for a mixed list | Acceptable; check the misses for input errors |
| 30–55% | Hard segment — SMB, local, non-English markets | Add mobile or LinkedIn as the contact path |
| Under 30% | Input problem, not coverage | Check domains and name splitting before anything else |
Always read ten misses by hand. On a first run, most of them are input errors — wrong domain, parent company, a person who left — and each one is a fix that lifts every future run.
Catch-alls
A catch-all domain accepts mail to any address, so verification cannot confirm the specific mailbox. Pick a policy and write it down:
- Drop them — safest, loses real people.
- Separate, low-volume sequence on a secondary sending domain — the sensible default.
- Send normally — only with a small catch-all share and a healthy sender reputation.
Titles, and when they are wrong
Enriching the current role matters as much as the email. An imported list’s job titles are as old as the file.
- Re-check the title on any imported row before using it in copy.
- If the person has moved on, that is not a dead row — it is a job change signal, and the warmest one you can get.
- Titles from enrichment are the company’s language. Use them verbatim in copy rather than your internal category name.
Mobile numbers
find_mobile_number costs more than email and has lower coverage. Worth it in three cases:
- High-value accounts where a call is the intended motion
- Segments with poor email coverage — local business, SMB, some regions
- A late-stage follow-up on someone who engaged and went quiet
Not worth it as a default column on every row. Gate it on a score or on deal value, and check the calling rules in your target market before you use it.
Do this now
Check your inputs
Names split, domains normalized, LinkedIn URLs present where available.
Run on five rows
Find email, then verify. Read every result and status.
Check the five by hand
Do the addresses match the domain pattern the company actually uses?
Widen to the person table
Run across all rows, then verify all results.
Compute hit rate
Valid ÷ attempted. Write it down; it is your baseline.
Read ten misses
Fix input errors, re-run just those rows.
Set the catch-all policy
And apply it as a filter before export.
Check your work
- Every email has a verification status
- Only
validrows are counted as contactable - You have a hit rate figure computed against rows attempted
- Ten misses were inspected for input errors
- Catch-all policy is written and applied
Where this breaks
The costly mistake is enriching the entire table before qualifying it. Person-level enrichment is the most expensive column in the course, and on an ungated table most of that spend lands on companies you would have dropped. If you skipped the qualification filter in lesson 06 to get to contacts faster, go back — the filter is free and this column is not.
Further automation
Verification decays. An address valid today can be dead in six months, and re-verifying an entire list quarterly is expensive. The cheaper pattern is to re-verify only on bounce, plus a scheduled job-change check that tells you which people moved — then re-enrich only those. CRM Enrichment builds exactly that loop.
Next lesson
12 — Enriching companies, the cheaper half of the enrich stage and the one that should run first.
Reference for this lesson: Find work email, Verify email, find_mobile_number, Waterfall Enrichment.