Enrich leads via API
Send a raw lead (just an email or name + company) and get back a fully scored ICP record with verified contact data, firmographics, intent signals, and a 0-100 fit score. One API call replaces the manual research loop.
REST · JSON in, JSON out14 fieldsPublic API from Pro
An example call: POST to the lead endpoint with a work email, the waterfall tries providers in cost order, and the response returns 14 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 14 fields.
A sample response for one lead lookup, beside every field the record can carry.
{
"id": "ev_l4m8np2",
"status": "completed",
"lead": {
"email": "mike.chen@techflow.io",
"email_status": "valid",
"first_name": "Mike",
"last_name": "Chen",
"title": "Director of Revenue Operations",
"seniority": "director",
"company_name": "TechFlow",
"company_domain": "techflow.io",
"company_size": "51-200",
"company_industry": "SaaS",
"company_revenue": "$10M-$25M",
"icp_score": 87,
"icp_signals": [
"target_seniority",
"target_department",
"company_size_fit",
"industry_match"
],
"intent_signals": [
"hiring_sales_ops",
"evaluated_competitor"
]
},
"meta": {
"credits_used": 11,
"providers_queried": 25,
"providers_matched": 6,
"confidence": 0.92,
"enriched_at": "2026-04-15T09:18:44Z"
}
}
emailstringVerified work email address with SMTP-level validation.email_statusenumVerification result: valid, invalid, risky, catch-all, disposable, role-based, unknown.first_namestringLead's first name.last_namestringLead's last name.titlestringNormalized job title.seniorityenumSeniority level classification.company_namestringCurrent employer.company_domainstringCompany primary domain.company_sizestringEmployee count range.company_industrystringIndustry classification.company_revenuestringEstimated annual revenue.icp_scoreinteger0-100 fit score against your configured ICP. 80+ = high priority, 50-79 = nurture, below 50 = deprioritize.icp_signalsstring[]Array of specific ICP match signals explaining the score breakdown.intent_signalsstring[]Active buying intent signals detected: hiring patterns, technology evaluations, competitor engagement.
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/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/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/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.
Inbound lead qualification
Enrich and score every form submission in real time. Route high-ICP leads to reps instantly, send low-fit leads to nurture sequences automatically.
List purchase validation
Run purchased lead lists through enrichment before importing to CRM. Remove invalids, fill missing fields, and score against ICP, so only qualified leads enter your pipeline.
SDR territory planning
Enrich a raw list of target companies into scored lead records. Sort by ICP score to prioritize the highest-fit accounts for each rep's territory.
Automated lead routing
Use icp_score, seniority, and company_size in your routing rules to assign leads to the right rep, sequence, or SLA tier without manual triage.
The questions that come up first.
How does ICP scoring work in the lead enrichment endpoint?
ICP scoring compares enriched lead attributes (title, seniority, company size, industry, revenue, tech stack) against your configured Ideal Customer Profile. You define your ICP criteria in the Cleanlist dashboard, and every enriched lead receives a 0-100 score with a breakdown of which signals matched. Scores above 80 indicate a strong fit.
What is the difference between lead enrichment and contact enrichment?
Contact enrichment returns verified contact data (email, phone, title, company). Lead enrichment returns the same contact data plus ICP scoring and intent signals. Use contact enrichment when you need data accuracy. Use lead enrichment when you also need qualification and prioritization.
Can I enrich leads with just a company name and no email?
Yes. The lead enrichment endpoint accepts email, name + company, domain, or LinkedIn URL as input. When you provide a company name without an email, Cleanlist identifies the best-fit contacts at that company based on your ICP criteria and returns enriched records for them.
How fresh are the intent signals?
Intent signals are refreshed weekly from hiring data, technology adoption signals, and web activity patterns. The recency of each signal is included in the response so you can weight recent signals more heavily in your routing logic.
Enrich leads in production.
The public API starts on Pro, and a call that returns nothing is never charged.
14 days of Pro, free.
