Salesforce Data Enrichment: How to Enrich Leads, Contacts and Accounts

CleanlistThe short answer

Salesforce data enrichment is the process of filling in and correcting fields on Salesforce Lead, Contact and Account records from external data sources, so a record captured with nothing but a name and a company comes back with a verified work email, a direct dial, a normalized job title, and firmographics such as industry and employee count. Salesforce retired Data.com Clean in 2020 and the core CRM has shipped no general purpose contact enrichment since, so the data comes from a third party that connects to the Salesforce REST API over OAuth, reads the records, looks each one up, and writes the result back to standard fields (Email, Phone, MobilePhone, Title, Industry, NumberOfEmployees) or to custom fields you map. There are four practical delivery paths: a native OAuth sync, a CSV round trip through Data Loader, an API call fired from a Salesforce Flow or an Apex trigger, and a managed package installed from AppExchange. Cleanlist takes the first three, running each record through a 25+ provider waterfall built to a 98% verified work email and 85% direct dial spec on its published 500-lead benchmark, and matching every contact to the right Account, creating one when it is missing.

  1. 01What is Salesforce data enrichment?
  2. 02Why does Salesforce need enrichment at all?
  3. 03Which Salesforce objects can you enrich, and what lands where?
  4. 04How do you enrich Salesforce Leads?
  5. 05How do you enrich Salesforce Contacts and Accounts?
  6. 06What are the four ways to get enriched data into Salesforce?
  7. 07Does Cleanlist have a Salesforce AppExchange app?
  8. 08How does Cleanlist connect to Salesforce, and what does setup involve?
  9. 09How much does it cost to enrich a Salesforce database?
  10. 10How do you avoid overwriting good Salesforce data?
  11. 11How do you keep Salesforce enriched over time instead of once?
  12. 12What can Salesforce enrichment not fix?
  13. 13How do you measure whether Salesforce enrichment worked?
  14. 14When is Cleanlist the wrong tool for Salesforce enrichment?

What is Salesforce data enrichment?

Salesforce data enrichment is appending and correcting field values on Salesforce records using data that did not come from your own forms, reps or imports. The input is whatever identifier the record already carries, usually an email address, a full name plus a company, or a company domain. The output is written back onto the same record: Email, Phone, MobilePhone, Title on the person, and Industry, NumberOfEmployees, Website on the company. Two things separate it from data cleansing, which is the neighbouring job. Cleansing works only with what is already in your org: it deduplicates, standardizes 'VP Sales' and 'Vice President of Sales' into one value, fixes formatting, and deletes records that are beyond recovery. Enrichment reaches outside the org for information Salesforce never had. A Lead that arrived from a webinar registration with a personal Gmail address and a company name cannot be cleansed into a work email and a direct dial, because that information was never in the org to clean. It has to be enriched. Most Salesforce teams need both, in that order: cleanse first so you are not paying to enrich duplicates, then enrich the survivors.

Why does Salesforce need enrichment at all?

Salesforce is a system of record, not a system of reference: it stores what your people and forms put into it, and it does not go and find anything on its own. That produces three predictable gaps in every org. The first is capture gaps. A web form that asks for four fields creates a Lead with four fields, and a rep who wants to call that person has to go and find a phone number by hand. The second is decay. Records are accurate on the day they are created and progressively wrong afterwards, because people change jobs, companies get acquired, domains change, and job titles get renamed, and nothing inside Salesforce notices. The third is the absence of a native fix. Data.com Clean, the enrichment service Salesforce sold as an add-on, was retired in 2020, and the entitlement to it stopped working with it. Data Cloud enrichments are a genuine Salesforce-native path, but they require a Data Cloud license and a configured data stream, which is a different product and a different budget from Sales Cloud. For most Sales Cloud orgs the practical position is that enrichment is a third-party job, and the only real question is which delivery path you use.

Which Salesforce objects can you enrich, and what lands where?

Three standard objects carry almost all enrichable data: Lead, Contact and Account. They behave differently and the difference matters. Lead is a flat object that holds both person and company data on a single row (Email, Phone, MobilePhone, Title, Company, Website, Industry, NumberOfEmployees, AnnualRevenue all sit on the Lead), which makes it the easiest object to enrich and the one most enrichment runs start with. Contact holds person data only and is related to a company through AccountId, so firmographics enriched for a Contact belong on its parent Account rather than on the Contact itself. Account holds the company: Name, Website, Industry, NumberOfEmployees. Cleanlist writes to all three. Its field map for Salesforce is explicit: a verified work email goes to Email on Lead and Contact, direct dial and mobile to Phone and MobilePhone, job title and seniority to Title, company and domain to Account Name and Website, industry to Account Industry, employee count to Account NumberOfEmployees. Two outputs have no standard home and require a custom field you create once, which is the detail most vendor pages leave out: the LinkedIn URL lands in Cleanlist_LinkedIn__c and the ICP score in Cleanlist_ICP_Score__c. Any AI research column you configure can be mapped to any custom field on Lead, Contact or Account.

How do you enrich Salesforce Leads?

Enrich Leads before conversion, because after conversion the record splits and the work doubles. A Lead is a single row, so one enrichment pass fills the person fields and the company fields at the same time. The moment that Lead converts, IsConverted flips to true, the row becomes read-only, and the same data now has to be written to a Contact, an Account and possibly an Opportunity instead. Enriching pre-conversion also improves conversion itself: Salesforce matches a converting Lead to an existing Account by company name, so a Lead whose Company field has been normalized to the company's real name (rather than 'acme' or 'Acme Corp.' as the prospect typed it) is far more likely to attach to the Account you already own instead of creating a duplicate. The practical order is: Lead is created, enrichment runs, the Company and Website fields get standardized, the Email is verified, the Title is normalized into a seniority you can route on, an ICP score is written, assignment rules fire on the enriched values, and only then does a human see it. Routing on unenriched Leads is the single most common cause of good Leads sitting in the wrong queue, because the fields your assignment rules read are empty at the moment the rules run.

How do you enrich Salesforce Contacts and Accounts?

Enrich Contacts and Accounts as a pair, because the data model splits person from company and enrichment output arrives mixed together. A Contact enrichment returns an email, a phone, a title and a set of firmographics, and only the first three belong on the Contact. The firmographics belong on the Account referenced by AccountId, and writing them onto the Contact instead is how orgs end up with industry values that disagree between a company's own Account and the twelve Contacts hanging off it. The harder case is a Contact with no AccountId, or with an AccountId pointing at a duplicate Account. Cleanlist handles this by matching each contact to the right Account and creating one when it is missing, so the hierarchy stays intact rather than accumulating orphans. For Accounts specifically the input is the domain, not the name: company names are ambiguous and shared across jurisdictions, domains are not, so an Account whose Website field is populated enriches reliably and an Account with only a Name field is a coin flip. If your Accounts have no Website values, populating that one field first is the highest-leverage thing you can do before spending anything on enrichment.

What are the four ways to get enriched data into Salesforce?

There are four delivery paths, and they trade setup effort against latency. First, a native OAuth connection to the Salesforce REST API: the vendor authenticates against your org, reads records, enriches, and writes back to fields you map, with no package to install. Setup is minutes and it covers both bulk backfills and ongoing enrichment. Second, a CSV round trip: export Leads or Contacts from a report, enrich the file, and load it back with Data Loader or the Data Import Wizard, keyed on the record Id so the update lands on the right row. It is slower and manual, it requires no connected app and no admin approval, and it is the only path available to teams whose security review has not cleared a third-party connection. Third, the REST API called from Salesforce itself: an Apex trigger or a Flow with an HTTP callout fires on Lead creation, hits the enrichment endpoint, and writes the response back in near real time. This is the path for enrich-on-create. Fourth, a managed package from AppExchange, which some vendors require and which brings its own install, upgrade and package-management overhead. Cleanlist supports the first three. It connects with OAuth 2.0 to production or sandbox orgs, needs no managed package, and exposes POST /sync/crm for programmatic pushes at 0.2 credits per lead.

Does Cleanlist have a Salesforce AppExchange app?

No. Cleanlist is not listed on AppExchange and ships no managed package. It connects with OAuth 2.0 directly against the standard Salesforce REST API, which has two consequences worth knowing before you choose it. The advantage is that there is nothing to install, nothing to upgrade, and no package namespace in your org: an admin authorizes a connected app, picks the objects and fields, and that is the whole setup. Disconnecting stops future writes and leaves every value Cleanlist already wrote in place. The disadvantage is that a security review that specifically requires an AppExchange-listed, Salesforce-reviewed package will not be satisfied by this, and there is no Lightning component, no packaged Flow action and no custom Salesforce UI. Everything is configured on the Cleanlist side or called from your own Apex and Flows. If an AppExchange listing is a hard procurement requirement in your organization, that is a genuine reason to choose a different vendor, and it is better to find that out on this page than three weeks into an evaluation.

How does Cleanlist connect to Salesforce, and what does setup involve?

Setup is a three-step OAuth flow against production or a sandbox. Step one, authorize with OAuth 2.0. Professional, Enterprise and Unlimited editions are supported, and because the integration uses the standard Salesforce API there is no package install and no namespace added to your org. Sandbox orgs are supported on the same flow, so the whole configuration can be proved on a sandbox before it ever touches production data. Step two, pick objects and fields: choose Leads, Contacts or Accounts, and map each enrichment output to the field you actually use, standard or custom. This is where you create the two custom fields for the LinkedIn URL and the ICP score if you want them. Step three, run it: enrich a list or the whole object, and leave ongoing enrichment on so new records are filled as they arrive. The sync is two-way, meaning Cleanlist reads the record, enriches it, and writes back to the same record rather than producing a separate copy you then have to reconcile. Native CRM sync sits on the Pro plan at $229 a month and above, alongside API access. On Free and Starter the available path is the CSV round trip, with CSV export on every plan and CSV upload opening on Starter at $79.

How much does it cost to enrich a Salesforce database?

Cost is driven by which fields you ask for, not by how many Salesforce seats you have. Cleanlist bills credits: a verified work email is 1 credit, a direct dial is 10, both on the same contact are 11, a company enrichment is 1, and pushing a lead to Salesforce with POST /sync/crm is 0.2. Search costs 0 credits, and so does every read. Run that against a real Salesforce backfill. Ten thousand Contacts that need only a verified email is 10,000 credits, which sits inside Scale at $599 a month for 15,000 credits. The same 10,000 records with a direct dial on each becomes 110,000 credits, which is past any published plan allowance, so the phone pass belongs on the subset you will actually dial rather than the whole object. Five thousand Accounts needing firmographics is 5,000 credits at 1 credit each, inside Pro at $229 for 5,000. Annual billing takes 25% off. The structural difference from per-seat enrichment pricing is what happens when you add reps: credits are consumed by records, so a fifteen-person Salesforce org and a three-person one pay the same to enrich the same database. Enrichment is also billed on results, so records the waterfall cannot resolve settle their reserved credits back.

How do you avoid overwriting good Salesforce data?

Decide the overwrite rule per field before the first run, not after it. The four rules that cover almost every case are: fill only when blank (the safe default for anything a human might have entered), always overwrite (correct for machine-maintained fields like a verified email or an ICP score that is meant to be recomputed), write to a shadow custom field and let a human or a Flow promote it (correct for anything that drives routing or compensation), and never write (correct for Owner, lifecycle stage, and any field an integration downstream of Salesforce depends on). Three Salesforce-specific hazards deserve naming. Validation rules fire on API writes exactly as they do on the UI, so a rule requiring a formatted phone will reject the whole record update if the enriched value does not match, and you will see it as a partial sync rather than an error. Restricted picklists reject values that are not in the list, which is the usual reason an enriched Industry silently fails to land. Field-level security on the integration user hides fields that look mapped in the UI but are not writable in practice. The standard mitigation for all three is the sandbox: run the exact mapping there first, read the errors, then repeat on production.

How do you keep Salesforce enriched over time instead of once?

Treat enrichment as three separate jobs on three different clocks, because a one-time backfill starts decaying the day it finishes. Job one is enrich-on-create, which runs the moment a Lead or Contact appears, before routing and before a human sees it. This is the highest-value job, because it is the only one that changes what a rep does today, and it is what an Apex trigger or a Flow HTTP callout exists for. Job two is the scheduled refresh of the active database, run quarterly against the records that are actually in play: open Opportunities, Contacts on target Accounts, anything a sequence will touch this quarter. Job three is the backfill, run once against the historical records worth reviving, and worth being ruthless about scoping, since enriching a hundred thousand Leads nobody will ever call is the most common way to burn a data budget. On Cleanlist, jobs two and three run as list enrichments against the connected org, and Playbooks, the visual automation engine on the Scale plan at $599, chains enrichment, verification, ICP scoring and CRM sync into one workflow you can run on a schedule.

What can Salesforce enrichment not fix?

Enrichment fills fields, and a large share of Salesforce data problems are not empty fields. It will not deduplicate your org: merging a Contact that exists three times is Salesforce Duplicate Management, matching rules and duplicate rules, and it should run before enrichment rather than after, since enriching three copies of one person costs three times as much and produces three records that now disagree in different ways. It will not fix ownership, territory assignment or stage hygiene, which are process problems wearing a data costume. It will not give you intent: Cleanlist has no intent feed and no way to tell you which Accounts are in-market this week, and any vendor claiming otherwise is selling a panel you should evaluate on its own terms. It will not give you technographics as a filterable field: there is no technology dataset behind Cleanlist and no tech-stack filter, so you cannot ask for every Account running a given product. What you can do is run an AI research column that reads the open web for one Account at a time and writes back what it finds, at 1 credit per row, which answers 'does this company appear to use X' but cannot build the list of every company that does. Finally, it will not repair records with no usable identifier: a Lead with a first name and nothing else has nothing to match on.

How do you measure whether Salesforce enrichment worked?

Measure four numbers, all of which you can build as Salesforce reports on your own data. Match rate: of the records you submitted, what percentage came back with anything at all. This is the number vendors quote least often and the one that determines your real cost, because a $0.20 lookup that returns nothing 40% of the time costs $0.33 per usable record. Fill rate per field: what percentage of records now have a non-null Email, MobilePhone, Title, Industry, NumberOfEmployees. Track it per field, since aggregate completeness hides the fact that emails filled and phones did not. Downstream accuracy: bounce rate on the enriched emails and connect rate on the enriched phones, both of which come from your sending and dialing tools rather than from the enrichment vendor, and both of which are the only honest check on a supplier's accuracy claim. Pipeline effect: Leads worked per rep per day, and conversion rate on enriched versus unenriched cohorts, which requires you to keep a control group rather than enriching everything at once. Run the first pass on a few hundred records, measure all four, then decide the size of the second pass.

When is Cleanlist the wrong tool for Salesforce enrichment?

Cleanlist is the wrong choice in four situations, and they are worth stating plainly. If an AppExchange-listed managed package is a procurement requirement, Cleanlist has no listing and no package. If your evaluation is driven by intent data or technographic filtering, Cleanlist owns neither and is the layer that turns a cohort into verified contacts after some other product has identified it. If you need event-driven architecture, the current API is poll-based with no webhooks, so a Flow that fires an enrichment needs a second scheduled step to collect the result rather than a callback. And if you are on Free or Starter, native Salesforce sync is not open to you: sync and the REST API begin on Pro at $229, and below that the honest answer is a CSV round trip through Data Loader. Where Cleanlist fits well is the opposite shape: a Sales Cloud org with real coverage gaps on email and phone, a team that has outgrown per-seat data pricing, and an admin who would rather map fields than manage a package. Every new workspace starts on a 14-day Scale trial with 250 credits and 3 seats and no card, which is enough to enrich a couple of hundred Leads in a sandbox and check the fill rate against your own records before you commit to anything.

The follow-up questions.

Does Salesforce have built-in data enrichment?

Not in the core CRM. Salesforce retired Data.com Clean in 2020 and Sales Cloud has shipped no general purpose contact enrichment since, so Leads, Contacts and Accounts hold whatever your forms, reps and imports put into them. Data Cloud enrichments are a genuine Salesforce-native option, but they require a Data Cloud license and configured data streams, which is a separate product from Sales Cloud. For most orgs, enrichment means a third-party tool connected over OAuth, a CSV round trip through Data Loader, or an API call from a Flow or an Apex trigger.

Can I enrich Salesforce Leads automatically the moment they are created?

Yes, through an Apex trigger or a Flow with an HTTP callout that fires on Lead creation and calls an enrichment endpoint, so the record is filled before assignment rules run and before a rep sees it. With Cleanlist this uses REST API v2, which requires the Pro plan at $229 a month or above. One thing to design around: the API is poll-based with no webhooks, so an asynchronous enrichment returns a workflow id that a second scheduled step has to poll, rather than calling your org back. Company enrichment, search and CRM sync answer in the same request and need no polling.

Will enrichment create duplicate records in Salesforce?

Enrichment that writes back to an existing record by its Salesforce Id does not create duplicates, because it updates a row rather than inserting one. Duplicates come from two other places. The first is a CSV load run without the record Id as the key, which inserts new rows instead of updating existing ones, so always key a Data Loader update on Id. The second is Account creation during contact matching: Cleanlist matches each contact to the right Account and creates one only when it finds none, which keeps the hierarchy clean but will produce a second Account if your existing one is spelled differently and has no Website value to match on. Run Salesforce Duplicate Management before enriching, not after.

Which Salesforce editions does Cleanlist support, and does it work with sandboxes?

Professional, Enterprise and Unlimited, and yes, sandbox orgs connect on the same OAuth flow as production. Because the integration uses the standard Salesforce API rather than a managed package, there is nothing to install in either org. Connecting a sandbox first is the recommended sequence: it is where you find out that a validation rule rejects an enriched phone format, or that a restricted Industry picklist will not accept the value being written, without those failures landing on live records.

Do I need a Salesforce admin to set this up?

You need an admin once, for two things: authorizing the connected app, and creating any custom fields the mapping needs. Cleanlist's Salesforce field map uses standard fields for email, phone, title, industry and employee count, and requires custom fields only for the LinkedIn URL (Cleanlist_LinkedIn__c) and the ICP score (Cleanlist_ICP_Score__c). After that, changing which fields get written is configuration on the Cleanlist side. The CSV path needs no admin involvement at all beyond export and import permissions, which is why teams blocked on a security review usually start there.

How many credits does it take to enrich 10,000 Salesforce contacts?

10,000 credits if you want a verified work email on each, since an email is 1 credit. That sits inside the Scale plan at $599 a month for 15,000 credits. Adding a direct dial takes each record to 11 credits, so the same file becomes 110,000 credits, which is past any published plan allowance and is the reason to scope the phone pass to the accounts you will actually dial. Firmographics on Accounts are 1 credit each. Cleanlist bills on results, so records the waterfall cannot resolve settle their reserved credits back, and real spend usually lands under the worst case.

Can Cleanlist enrich Salesforce custom objects?

Not through the standard integration. It reads and writes Leads, Contacts and Accounts, and within those three objects it can write to any standard or custom field you map. If your data model puts the enrichable records on a custom object, the workable paths are the REST API, where you control what gets written and where, or a CSV round trip keyed on that object's Id. Custom-object work through the native connector is not part of the shipped integration, so do not plan an implementation around it.

What happens to enriched data if I disconnect Cleanlist from Salesforce?

Everything Cleanlist wrote stays in your org. Disconnecting revokes the OAuth authorization and stops future writes, and it removes nothing that has already landed on a Lead, Contact or Account. Because there is no managed package, there is also no package to uninstall and no namespace left behind. This is worth confirming with any enrichment vendor before you sign, since the answer varies and some licensing models treat enriched values as data you were renting.

Gain full access for 14 days.

Cleanlist runs one lookup across 25+ providers and stops at the first source that returns. Search costs nothing on every plan, a verified work email is 1 credit, a direct dial is 10, and a miss costs nothing at all.

250 credits, 3 seats, 14 days. No card required. Every feature except the public API and MCP. The Free plan stays at 30 credits a month after that.