TL;DR
Yes, you can describe your ideal customer in plain English and get a lead list back. In Cleanlist you type the ICP sentence ("VPs of Marketing at 50 to 200 person SaaS companies in the US"), Cleanlist turns it into a structured People Search, returns the matching people, and enriches each row with a verified email (98%) and phone (85%). The plain-English input works in the Cleanlist app, in Copilot, and through Claude via the Cleanlist MCP server. Search costs 0 credits. A full contact costs 11.
Last updated: August 2, 2026.
Every "describe your ICP" product eventually hits the same wall. The prose has to land on filter fields that exist in a real index, and the parts that do not land somewhere get quietly dropped. A tool that papers over that returns a confident list of the wrong people.
So this page does the boring, useful thing. Below are 12 ICP sentences people actually type, each one translated into the exact filters Cleanlist runs, what comes back, and where the sentence loses something. Two of the twelve are ICPs Cleanlist cannot filter on at all, and those are written out in the same detail as the ones it can.
A lead list built from a described ICP: verified email and phone attached to each row
Can you describe your ideal customer and get a lead list?
Yes. Cleanlist accepts an ideal-customer description in plain English and returns a list of matching people with verified contact data attached. You type or paste the ICP sentence, Cleanlist maps it onto structured People Search filters (roughly 24 distinct fields, including title, seniority, location, industry and headcount), runs the search, and shows you the people it found. From there you enrich the rows: 1 credit for a verified email, 10 for a phone, 11 for a full contact record with both. Search itself is free, so you can iterate on the description until the result set looks right before spending anything.
Where does plain English actually work in Cleanlist?
Cleanlist accepts plain English in three places and structured filters everywhere else. The app's People Search has an AI Search input mode, gated to Starter ($79/mo) and above. Copilot takes a whole go-to-market motion as a sentence and assembles the playbook (find, enrich, score, export). The Cleanlist MCP server lets Claude do it by delegation: Claude reads your request and calls a structured search_people tool with filters. The public REST API v2 is the exception: it takes structured filter objects only and has no natural-language endpoint. Free-tier accounts (30 credits, no card) get the structured filters, not AI Search.
What does a prompt turn into behind the scenes?
Cleanlist turns an ICP sentence into a structured query against roughly 24 distinct filter fields, then runs it. The main fields are: first and last name, LinkedIn URL, job title (include, exclude, and contains/exact/similar matching), seniority level, years in role, contact country/state/city with include and exclude, skills, years of experience, connection count, recently changed jobs, certifications, degree type, schools, fields of study, past titles, past companies, company name, company HQ country/state/city, industry (the LinkedIn taxonomy), and headcount in fixed bands (1-10, 11-50, 51-200, 201-500, 501-1,000, 1,001-5,000, 5,001-10,000, 10,001+). Anything in your sentence that does not map to one of those fields is either handled as an AI research column afterwards or dropped.
"Series B SaaS companies in the US, VP of Marketing or above, 50-200 employees"
Cleanlist serves most of this sentence and cannot filter the funding stage. It becomes: seniority in (VP, CXO), job title contains "Marketing", industry = Software Development, company HQ country = United States, headcount = 51-200. Two honest notes. The headcount bands are fixed, so "50-200" runs as the 51-200 band rather than an exact range. And "Series B" is not a filter field in Cleanlist, because there is no funding-stage filter and no funding data in the index. What you can do is run the search without it, then add an AI column that researches each company's most recent round and sort on that column. That is a researched attribute, which is slower and probabilistic, and it is a genuinely weaker thing than a filter.
"Find CMOs at Series A fintech startups in Austin"
Cleanlist runs this as seniority = CXO, job title contains "Chief Marketing Officer", industry = Financial Services, and a location filter, with the funding stage again handled as research rather than a filter. The detail that matters here is which location you mean. Cleanlist separates the person's location (contact country/state/city) from the company's headquarters (company HQ country/state/city). "CMOs in Austin" and "CMOs at companies headquartered in Austin" are two different searches and they return different people, especially in a remote-heavy category like fintech. Pick the one you meant, or run both and compare counts before you enrich anything.
"Heads of RevOps at B2B software companies with 200 to 1,000 employees"
Cleanlist serves this well, with one caveat about the word "B2B". It becomes: job title contains "Revenue Operations" (plus "RevOps" as a second title term, since profiles use both), seniority in (Director, VP), industry = Software Development, headcount in (201-500, 501-1,000). The caveat: there is no B2B versus B2C flag anywhere in the index. Industry comes from the LinkedIn taxonomy, which classifies what a company does, not who it sells to. For most software searches that is close enough, and where it is not, an AI column reading the company's own site is the honest way to split B2B from B2C.
"VPs of Sales in the UK and Ireland who started in the role in the last year"
Cleanlist serves all of this: seniority = VP, job title contains "Sales", contact country in (United Kingdom, Ireland), years in role = 0-1. This one is worth calling out because tenure is a real filter, not an inference. New leaders buy: they are re-evaluating a stack they did not choose. The limit is that this is a query-time filter, not a watchlist. You can ask "who is new in the role right now" any time you like. Cleanlist will not notify you later when somebody in an existing list changes jobs, because job-change alerting is not a shipped feature.
"People who recently changed jobs into a Director of Demand Generation role"
Cleanlist runs this as recently changed jobs = true, job title contains "Demand Generation", seniority = Director. The signal underneath it is worth the trouble, because job movement is also what rots a contact database: Cognism's data-decay guide cites 22.5% of B2B data going bad each year (Cognism attributes that figure to HubSpot). Querying the churn live turns the same problem into a targeting filter. Same limitation as above: this is a filter you run at query time, and Cleanlist has no job-change alerting or watchlists to tell you later when someone in a saved list moves.
"Former Salesforce employees now working at companies under 200 people"
Cleanlist serves this using past companies = Salesforce, plus headcount in (1-10, 11-50, 51-200). Past-company and past-title are first-class filter fields, which makes alumni plays workable: people who left a big platform for a smaller company usually carry the tooling habits with them. The limitation is the direction of time. You can filter on where somebody worked before, and you can filter on how long they have been in their current role (0-1, 1-2, 2-5, 5-10, 10+ years), but there is no "left company X in the last six months" range filter. Combine past company with years in role 0-1 to approximate it.
"Engineering managers with Kubernetes on their profile at companies in Berlin"
Cleanlist runs this as skills = Kubernetes, job title contains "Engineering Manager", company HQ city = Berlin. Read the wording of that heading carefully, because it is the honest version. Skills is a person-level, self-reported field from professional profiles. It tells you what an individual claims to know. It does not tell you what the company runs in production. Cleanlist has no technographic or tech-stack filter, and no intent data of any kind. If the question is really "which companies run Kubernetes", the skills filter is a proxy, and an AI column that reads job postings and engineering blogs is a better one.
"Marketing leaders at 11 to 50 person agencies in Canada, but not freelancers"
Cleanlist serves the exclusion natively, which is the point of this example. It becomes: job title includes "Marketing" and excludes "Freelance" and "Consultant", seniority in (Director, VP, CXO, Owner-Partner), industry = Advertising Services, headcount = 11-50, contact country = Canada. Title, contact location, company HQ location and industry all support exclusions, and exclusions are usually what turns a noisy list into a usable one. Title matching also has three modes (contains, exact, similar), so "Head of Marketing" as exact and "Marketing" as contains produce very different lists from the same sentence.
"CFOs with an MBA at manufacturing companies over 1,000 employees"
Cleanlist serves this with education filters, which most prospecting tools drop on the floor. It becomes: seniority = CXO, job title contains "Chief Financial Officer", degree type = MBA, industry = the relevant manufacturing taxonomy entry, headcount in (1,001-5,000, 5,001-10,000, 10,001+). Degree type, school names and fields of study are all real filter fields, alongside certifications. Worth knowing: education data is present on profiles unevenly, so adding a degree filter will always shrink a list more than the true population warrants. Use it when the credential is genuinely part of the ICP, not as a general quality filter.
"Everyone with the title Head of Growth at these 40 companies"
Cleanlist serves account-based lists like this, and the input method matters more than the sentence. It becomes: job title = "Head of Growth" (exact match), filtered to a set of company names. Company Name is a filter field, and People Search also accepts bulk pasting, including LinkedIn URLs, which is the more reliable path for a fixed target-account list because company names are messy and domains are not a filter field. Practical order of operations: paste the accounts, set the exact title, run the free search to confirm coverage, then enrich only the rows you got.
"Companies using HubSpot with over $10M in revenue that are hiring SDRs"
Cleanlist cannot filter any of the three conditions in that sentence. There is no tech-stack or technographic filter, no revenue-range filter, and no hiring or intent signal in the index. Saying otherwise would be the easiest lie on this page. What Cleanlist can do is get you to a defensible starting population using the filters that do exist (industry, headcount, company HQ location, title, seniority), then run AI columns that research each row: "Do they use HubSpot?", "Are they hiring SDRs?", "Roughly what size is this business?" Those become sortable columns you can filter locally. It costs credits per row, it takes time, and the answers are probabilistic rather than indexed facts.
"Companies that raised a Series B in the last six months"
Cleanlist cannot serve this as a search either, and it is one of the ICP sentences most often misfiled as a filter. Funding stage, amount raised and funding date are not filter fields in Cleanlist People Search. Neither is revenue. The workable pattern is the same two-step: filter on what is indexed (industry, headcount band, HQ location, title, seniority) to build a candidate set, then point an AI research column at the funding question and keep the rows that come back positive. If a hard funding filter is a requirement rather than a preference, a funding-data vendor is the right tool and Cleanlist is not.
Describing a go-to-market motion in plain English and letting Copilot assemble the playbook
Can you describe the companies you want instead of the people?
Cleanlist runs a separate Company Search alongside People Search, plus a find-similar-companies lookup. Company Search costs 0 credits the same way people search does, and a company enrichment costs 1 credit. The same filter honesty applies at the company level: industry, headcount band and HQ location are indexed, and revenue, funding and tech stack are not. One caveat worth stating plainly: the Cleanlist similar-companies result is synthesized from filters rather than produced by a native lookalike model, so treat it as a candidate set to review. For a fixed target-account list, pasting the accounts is more precise than describing them.
Can I use AI to find B2B leads instead of filling in filters?
Cleanlist lets you skip the filter UI by describing the ICP in one sentence, and the AI then writes the structured filters on your behalf. A plain-English ICP is parsed into the same People Search query you would have built by hand, then run against the same index. The benefit is speed and iteration: you get to a candidate list in one sentence instead of fifteen dropdowns, and because search costs 0 credits you can rewrite the sentence five times for free. The cost is precision. Anything ambiguous in your sentence (contact location versus company HQ, exact versus contains on a title) gets resolved by the parser, so read the filters it produced before you enrich.
How do I use AI to research prospects and write custom columns?
Cleanlist runs AI columns, which take a plain-language question and answer it per row by reading live public sources. You add a column, write the question ("Are they hiring SDRs?", "Which CRM does their careers page mention?", "What does their pricing page say about seat limits?"), and every lead in the list gets its own researched answer. This is the layer that covers everything the filters cannot: funding, tech usage, hiring, positioning. Costs are per row and per agent type, from 0.5 to 3 credits (custom AI research is 1, a cold intro email is 3, company intel is 2). Treat the output as a strong lead rather than a settled fact, and verify anything you would route a deal on.
Can I build a lead list from a prompt inside Claude?
Yes, through the Cleanlist MCP server, and the mechanism is worth stating precisely. Cleanlist ships an MCP server at mcp.cleanlist.ai (npm package @cleanlist-ai/mcp, OAuth, 30+ tools mapping to the REST endpoints, currently in beta). You connect it in Claude under Settings, then Connectors, with no manual API key. When you describe an ICP in the chat, Claude does the natural-language part: it reads your request and calls the structured search_people tool with filter arguments. The server itself accepts filters, not prose. Same credits as the app, and paid bulk operations run behind a signed quote so an agent cannot overspend your balance.
Does the Cleanlist API accept a natural-language query?
No: the Cleanlist public REST API v2 has no natural-language search endpoint. POST /search/people takes a structured filter object, and there is no route that accepts an ICP sentence. If you are building on the API (roughly 30 REST endpoints, 14 OAuth scopes, base https://api.cleanlist.ai/api/v2), assemble the filters yourself or put an LLM in front of your own service to do it. Rate limits to design around: 60 requests per minute per organization, 30 per minute per API key, and a hard cap of 60 People Searches per UTC day per key. API access starts on the Pro plan.
What can a prompt not do here?
Cleanlist will not invent a filter that does not exist, and the honest list of gaps is short and specific. No funding stage or amount. No revenue range. No tech stack or technographics. No intent data from any vendor. No "hiring for role X" signal. No department or job function filter (job title is the only proxy, because the underlying index does not support job functions). No job-change alerting or watchlists, only a query-time "recently changed jobs" filter. Cleanlist also does not own a contact database: it is an orchestration layer over a structured search index plus an enrichment waterfall across 15+ providers, and it does not send email or place calls.
How many credits does a list built from a prompt cost?
Cleanlist charges 0 credits to search and charges on enrichment, so the prompt itself is free and the list is what costs. A verified email is 1 credit, a phone is 10, and a full contact with both is 11. Saving a newly-added lead to a list is 0.5, a CRM or sequencer sync is 0.2 per lead, and AI research columns run 0.5 to 3 depending on the agent. Concretely: 250 full contacts is 2,750 credits. Plans are Starter $79/mo (1,500 credits), Pro $229/mo (5,000), Scale $599/mo (15,000), all 25% cheaper billed annually. The free tier is 30 credits a month with no card, which covers 30 verified emails or a couple of full contacts.
Which tools let you describe an ICP and get a list?
Cleanlist, Clay and Apollo all accept a described audience in plain language, in three different shapes. Apollo's AI page says you can "Pull lead lists with natural language, not filters", against a database Apollo markets as 240M+ contacts. Clay pairs a table-style builder and a data marketplace it pitches as "Buy data from 200+ providers in one place" with "Claygents" that "Research target companies and people with AI". The Cleanlist shape: describe the ICP, get a structured People Search, enrich the results through a waterfall across 15+ providers, export to any CRM. Vendor claims here were checked on each vendor's own site on August 2, 2026, and this category changes month to month, so verify at the source, including ours.
Does Clay let you describe an ICP in natural language?
Clay does, through its AI agents as well as through its table. Clay's own site describes "Claygents" as a way to "Research target companies and people with AI" and says you can "Chat to get full account context in natural language", alongside a data marketplace it pitches as "Buy data from 200+ providers in one place". The practical difference from Cleanlist is where the assembly work sits. Clay gives you column-level control over which provider runs when, which is powerful and takes build time. Cleanlist runs a fixed waterfall across 15+ providers at a published credit price: 1 credit for a verified email, 10 for a phone, 11 for both. Checked on clay.com, August 2, 2026.
Does Apollo have an AI search you can describe your ICP to?
Apollo does. Apollo's AI page states you can "Pull lead lists with natural language, not filters", and Apollo markets the underlying database as 240M+ contacts. Apollo is a database plus an engagement platform, so the same subscription also covers sending and a dialer. Cleanlist does neither: Cleanlist does not send email and has no dialer, and Cleanlist does not own a contact database, it orchestrates a structured search index plus an enrichment waterfall across 15+ providers. If one vendor for finding and sending is the requirement, that difference decides it. Checked on apollo.io, August 2, 2026.
How do you write an ICP prompt that actually returns people?
Write the sentence in the vocabulary of the filter fields Cleanlist actually has, and keep the research questions separate from the search. Four rules that hold up. First, name a seniority band and a title phrase separately ("VP or above" plus "Marketing"), because they are separate fields. Second, say which location you mean, the person's or the company's. Third, use a headcount range that matches the bands (51-200, not 50-200). Fourth, move anything about funding, revenue, tooling or hiring out of the search sentence and into an AI column. Run the free search, check the count, then spend credits.
Try it on 30 free credits
Describe your ICP, run the search for free, and enrich a sample. The Cleanlist free tier is 30 credits a month with no card. Search costs nothing, a verified email is 1 credit, a full contact is 11. See pricing for the full credit table, or read how People Search and Copilot fit together.
FAQ
Is there a tool where I describe my ideal customer and get a list?
Yes. Cleanlist takes an ideal-customer description in plain English, converts it into a structured People Search across roughly 24 filter fields (title, seniority, years in role, contact and company location, industry, headcount, skills, education, past companies and more), and returns the matching people. Enrichment attaches a verified email (98%) and phone (85%) to each row through a waterfall across 15+ providers. Search is free, so you can refine the description repeatedly before spending credits. The plain-English input mode requires Starter ($79/mo) or above; the free tier's 30 credits work with the structured filters.
Can I use AI to find B2B leads instead of using filters?
Cleanlist lets you do this, with the caveat that the AI is writing the filters on your behalf. Cleanlist parses your ICP sentence into the same structured query you would have built manually, then runs it against the same index. That is faster and much easier to iterate on, and because search costs 0 credits the iteration is free. Two limits to expect: anything ambiguous in your sentence gets resolved by the parser, and anything with no matching filter field (funding, revenue, tech stack, intent, hiring) is not searchable at all and has to be handled as AI research after the search.
Can Cleanlist find companies by funding stage or revenue?
No: Cleanlist People Search has no funding-stage filter, no amount-raised filter and no revenue-range filter, and Cleanlist carries no intent data or technographic data. If your ICP sentence includes "Series B" or "over $10M in revenue", that part of the sentence is not doing any filtering. The workaround is a two-step: filter on the indexed fields (industry, headcount band, HQ location, title, seniority) to build a candidate set, then run an AI research column that answers the funding or size question per row and sort on it. That is a researched attribute, not an indexed one.
How do I build a lead list from a prompt in Claude?
Connect the Cleanlist MCP server in Claude under Settings, then Connectors. The server lives at mcp.cleanlist.ai (npm @cleanlist-ai/mcp), uses OAuth so there is no manual API key, exposes 30+ tools mapping to the REST endpoints, and is currently in beta. Then describe the ICP in chat. Claude handles the language part and calls the structured search_people tool with filter arguments; the server itself takes filters, not prose. Credits are the same as in the app, and paid bulk operations require a signed quote so an agent cannot overspend your balance.
Does the Cleanlist API have a natural-language search endpoint?
No: the Cleanlist public REST API v2 accepts structured filters only. POST /search/people takes a filter object and there is no natural-language route. Natural language works in the app (People Search AI Search input, Starter and above), in Copilot, and through Claude via the MCP server by delegation. If you are integrating directly, plan on building the filter object yourself. Useful limits: 60 requests per minute per organization, 30 per minute per API key, 60 People Searches per UTC day per key, no v2 webhooks (poll for async results), and API access begins on the Pro plan at $229/mo.
References & Sources
- [1]
- [2]
- [3]
Related reading
Run this on your own list
Upload a CSV, enrich every row across 15+ providers, and export the result back to your CRM. First 30 rows free.
Enrich 30 rows free30 credits free every month · No credit card
