Skip to content
14 days of Pro, free.Sign up with your work email for 100 extra credits.Start free trial

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.

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 fromZoomInfo
  • Case study
  • HackerOneSwitched fromApollo
  • Switched fromClay
  • Case study
  • Sumo LogicSwitched fromClay
  • Switched fromApollo
  • Case study
  • Switched fromZoomInfo
  • Switched fromZoomInfo

What one call returns. Up to 14 fields.

A sample response for one lead lookup, beside every field the record can carry.

Response200 OK · lead
{
  "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"
  }
}
Field reference14 fields
  • 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.

RequestPOST · lead

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())
What a call costsper lead
  • 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.