One sentence, three tool calls.
Connect the MCP server once and Claude or ChatGPT runs search, enrichment and lists with the tools above.
Find the C-suite at Oracle, enrich work email and direct dial, then save them to Oracle executive outreach.
Six executives found. All six have a verified work email and four have a direct dial. Saved to Oracle executive outreach.
Build off our public endpoints.
| Method and path | What comes back | Credits |
|---|---|---|
| Search | ||
| POST /search/people | Matching people, plus a task_id | 0 |
| POST /search/companies | Matching companies | 0 |
| POST /search/companies/similar | Lookalikes for a company you name | 0 |
| GET /search/people/filters | The live filter allowlist and its enums | 0 |
| Lead lists | ||
| POST /lead-lists | A new list | 0 |
| POST /lead-lists/{id}/leads | Rows added, duplicates skipped | 0 |
| POST /lead-lists/{id}/csv-import | Rows imported, idempotency_key honoured | 0 |
| GET /lead-lists/{id}/leads | The saved rows, cursor paged | 0 |
| Enrichment | ||
| POST /enrichment/person | A workflow_id to poll | 1 · 10 · 11 |
| POST /enrichment/bulk | One workflow_id for the whole list | 1 · 10 · 11 |
| POST /enrichment/company | The company record, inline | 1 |
| GET /enrichment/status/{workflow_id} | Progress, then credits_charged | 0 |
| Smart agents | ||
| POST /smart-agents/run | A workflow_id · AI qualification | 5 per lead |
| GET /smart-agents/{id} | The agent's output, row by row | 0 |
| Sync and export | ||
| POST /sync/crm | Records written to HubSpot or Salesforce | 0.2 per lead |
| POST /sync/sequencer | Records written to Lemlist | 0.2 per lead |
| POST /export/csv/signed-url | A signed download link | 0 |
| GET /export/json | The records inline, columns selectable | 0 |
| Workspace | ||
| GET /whoami | Identity, scopes, plan and organization | 0 |
| GET /credits/balance | The shared team wallet | 0 |
| POST /credits/estimate | A signed quote_id, five-minute life | 0 |
| GET /usage | What this key has spent | 0 |
1 · 10 · 11 is a verified work email, a direct dial, or both on one row.
One run, end to end.
2xinbound deals
Speed to lead is now minutes with perfect data quality. We doubled inbound deals and convert 30% better.
Evan SantaVP of Sales, Proposify
Read the Proposify storyAnswers, before you build.
Which parts of the Cleanlist API are free?
Search and every read. POST /search/people and POST /search/companies cost 0 credits, and so do list reads, status polls, GET /whoami, GET /credits/balance and both exports. You are charged when data is created, not when it is read.
How much does the API cost per record?
A verified work email is 1 credit however many of the 25+ providers it took, a direct dial is 10, both are 11, and a miss is 0. Credits come with the plan: Starter $79 for 1,500, Pro $229 for 5,000, Scale $599 for 15,000. Annual billing takes 25% off.
Record-licensing APIs price the lookup instead. Coresignal, a company-data API vendor, publishes plans from a $49 a month Mini tier with 2,500 credits up to a $5,000 a month Elite tier, and prices an employee record at 10 to 20 credits and a contact enrichment at 20 (coresignal.com/pricing, fetched August 7, 2026). In that model a miss still spends the lookup. Cleanlist owns no contact database, so the coverage risk sits here rather than on your balance. The tradeoff runs the other way too: there is no bulk dataset to license, no firehose export and no historical snapshot.
Which plans include API and MCP access?
Any paid plan. Both are excluded during the 14-day Scale trial, which otherwise carries 250 credits, 3 seats, no card and every other feature. The Free plan at 30 credits a month works in the dashboard and the Chrome extension but cannot mint a clapi_ key.
What filters does the search API accept?
POST /search/people takes seventeen structured filter keys and no prose: titles, seniority, management_levels, departments, job_functions, skills, school_names, languages, company_names, company_domains, company_industries, company_headcount, company_locations, locations, location_city, location_state and location_country. People Search values are Title Case; company funding values are lowercase snake_case. An invalid enum returns zero rows silently rather than an error, so read the allowlist from GET /search/people/filters instead of guessing.
Three corrections worth having before you build. funding_stage works, and it is company-only: a single-stage query returned 10,533 companies when we ran it on August 22, 2026, and People Search rejects the key outright. Past companies and past titles are not filterable on People Search at all. Revenue range and technology stack are rejected by the company validator, so the API offers no revenue, technographic or intent targeting. The portal has revenue, funding-stage and headcount-growth filters; the public API does not.
Which response fields come back empty?
A handful, and they arrive as HTTP 200 with the key present and the value null rather than as an error, which is the part that bites. Do not build a filter, a lead score or a CRM mapping on them.
- POST /search/companiesindustry, employee_count, revenue_range
- POST /search/peopleconfidence_score
- POST /enrichment/companyindustry, employee_count, revenue_range, tech_stack
Company enrichment reliably returns name, domain, HQ location and LinkedIn URL, and that is what its 1 credit buys.
Can I verify a list of emails I already own?
Not through the public API. There is no /verify route to point at addresses you sourced elsewhere. Validation runs as a step inside enrichment, where every address is checked before it is billed, and that is part of what the 1-credit email price buys.
If scoring a list you already hold is the whole job, a dedicated validation API fits better. AbstractAPI, for example, publishes a free tier of 100 requests and paid plans from $17 a month billed annually (abstractapi.com, fetched August 7, 2026).
Does the API support webhooks?
Not on v2. There is no callback URL to register and no signed-payload delivery. Asynchronous work returns a workflow_id and a poll_url, and status polls cost 0 credits, so cadence is a latency tradeoff with no cost side. Webhook delivery exists only on the frozen legacy v1 API.
Treat completed_with_errors as terminal alongside completed. A bulk run with any failed rows settles there, and a client waiting for completed alone hangs forever.
Am I charged twice if I enrich the same record again?
Yes, if you submit it again. There is no idempotency key on the enrichment endpoints, so a retried dispatch is a new billable workflow. Ingest does have one: add-leads and csv-import both take an idempotency_key, and a replay inside 24 hours returns idempotency_replayed: true without re-charging. Keep your own ledger of enriched ids until enrichment gets one.
Is there an uptime SLA or a SOC 2 report?
No. Cleanlist publishes no uptime SLA and is not SOC 2 certified as of August 22, 2026. The API is served over HTTPS with scoped bearer tokens that can be revoked instantly and rate limits published openly, but there is no contractual availability commitment. Raise it before you build if procurement needs one.
Price it, then run it.
Mint a key from the dashboard, or paste the MCP URL into Claude. Both doors reach the same tools and the same wallet.


