Skip to Content
CoursesCRM Enrichment04 Fill the gaps

Fill the Gaps

Outcome: empty fields completed from enrichment, populated fields left alone, every filled value carrying a source flag, and a measured completeness improvement.

Surface
Sync GTM app and MCP server
Level
Intermediate
Uses
enrich_organization · enrich_person · find_work_email · verify_email
Credits
~2 per record, depending on gaps
Prerequisite
Lesson 03's deduped, mapped table

The fill-only rule

Fill what is empty. Do not touch what is populated.

This is the rule that makes CRM enrichment safe to run, and it is worth being strict about on the first pass. A populated field may be wrong, but it may also be a human’s deliberate correction — and overwriting one of those destroys trust in the whole pipeline faster than any amount of bad data.

Lesson 06 handles the harder case: updating fields that are populated but stale. That comes after this loop has proven itself.


Enrich in cost order

Free first

Anything derivable from what you already have. Domain from an email, seniority from a title, country from an address. Formula columns, no credits.

Cheap company-level next

enrich_organization fills headcount, industry, country, founded date, funding, LinkedIn URL in one call. Run it on accounts missing any of them.

Person-level after

Current title and company from profile enrichment. Cheaper than contact data and often the more important fix.

Contact data last

find_work_email then verify_email, only on contacts genuinely missing a usable address.

Each step reduces the input to the next: a contact whose company turns out to be out of ICP does not need an email lookup.


Only enrich what is missing

A conditional column per field, not a blanket run.

run_company_enrich = industry IS NULL OR employee_count IS NULL OR country IS NULL run_email_lookup = email IS NULL OR email_status = "invalid" run_profile_enrich = title IS NULL OR last_verified > 6 months

A blanket re-enrichment of every record is the most common way this project becomes expensive. On a 5,000-record slice with three enrichment columns, running unconditionally costs several times what a gap-filling run costs — and most of the results are values you already had.


Flag every filled value

Two columns per repaired field, always.

ColumnValues
industrythe value
industry_sourcecrm / enriched / inferred
industry_filled_datewhen

Three reasons: scoring can weight enriched values differently, you can measure the fill’s accuracy later, and anyone looking at the record can tell a human entry from a machine one.

Never write an inferred value back without its flag. A CRM that mixes observed and inferred data without distinction stops being a system of record.


Measure the fill

Completeness before and after, per field:

FieldBeforeAfterFilled
Industry61%94%33%
Employee count44%91%47%
Verified email52%78%26%
Current title70%89%19%

Then the number that matters more: of the fields you filled, how many were on records anyone will actually use? Filling industry on 4,000 dormant records is a worse outcome than filling verified email on 200 open opportunities.


Do this now

Build the free derivations first

Domain from email, seniority from title, country from address.

Measure completeness per field

Before you spend anything.

Add conditional enrichment columns

One condition per field group.

Run company enrichment on gaps only

Run person enrichment on gaps only

Run contact lookup last, on genuine gaps

Verify every found address

Add source and date flags per filled field

Measure completeness again

And compute the fill rate.


Check your work

  • No populated field was overwritten
  • Every enrichment column runs conditionally
  • Free derivations ran before any paid enrichment
  • Every filled value has a source flag and a date
  • You have before and after completeness figures

Where this breaks

Filling a field with a low-confidence value is worse than leaving it empty. An empty industry field is visibly missing and someone will look it up; a wrong one is invisible and will be used in segmentation, routing and reporting for years. Where the enrichment returns something uncertain, leave the field empty and record the attempt — the gap is more honest than the guess.


Further automation

Once gap-filling is proven, the natural extension is filling gaps at creation time rather than in batches: a new record triggers enrichment immediately, so it is never incomplete in the first place. That is the same mechanism as Automated Inbound, pointed at CRM records instead of form fills.


Next lesson

05 — Score and segment, tiering the repaired records by fit and recency.

Reference for this lesson: enrich_organization, enrich_person, find_work_email, How enrichment works.