Updated October 8, 2026
Which solutions fill in missing email addresses and phone numbers in CRMs?
Three kinds of tool fill missing emails and phone numbers in a CRM: enrichment built into the CRM, data vendors' CRM apps, and agents that look each record up across several providers and write the result back. For a missing email, pick a tool that starts from the name, the company and the LinkedIn URL, because the email is the field you don't have.
| Kind of tool | What it fills | Starts from | Examples |
|---|---|---|---|
| Built into the CRM | Company and role fields such as job title, industry and company size | What the record already has, such as a work email or a domain | HubSpot data enrichment, Salesforce Lightning Data |
| A data vendor's CRM app | Contact and company fields from that vendor's data | The CRM record | ZoomInfo, Apollo |
| An agent on a schedule | Work emails and phone numbers through a waterfall of 25+ providers, written to the same record | Name, company and LinkedIn URL | Cleanlist AI |
Phone numbers work the same way and cost more: 10 credits for each one found, against 1 for an email. Fill phone numbers for the contacts your reps will call, and emails for everyone you will write to.
What tools can automatically fill missing contact information in Salesforce?
In Salesforce, missing contact information gets filled automatically in three ways: Lightning Data packages an admin licenses from third-party providers, a data vendor's Salesforce app that enriches records as they are created, or an agent that reads the contacts with an empty email each night and writes what it finds to the same record.
- Lightning Data: third-party data packages licensed directly from providers. An admin's data integration rule compares your accounts, contacts and leads with the provider's data and, depending on how the rule is set up, updates them as it changes. Available on Professional, Enterprise, Performance and Unlimited Editions.
- A data vendor's app: ZoomInfo's Salesforce integration enriches records from ZoomInfo's data as they are created.
- An agent: Cleanlist AI reads Salesforce contacts or leads with no email every night, looks each one up through a waterfall of providers and fills the email field on the same record.
The agent writes through your org's field mapping and write rules. Leads need a Lead mapping in your Cleanlist CRM settings, and contacts a rep owns are skipped unless you allow updating owned records.
The nightly play, step by step
Every night the agent reads the contacts whose email is empty, looks each one up by the LinkedIn URL, name and company on the record, and writes any email it finds to the same contact. The first nights work through the backlog of contacts already missing one. After that, each night picks up what the day added.
- Trigger: A record matches your conditions, on contacts where Email is unknown, daily at the time you pick.
- Enrich: a work email only, through the waterfall.
- CRM Action: Sync writes the email into the same contact.
- Misses: nothing is written or charged, and with the recheck on, a miss comes back after 30 days.
A retry resumes at the step that failed and never charges an earlier step again, so a CRM outage during the sync doesn't pay for the same email twice.
Why blank emails pile up in a CRM
Contacts arrive without emails from a handful of places: list imports that carry a name and company only, event lists, contacts a rep creates after a call or a meeting, and tools that create contacts from calendars or call recordings. Older records lose their usable email too, as people move companies and their old address starts to bounce.
- Imports: event lists, purchased lists and old spreadsheets often carry a name and company only.
- Manual entry: a rep logs a call and creates the contact before anyone has the address.
- Connected tools: contacts created from a meeting or a call recording may arrive with a name only.
- Clean-up: a bounced address gets cleared, and the contact is left blank.
Each blank is a contact your sequences skip and your reps can't email. A nightly fill keeps the gap from growing between cleanups.
Can I upload a list of prospects and automatically find their missing contact details?
Yes. Upload the list as a CSV to a Cleanlist list and run Enrich on it: each row goes through the waterfall, and you pay 1 credit for each email found and 10 for each phone number, nothing for a miss. To keep doing it as rows arrive, point an agent at the list with the Leads added to a list trigger.
- Name: first and last name in their own columns.
- Company: the company name, or better, its domain.
- LinkedIn URL: finds far more emails than a name and company alone.
A one-off run suits a trade show list or an old export. The nightly agent suits the CRM itself, where new blanks appear every day. For the file side of the job, see how to find emails for a list of names.
Email append and an agent that fills gaps every night
Email append is the one-time service: send a file of records that have no email, get back the addresses a provider could match. The agent does the same match on a schedule inside the CRM. It finds the contacts with no email itself, writes each address to the record and keeps going as new blanks appear.
| Question | Email append | The nightly agent |
|---|---|---|
| Input | A file you export | Contacts in Salesforce or HubSpot with an empty email field |
| Output | A file to import back | The email written to the same contact |
| Cadence | Once, each time you send a file | Every night |
| Misses | Depends on the service | Free, and rechecked after 30 days if you choose |
Data appending is the wider version of the same match, for phone numbers, job titles and company fields as well as emails.
In Cleanlist AI the agent is email append on a schedule: 1 credit per email found, written to the record that was missing it.
Catch-all domains, and what verified means here
Every email a provider returns carries a status: verified, likely valid, risky, invalid or unknown. The agent writes only a deliverable email, meaning verified or likely valid, and charges 1 credit for it. A catch-all domain accepts mail for any address, so no check can confirm the mailbox exists; those results come back risky, and a risky, invalid or unknown result is neither written nor charged.
| Status | What it means | Written and charged |
|---|---|---|
| Verified | Confirmed deliverable | Yes, 1 credit |
| Likely valid | Probably deliverable, short of a full confirmation | Yes, 1 credit |
| Risky | May work: catch-all domains, role addresses such as info@ and disposable addresses | No |
| Invalid | Will bounce | No |
| Unknown | No signal either way | No |
To write only emails that pass a fresh check, add a Validate step after Enrich and a Branch that keeps the valid ones. Validate costs 0.5 credits a check and rates each email valid, invalid, catch-all, risky or unknown.
What it costs, and which plan runs it
Each email found costs 1 credit, charged only when it is deliverable. A miss costs nothing and writes nothing, and a recheck after 30 days is charged only if it finds an email. The trigger and the CRM write are free.
The first nights carry the backlog. A CRM with 2,000 contacts missing an email spends at most 2,000 credits clearing it, and less in practice, because misses are free. Clu sizes the records and credit limits from the test's count.
Running the agent needs Pro (from $89 a seat a month, $67 billed annually), which includes 5 active agents across the workspace, or Enterprise for unlimited agents. The 14-day Pro trial lets you build the agent and review its play; testing it and turning it on need a paid plan.
