A CRM is not a database you fill once. It records a moving world, and the world keeps moving after you hit save. People change jobs, companies get acquired, titles get reorganized, emails go dead. The record you entered as accurate on Monday is a little wrong by Friday and noticeably wrong by next quarter. Nobody touched it. The facts underneath it moved. CRM enrichment is not a one-time import; it is a system that runs continuously, because the moment it stops, the data starts decaying again. That system is a loop: fill the gaps, verify, dedupe, standardize, then catch the changes that come later. This is how to build it.
What CRM enrichment actually is
CRM enrichment is the ongoing work of keeping every record in your CRM complete, accurate, and current. Completeness means the fields a rep needs are filled: title and seniority, company size and industry, verified email and phone, the signals that decide timing. Accuracy means those values are correct today, not whenever they were last entered. Currency means the record updates when the underlying fact changes, instead of quietly rotting in place.
That is broader than the one-time act of appending data to a thin record, which is data enrichment in the general sense. Data enrichment is the concept: turn a name and an email into a profile you can act on. CRM enrichment is that concept applied to a living system of record that decays, which is why it has to run as a loop rather than a single pass. You enrich a record, and then you keep enriching it, because the job is not "make this record complete once" but "keep this record true."
Why CRM data decays the moment it's entered
A clean CRM is not a state you reach; it is a state you maintain. A B2B database loses roughly 3 to 5 percent of its accuracy every month through ordinary churn: contacts change roles, companies rebrand or get acquired, mailboxes are deprovisioned. Run the math forward and a database left alone for a year is wrong about a third of the time. Nobody made a mistake. The records were correct when entered. The facts underneath them moved.
Watch an untouched database rot, record by record, over 12 months (auto-plays; replay to repeat)
All records accurate — nobody has touched the database yet.
B2B contact data churns roughly 3 to 5 percent a month through job changes, acquisitions, and deprovisioned mailboxes.
A CRM rots on its own at a few percent a month, so a database left untouched for a year is wrong about one record in three.
The damage is not abstract. Every wrong record is a rep emailing an address that bounces, calling a number that rings a stranger, or pitching a contact who left six months ago. Worse, the rep does not know which third of the database is wrong, so they distrust all of it. They start double-checking everything by hand, which is the exact manual work the CRM was supposed to remove. Decay does not just cost you the bad records. It costs you confidence in the good ones.
The CRM enrichment loop, end to end
CRM enrichment is five jobs that run as a loop, not a checklist you complete once. Fill the gaps, verify, dedupe, standardize, keep fresh, then back to the start. Run them once and you have a clean snapshot that begins decaying immediately. Run them continuously and the database holds.
Step one record through the loop, thin to current
Jordan Lee
Incomplete / stalej.lee@acmeco.com
A thin, stale record: a name and an email, every other field empty. Step the loop to make it rep-ready.
A CRM record stays rep-ready only because five jobs run on it in a loop: enrich fills the gaps, verify confirms them, dedupe consolidates, standardize makes values agree, and freshness catches the changes that come later, then it repeats.
Each step hands off to the next, and the order is not arbitrary. You enrich first because there is nothing to verify, dedupe, or standardize until the fields are populated. You verify before you trust an email or phone enough to send to it. You dedupe and standardize so the record collapses to one clean version instead of three messy ones. And you keep fresh because the four steps before it only describe the record as it is today, and today does not last. The loop is what turns a snapshot into a system.
Step one: fill the gaps with enrichment
Most CRM records are not wrong; they are empty. A lead arrives from a form, an import, or a rep typing in a name, and it carries the bare minimum: maybe a name, maybe an email, rarely a title or a company size. Before enrichment, every downstream decision on that record is a guess. Enrichment appends the verified attributes that turn the guess into a fact, pulled from external sources and matched back to the record you already have.
The one move that matters here is not picking a better provider. It is not relying on a single one. No single data source is both accurate and complete, so any one of them leaves part of your database empty or wrong. The fix is to chain providers: run a record through several in a set order, cheapest first, and take the first confident answer. Coverage climbs toward the reach of your widest source while accuracy stays near your best one. That mechanic is waterfall enrichment, and it is the engine underneath the enrich stage. OpenAI moved its CRM enrichment onto a waterfall and roughly doubled how much of its inbound it could enrich.
OpenAI more than doubled its enrichment coverage, from the low 40s to the high 80s, after moving from a single provider to Clay's waterfall enrichment.
Read the full storyThe detail that earns the coverage is the stacking, not any one vendor. A budget source clears the easy records for pennies; whatever it misses falls through to a mid-tier source, then to a premium one, and the chain stops the instant a record comes back confident. You pay premium prices only on the hard records, and the empty fields that a single provider would have left blank get filled by the next one in line.
Step two: verify before you trust the data
An enriched field is a claim until you verify it. Enrichment hands you an email and a phone number; verification tells you whether they actually reach a human. Skip it and a campaign goes out to addresses that bounce, and inbox providers quietly downgrade the sender's reputation for everything that follows.
Clay does not return a single pass-or-fail flag. It returns a status for each email: Valid, Invalid, Catch-all, Unknown, or Role-based. Valid is the only one safe to send to without a second thought. Invalid gets dropped. Catch-all and Unknown route to a human or a slower secondary check, and Role-based (info@, sales@) gets handled as a team inbox, not a person. Verification is its own discipline, with a catch-all problem that defeats naive checks and provider benchmarks worth knowing before you pick one. The full treatment is in the guide on how to verify email addresses. Inside the loop, the rule is simpler: nothing an enrichment step writes is treated as send-ready until its status clears.
Step three and four: dedupe and standardize so records agree
A database that has not been deduplicated and standardized is not one CRM; it is several overlapping ones. These two jobs are different but they fail the same way: the system sees variants of one truth as separate facts. Dedupe collapses the records that point to the same person or account. Standardize collapses the values that mean the same thing.
The duplicates that hurt do not look like duplicates. Your CRM's built-in tool catches the same email entered twice; it does not catch j.smith@acme.com and john.smith@acme.com in two records, or the same buyer who filled out a form as "Jon" once and "Jonathan" later. Those near-matches split a rep's history, double your account count, and route one prospect to two SDRs. Catching them takes fuzzy matching and a safe field-level merge, which is the subject of the guide on how to find and remove duplicate contacts.
Standardization is the quieter half. "Acme Inc," "Acme Corp," and "ACME" are one company to a rep and three accounts to your CRM. "vp sales," "VP of Sales," and "V.P., Sales" are one title and three picklist values. Until those collapse to one canonical form, you cannot dedupe reliably, score consistently, or report a number you trust, because the database is arguing with itself. Standardizing formats and collapsing variants to a single value is covered in the guide on how to clean and standardize CRM data. Run dedupe and standardize together: standardizing the values is often what makes the duplicates visible in the first place.
Step five: keep records fresh as the world changes
The first four steps describe your records as they are today; this one keeps that description true tomorrow. Enrich, verify, dedupe, and standardize produce a clean snapshot. Without a freshness stage, that snapshot is the high-water mark, and the database decays from it at a few percent a month. Keeping fresh closes the loop by watching for the changes that make a record wrong after you wrote it.
The change that matters most is the job change. When a contact leaves the company on their record, that record is now doubly broken: the email starts bouncing, and the person you wanted is no longer where you think they are. A freshness stage catches that on a schedule. A Scheduled column re-runs your enrichment columns on a Day, Week, or Month cadence, so a job change or a dead email surfaces on the next cycle instead of at the next manual cleanup. The new value only overwrites the old one through a conditional run that fires when the value actually changed and cleared verification, so a stale or uncertain result never clobbers a good field. The full build, including the cadence and the verify-before-overwrite logic that stops a monitoring loop from corrupting good data, is in the guide on how to keep your CRM data fresh automatically.
This is also where the loop visibly closes. A job change does not just update one record; it spawns a new thin record (the same person at a new company) that re-enters the enrich step. The system that keeps a record fresh is the same system that enriched it in the first place. There is no separate maintenance project, just the loop continuing to run.
How CRM enrichment runs as one continuous system
The reason to build CRM enrichment as a loop instead of five separate cleanups is that the cleanups undo each other if they do not run together. Enrich a stale record and you have populated wrong data faster. Dedupe before you standardize and you miss the near-matches that standardization would have exposed. Verify once and never again, and your verified list rots at the same rate as everything else. The stages are only worth what the next stage protects, which is why they belong in one system rather than five tickets.
The single-record loop is the unit; the database is the scoreboard. The number that decides whether enrichment is working is not how complete one record is, it is what share of the whole database a rep can act on without checking it by hand.
Watch the enrichment line run — rep-ready holds because the line never stops
New records keep arriving and clean ones keep going stale, so the only thing that holds a database rep-ready is a line that never stops running.
In practice that system is built from two scheduling primitives reading from and writing back to your system of record. A Scheduled source refreshes a Salesforce or HubSpot import on a Day, Week, or Month cadence (Hour is Enterprise-only). An "Update existing rows" toggle lets the re-run carry new fields into rows you already pulled. A Scheduled column re-runs the enrichment columns on the same record so the appended data stays current. Salesforce or HubSpot stays the source of truth; the loop runs alongside it, pulling records that are incomplete or stale and writing clean values back. New records hit the loop on the way in, so they are complete before a rep ever opens them. Existing records cycle through the schedule, so decay gets caught instead of compounding. The setup specific to one CRM, including field mapping and the write-back logic, is in the guide on how to enrich Salesforce records.
The write-back itself is one action, not a guess. Clay keys the Update record action on the Salesforce Record ID, so a refreshed value lands on the exact record it came from and never spawns a second one; Clay prevents duplicate creation by default. Every row that runs the loop spends two meters: an Action for the orchestration (the enrichment, the verify, the sync) and Data Credits for the provider results it buys. Formatters that only reshape a value cost Actions but no Data Credits, which is why standardizing a whole column is cheap to run on a schedule.
“Clay has become the orchestration layer for everything GTM. Salesforce for record-keeping, Snowflake for product data, and Clay for turning it all into automated action.”
That division is the point. Your CRM is built to store the current state of a record. It was never built to figure out what the current state should be, and it has no idea when the underlying fact changed. The enrichment loop is the layer that does, running continuously above the system of record and keeping it honest.
Verification inside the loop uses Clay's AI to check a fact in plain language before trusting it. A typical employment check reads like this:
Given {{contact_name}}, who our CRM lists as {{title}} at {{company}}, confirm from current public professional sources whether this person still works at {{company}}. Return one of: "confirmed_current", "left_company", or "unclear". If "left_company", return their current company and title if findable. Do not guess; return "unclear" when sources conflict or are older than 6 months.Records that come back left_company route to re-enrichment with the contact's new company and title; records that come back unclear get flagged for a human rather than overwritten. The model does the reading; the loop decides what to do with the answer.
Where to start building the loop
You do not build all five steps at once; you start where your database is bleeding the most. If reps do not trust the data, start with verify and standardize, because trust comes from values being correct and consistent, not from there being more of them. If reps are working off half-empty records, start with enrich. If your account counts and pipeline reports never reconcile, start with dedupe and standardize. If your data was clean six months ago and is not now, you skipped the freshness stage, and that is where to go.
Pick the symptom that fits your CRM to find your starting step
Which symptom fits your CRM right now?
Wherever you start, put it on a Scheduled source or Scheduled column, not a one-time pass.
You do not build all five steps at once; the symptom your database is showing tells you which step to automate first.
Whichever step you start with, put it on a Scheduled source or column from day one rather than a manual cleanup you promise to repeat. A one-time pass feels like progress and decays back to baseline within the quarter. The loop is the deliverable. Pick the stage that hurts most, set its cadence, then add the next stage to the same system until the full loop runs on its own.