Enrich Salesforce leads via API
Enrich Salesforce leads directly via API or managed sync: fill missing emails, phones, titles, and firmographics without a Data.com subscription or ZoomInfo annual contract. Credit-based pricing, with credits pooled across seats.
REST · JSON in, JSON out13 fieldsPublic API from Pro
An example call: POST to the salesforce_lead endpoint with a work email, the waterfall tries providers in cost order, and the response returns 13 fields.
- 1 creditA verified work email, however many providers it took to find it.
- 11 creditsEmail and phone number together, on the same call.
- 25+ providersQueried in cost order. The waterfall stops at the first deliverable result.
- 98% / 85%Verified work emails and phone numbers found on our 500-lead benchmark.
10,000+ users, from founders to full sales teams
- Switched from
ZoomInfo - Case study
HackerOneSwitched from
Apollo- Switched from
Clay - Case study
Sumo LogicSwitched from
Clay- Switched from
Apollo - Case study
- Switched from
ZoomInfo - Switched from
ZoomInfo
What one call returns. Up to 13 fields.
A sample response for one salesforce lead lookup, beside every field the record can carry.
{
"id": "ev_sf3k9p7",
"status": "completed",
"salesforce_lead": {
"sf_lead_id": "00Q5e000009XyZaEAK",
"email": "david.kim@enterprise.com",
"email_status": "valid",
"title": "Senior Director of Sales Operations",
"seniority": "director",
"phone": "+1-212-555-0189",
"mobile": "+1-917-555-0234",
"company": "Enterprise Solutions Inc.",
"industry": "Information Technology",
"employee_count": "501-1000",
"revenue": "$100M-$250M",
"icp_score": 91,
"enrichment_delta": {
"fields_added": [
"phone",
"mobile",
"seniority",
"revenue"
],
"fields_updated": [
"title",
"employee_count"
]
}
},
"meta": {
"credits_used": 11,
"providers_queried": 25,
"providers_matched": 9,
"confidence": 0.95,
"enriched_at": "2026-04-15T08:22:17Z"
}
}
sf_lead_idstringSalesforce Lead record ID. Used to match enrichment results back to the correct record.emailstringVerified work email. If the existing Salesforce email is invalid, a new verified email is returned.email_statusenumVerification result for the email: valid, invalid, risky, catch-all, disposable, role-based.titlestringCurrent job title, normalized. Updates the Salesforce Title field if changed.seniorityenumSeniority level derived from title normalization.phonestringPhone number for the lead.mobilestringMobile phone number.companystringCurrent company name, cross-verified against Salesforce Company field.industrystringIndustry classification, mapped to Salesforce picklist values when possible.employee_countstringCompany size range.revenuestringEstimated annual revenue range.icp_scoreintegerICP fit score (0-100) based on your configured criteria.enrichment_deltaobjectShows which fields were added (previously empty) and which were updated (value changed). Useful for audit trails.
Call it from curl, Node or Python. Pay for what comes back.
It's one POST request. Credits come out of one wallet the whole team shares, and a call that finds nothing costs nothing.
curl
curl -X POST https://api.cleanlist.ai/v1/enrich/salesforce_lead \
-H "Authorization: Bearer $CLEANLIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "jane@acme.com"}'Node.js
const response = await fetch("https://api.cleanlist.ai/v1/enrich/salesforce_lead", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CLEANLIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ email: "jane@acme.com" }),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());Python
import os
import requests
response = requests.post(
"https://api.cleanlist.ai/v1/enrich/salesforce_lead",
headers={"Authorization": f"Bearer {os.environ['CLEANLIST_API_KEY']}"},
json={"email": "jane@acme.com"},
)
response.raise_for_status()
print(response.json())- SearchFree, unlimited
- Verified work email1 credit
- Phone number10 credits
- Email and phone number11 credits
- Validation0.5 credits
- AI qualification5 credits
- A call that finds nothing0
What teams do with it.
New lead enrichment trigger
Set up a Salesforce flow to call Cleanlist when a new lead is created. Automatically fill title, phone, and firmographics before routing to the assigned rep, so they never work an incomplete record.
Replace Data.com / ZoomInfo
Switch from annual contract enrichment providers to Cleanlist's credit-based model. Credits are charged per enrichment and pooled across every seat. No annual lock-in on Starter or Pro. Most teams save 40-60% on enrichment costs.
Pre-campaign list enrichment
Before launching a Salesforce campaign, run the target leads through enrichment. Verify emails, fill phone numbers, and score against ICP. Only include leads with valid emails and high ICP scores in the campaign.
Stale lead re-enrichment
Run leads that have been untouched for 6+ months through re-enrichment. Catch job changes, update titles, and find new email addresses for contacts who moved companies.
The questions that come up first.
Does Cleanlist write enrichment data back to Salesforce automatically?
Yes, with the managed sync option. Connect your Salesforce org through the Cleanlist dashboard, configure field mapping, and enriched data writes directly to your Lead records. You control which fields get updated and can set rules to prevent overwriting existing data. The API option returns JSON for teams that prefer to handle the write-back themselves.
How does Cleanlist compare to Salesforce Data.com for lead enrichment?
Data.com (now retired and replaced by limited Salesforce data features) was a single-source database. Cleanlist queries 25+ independent providers in sequence, so coverage is substantially higher, especially for phone numbers and mid-market companies. Pricing is credit-based (no annual contract) and typically 40-60% cheaper than what teams were paying for Data.com or ZoomInfo Salesforce integrations.
What Salesforce editions are supported?
Cleanlist works with all Salesforce editions that support REST API access: Professional (with API add-on), Enterprise, Unlimited, and Developer editions. The managed sync uses OAuth 2.0 for authentication and respects Salesforce field-level security and sharing rules.
Can I enrich Salesforce Contacts and Accounts too?
Yes. Cleanlist has separate endpoints for Salesforce Leads, Contacts, and Accounts. Each endpoint is optimized for the specific object type: Lead enrichment focuses on qualification, Contact enrichment on data accuracy, and Account enrichment on firmographics and buying committee mapping.
Enrich Salesforce leads in production.
The public API starts on Pro, and a call that returns nothing is never charged.
14 days of Pro, free.
