Clay logo, go to homepage
Clay GTM guide

How to Enrich HubSpot Records with Verified Data

HubSpot tells you what someone typed into it. Enrichment tells you what's true now.

May 24, 202610 min read

A HubSpot record is only as current as the day it was last touched, and most haven't been touched in months. Contacts change jobs, companies grow, phone numbers get reassigned, and the form fill from eighteen months ago quietly rots in place. Roughly 3 to 5 percent of CRM records go stale every month. By year's end, the database your reps run on is wrong about a third of the time. The fix is not a one-time backfill. It's a loop: pull the records, fill the gaps, verify every value, write it back without creating duplicates, and re-run it on a schedule. This is how to build that loop on HubSpot.

What you need before you start:

  • A Clay account connected to HubSpot: With permission to read and write the objects you care about, such as contacts, companies, and deals.
  • Read and write access to the objects in scope: Enough access to map fields and add a property or two for tracking.
  • A short list of the fields that matter: The ones that change what a rep does or how a workflow fires. Those are worth enriching and keeping fresh; the rest spend credits for nothing.

Step 1: Pull HubSpot records into Clay

Start from a defined set, and remember that reading is always safe.

Clay's HubSpot integration imports, creates, updates, and manages HubSpot objects directly. The read side uses Lookup actions: they pull data from HubSpot into Clay without changing anything in your CRM, so you can experiment, test queries, and iterate with zero risk to production. Import a filtered set, contacts missing a title, companies with no employee count, or leads from a recent campaign, into a Clay table, and carry the HubSpot record ID on every row. That ID is the key that lets the write-back land on the exact object later instead of guessing.

Step 2: Find which fields are empty, and which are quietly wrong

A blank field is honest. A field that looks full but is two years out of date is the expensive one.

Before enriching anything, profile what you imported and separate true gaps from silent decay, because they need different treatment. A missing employee count is a gap you fill once. A title that was right at form-fill but wrong after a promotion is decay you have to re-check on a cadence.

Auto-plays a completeness audit across HubSpot fields. Click a field to see what makes it decay; set the window to watch the stale share move.

Audit · imported HubSpot contacts
Decay window
Present & currentStale (past window)Missing

Blanks are gaps to fill once; amber is decay to re-check on a cadence. Click a field to see what drives it.

Enrichment priorities come from auditing the records you have: blanks are one-time gaps, but the stale-but-populated fields are the ones quietly misleading reps, and they need a recurring refresh.

Step 3: Waterfall-enrich the gaps with verified data

One provider is a coverage ceiling. A waterfall is how you get past it.

No single vendor has every contact and every firmographic. A waterfall checks the cheapest, highest-hit provider first and only falls through to the next when it comes up empty, until a field fills or the chain is exhausted, and you pay for the provider that delivers rather than the ones that missed.

Auto-runs a cheapest-first work-email waterfall (Findymail, Prospeo, Hunter, Dropcontact) to 91% where one provider stalls at 58%. Click a provider to inspect it.

Field: Verified work email · 1,000 contacts
Cumulative coverage0%
Found (0%) Verified & usable (0%)
1
Findymailruns against 1,000 · fills 580
2
Prospeoruns against 420 · fills 172
3
Hunterruns against 248 · fills 82
4
Dropcontactruns against 166 · fills 46

Stacking providers cheapest-first lifts usable coverage far past any single vendor's ceiling while billing each provider only against the records the one before it missed. Providers and ordering reflect Clay's North America work-email data-test; order your own chain to your segment.

That coverage lift is the difference a waterfall makes against a single incumbent vendor.

88%

share of its data gap Hex filled with Clay's waterfall, versus its previous single enrichment vendor

Read the full story

For the company-specific facts no provider database sells, point an AI research agent at the record. Claygent reads the open web and returns a structured value you can write to a HubSpot field: whether an account runs the platform your product integrates with, whether they just opened an office in your territory, or whether they posted a role that signals the project you solve.

Claygent prompt — fill a missing HubSpot field from the open web
Company: {{Company name}}Domain: {{Company domain}}Research this company using its website, recent press, and publicjob postings. Return ONLY a JSON object, no prose:{  "employee_count_estimate": <integer or null>,  "primary_industry": "<one of: SaaS, Fintech, Healthcare, Manufacturing, Other>",  "hiring_for_buying_team": <true | false | null>,  "recent_funding": "<round and date, or null>",  "evidence_url": "<the single URL that best supports the above>"}If a value cannot be confirmed from a credible source, return nullfor that key. Do not guess.

The "return null, do not guess" line is the load-bearing part. An enrichment that admits it does not know is worth more than one that invents a number you then write into your CRM.

Step 4: Verify before you write anything back

Coverage is not the same as usable coverage. The gap between them is bad data.

A found email is a string. A verified email is a string an inbox will accept. Write the unverified version into HubSpot and the first bounces teach reps to distrust the CRM, which is the opposite of what enrichment is for. Put a single gate in front of the write that decides what is true.

Auto-runs four enriched values through the gate. Click any card to see why it wrote, held, or went to review.

Trust mode
On conflict, trust wins in order:rep-verifiedenrichment 90+ confidenceenrichment 70-89form-submitted

Incoming for Jordan Lee

Email: jordan@northwind.com

deliverabilityvalid mailbox

Write
Phone: +1 415 555 0142

line statusdisconnected, number reassigned

Hold
Title: Director of PMM

conflict vs stored 'Senior PMM'job-change detected

Human review
Employees: 480

confidencehigh

Write

Written: 2 · Held: 1 · Review: 1

The gate's job is to write fewer values, not more: a verified, high-confidence value updates the record, while a failed or conflicting one is held so it never overwrites something a rep trusts.

Step 5: Write verified data back to HubSpot without creating duplicates

Writing to HubSpot is a permanent change to your system of record, so use the right action and key.

Clay's HubSpot Create and Update actions push data from Clay to HubSpot, and unlike the read-only Lookups they make real, permanent changes that every user sees. For records you imported, use the Update action keyed on the HubSpot record ID so the write lands on the exact existing object and never spawns a copy. Turn on Ignore blank values so an empty enrichment never overwrites a populated field. Use Create only for net-new objects. And when you need to connect a contact to its company or a deal, the Create association action links the two objects, while Find owner resolves the right HubSpot owner by ID or email so routing and assignment stay intact.

Auto-maps to HubSpot, then shows why matching on the record ID prevents duplicates. Click a row to inspect its write behavior.

Verified emailEmailUpdate if changed
Direct phonePhone numberUpdate if changed
Employee countNumber of employeesUpdate if changed
IndustryIndustryUpdate if changed
Last enrichment dateLast enrichment dateUpdate always
HubSpot record IDRecord IDMatch key (Update action)
Lifecycle notesProtected · excluded from sync
Matched on Record ID: Update writes to the existing object. 0 duplicates created.

Updating on the HubSpot record ID lands every verified value on the exact existing object with zero duplicates, while Create handles net-new objects and Create association links a contact to its company or deal.

Step 6: Put the loop on a schedule so HubSpot stays fresh

A one-time enrichment is a snapshot of a moving target. The schedule is what makes it hold.

Build a self-maintaining loop: an active HubSpot list, or a Clay table filtered on a Last Enrichment Date property, of records older than your chosen window. Clay imports that list on a schedule, runs the same waterfall-and-verify workflow, writes the verified values back with the Update action, and stamps the date so each record drops off until its next cycle.

Scope it by value, because credits follow the work. Every row spends Actions for the orchestration and provider results spend Data Credits, so give active deals and target accounts a tighter window than dormant records, which you can exclude entirely. That scoping is the difference between an enrichment project and an enrichment engine.

When the loop runs, the records reps open stay current instead of sliding back to stale, and the coverage you fixed holds.

80%+

enrichment coverage Vanta reached by combining multiple data sources in Clay

Read the full story

Common failure modes, and how to avoid them

Most HubSpot enrichment loops fail the same few ways. Watch for these.

  • Enriching everything instead of what reps use: Filling every property on every record spends credits on data nobody acts on. Filter the list before import and enrich the fields that change a rep's next move.
  • Writing unverified values straight to HubSpot: A found email that bounces costs more than a blank one, because it trains reps to distrust the CRM. Route every value through the verify gate first, and hold anything that fails or conflicts.
  • Overwriting owned properties: A vendor guess that replaces a rep's lifecycle notes or a corrected title destroys trust. Turn on Ignore blank values and exclude manually maintained properties from the write.
  • Using Create when you mean Update: Pushing net-new Create actions over records that already exist spawns duplicates. For imported records, use the Update action keyed on the HubSpot record ID.
  • Running it once and calling it done: A backfill decays at 3 to 5 percent a month. Without the scheduled refresh, you are back to stale data within two quarters. The loop, not the backfill, is the deliverable.

Build a HubSpot enrichment loop that keeps itself current

Pull records, waterfall-enrich the gaps, verify, and write clean data back to HubSpot on a schedule.

Frequently asked questions

How do I enrich HubSpot records with verified data without overwriting good values?

Route every enriched value through a verification step before it writes, and encode a trust hierarchy so a high-confidence enrichment never clobbers a rep-verified or manually maintained property. In Clay you update only when the new value passes deliverability or confidence checks and outranks what is already there, and you turn on Ignore blank values so an empty result never wipes existing data. Anything that fails or conflicts is held for review.

Which HubSpot action should I use to write enriched data back without duplicates?

For records you imported, use the Update action keyed on the HubSpot record ID, so the write lands on the exact existing object and re-running it refreshes data instead of duplicating it. Use Create only for net-new objects, and Create association to link a contact to its company or deal. Lookup actions are read-only and never change your CRM.

Should I enrich HubSpot records on creation or on a schedule?

Both, for different fields. Enrich on creation for the data a rep needs immediately to qualify and route a new lead. Schedule a recurring refresh for fields that decay, like title, employer, and phone, since roughly 3 to 5 percent of records go stale every month. A Last Enrichment Date property and an active list let records queue themselves for refresh automatically.

How much can multi-provider enrichment improve HubSpot coverage?

A single vendor caps out at its own database coverage. Stacking providers in a waterfall, checking the next source only when the previous one comes up empty, lifts usable coverage well past any one vendor's ceiling while billing each provider only against the records the one before it missed. Hex filled 88 percent of its data gap this way versus its previous single vendor.

Are Clay's HubSpot write actions reversible?

Treat them as permanent. Lookup actions are read-only and safe to run any time, but Create and Update push real changes that every user in your HubSpot org sees. Test on a small set first, keep Ignore blank values on, and exclude owned properties before running a write at volume.