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

25+ data providers behind one API key.

The Cleanlist AI API searches, saves and enriches B2B people and companies, over REST from your code or MCP from Claude.

A side-by-side demo of the same job done two ways. In Claude, over the Cleanlist AI MCP server, one request runs search_people, add_leads_to_list, estimate_cost and enrich_list. In a terminal, over the REST API, the same run is five calls: search people, add the rows to a list, estimate the cost, start a bulk enrichment and poll its status. The search asks for VPs or Heads of Sales at 51 to 500 person software companies in the US. 7 people found and saved to Series B sales leaders, all 7 with a verified work email and 5 with a phone number, quoted at 77 credits and charged 57.

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

Every endpoint, priced in credits.

Search, reads, polls, exports and saving to a list cost 0. Only enrichment and smart agents spend credits.

Every route on api.cleanlist.ai/api/v2 and what it costs to call
Method and pathWhat comes backCredits
Search
POST/people/findMatching people, plus a task_id0
POST/people/find-at-companiesPeople at companies that match your filters0
POST/people/find/compileYour criteria compiled, without running the search0
GET/people/find/filtersThe live filter allowlist and its enums0
Lead lists
POST/lead-listsA new list0
POST/lead-lists/{id}/leadsRows added, duplicates skipped0
POST/lead-lists/{id}/csv-importRows imported, idempotency_key honoured0
GET/lead-lists/{id}/leadsThe saved rows, cursor paged0
Enrichment
POST/enrichment/personA workflow_id to poll1 email · 10 phone
POST/enrichment/bulkOne workflow_id for the whole list1 email · 10 phone
POST/enrichment/companyThe company record, inline1
GET/enrichment/status/{workflow_id}Progress, then credits_charged0
AI qualification
POST/smart-agents/runA workflow_id · AI qualification5 per lead
GET/smart-agents/{id}Scores and reasons, row by row0
Export
POST/export/csv/signed-urlA signed download link0
GET/export/jsonThe records inline, columns selectable0
Workspace
GET/whoamiIdentity, scopes, plan and organization0
GET/credits/balanceThe shared team wallet0
POST/credits/estimateA signed quote_id, five-minute life0
GET/usageWhat this key has spent0

Start a run. Poll until it settles.

Person and bulk enrichment answer 202 Accepted with a workflow_id and a poll_url.

A timeline of one bulk enrichment. The request returns 202 Accepted with a workflow id and holds 77 credits. Status polls at 2, 6, 14 and 30 seconds read queued, running with 3 of 7 rows done, running with 6 of 7, and completed. The hold settles into 57 credits charged and 20 released.

queuedrunningcompletedcompleted_with_errors
poll.shfor wait in 2 4 8 16; do sleep $wait status=$(curl -s "$POLL_URL" \ -H "Authorization: Bearer $CLEANLIST_API_KEY" \ | jq -r .status) case $status in completed*) break ;; esac done

Scoped keys. Public limits.

Every clapi_ key is checked against 14 OAuth scopes and revocable from Settings. 30 requests a minute per key, 60 per organization.

The API keys screen in Cleanlist AI settings, with two keys, beside the three published rate limits: 30 requests a minute per key, 60 a minute per organization, and 60 People Searches a UTC day per key.

Ask Claude for a phone number. It calls Cleanlist AI over MCP.

Add mcp.cleanlist.ai as a custom connector in claude.ai, Claude Desktop, Claude Code or Cowork, then sign in.

A conversation in Claude with the Cleanlist AI connector. Asked for the phone number of Marcus Vale at Omni, Claude uses Cleanlist AI enrich_person and answers with a verified mobile number; asked to add him to the Series B sales leaders list, it uses add_leads_to_list. Beside it, the connector at mcp.cleanlist.ai lists every tool.

1 credit per verified email, however many providers it took.

Quote a run first, and it can't bill past the ceiling you saw.

The Series B sales leaders list in Cleanlist AI after one enrichment of 7 leads. All 7 have a verified work email at 1 credit each; 5 have a phone number at 10 credits each. Quoted at 77 credits, charged 57, with 20 released to the wallet.

Credit prices

Search, list reads, exports
0
Status polls and quotes
0
Verified work email
1
Phone number
10
Email and phone on one row
11
Company enrichment
1
AI qualification
5per lead

API access starts on Pro: $89 per seat a month, 1,500 credits per seat. Annual billing takes 25% off. API keys start working on a paid plan: the 14-day Pro trial runs in the app and over MCP.

API questions.

Billing, filters and the parts of v2 that bite.

Plans and credit prices
Which parts of the Cleanlist AI API are free?

Search and every read cost 0 credits: POST /people/find, POST /people/find-at-companies, GET /people/find/filters, list reads, adding leads to a list, status polls, GET /whoami, GET /credits/balance and both exports. Only enrichment and smart-agent runs spend credits.

How much does the API cost per record?

A verified work email is 1 credit however many providers it took, a phone number 10, both 11, billed per result. The API starts on Pro: $89 per seat a month with 1,500 credits per seat. Annual is 25% off.

What filters does the search API accept?

POST /people/find takes structured filters, no prose. The short form is a filters object with keys such as titles, seniority, departments, job_functions, management_levels, locations, company_headcount and company_industries. The full form is criteria, with 73 person keys, and company_criteria, with 58 company keys. Values are case-sensitive, and a wrong one silently returns zero rows, so copy them from GET /people/find/filters.

Which response fields come back empty?

POST /enrichment/company leaves industry, employee_count, revenue_range and tech_stack null. They arrive as HTTP 200 with the key present, so don't filter, score or map on them.

Can I verify a list of emails I already own?

Not through the public API: it has no /verify route for addresses you sourced elsewhere. Enrichment checks every address before billing it, and the 1-credit email price includes that check.

Does the API support webhooks?

Not on v2: webhooks exist only on the frozen legacy v1 API. Async calls return a workflow_id and a poll_url, and polls cost 0 credits. Treat completed_with_errors as terminal, or a client waits forever on any bulk run with a failed row.

Am I charged twice if I enrich the same record again?

Yes. Enrichment endpoints take no idempotency key, so a retry is a new billable workflow; keep your own ledger of enriched ids. Ingest has one: add-leads and csv-import take an idempotency_key, and a replay inside 24 hours returns idempotency_replayed: true, uncharged.

Is there an uptime SLA or a SOC 2 report?

No. As of August 22, 2026, Cleanlist AI publishes no uptime SLA and is not SOC 2 certified. The API runs over HTTPS, with published rate limits and scoped bearer tokens you can revoke.

Price it, then run it.

Create a key in Settings and make your first call.

14 days of Pro, free.