How to Define Your ICP So Machines Can Use It
TL;DR: An ICP is a written spec of which companies to sell to, and it only works for outbound software if every criterion is a field a tool can query, with a pass/fail threshold or weight and an explicit exclusion list. Build it from closed-won and churned accounts, then revise it using reply and meeting outcomes.
"Mid-market SaaS companies that value innovation." We have read versions of that sentence in more ICP documents than we can count, and none of them can be executed. Hand it to a person and they nod. Hand it to a list-building tool and it has nothing to filter on.
Our position: an ICP is a query, not a narrative. If a criterion can't be checked against a data source, it isn't part of your ICP yet. It's a hope. This guide turns the hopes into fields.
What is an ICP, and how is it different from a buyer persona?
An ideal customer profile (ICP) describes the accounts you want: companies defined by traits you can look up. A buyer persona describes the people inside them: which roles you write to and what they care about.
They're separate layers, and mixing them is the first mistake. "Series B fintech with 50-200 employees" is an ICP line. "VP of RevOps who inherited a messy CRM" is a persona line. The ICP decides which companies enter the list; the persona decides who you address once one is in. Fuse them and you filter accounts on traits only a human can read off a conversation.
This article covers the account layer only.
Why do most ICPs fail when you hand them to software?
Three reasons, all fixable.
The criteria are adjectives. "Innovative", "fast-growing", "tech-forward". A tool can't filter on them, so someone silently translates them into whatever the data offers, and nobody reviews that translation.
There's no threshold. "Mid-sized" means 80 people to one person and 800 to another. Software needs a number.
There's no exclusion list. The profile says who's welcome and never who's out, so the list fills with lookalikes that can't buy: agencies that resemble your customers, subsidiaries whose parent decides everything, companies that churned from you two years ago.
Fix all three and the ICP becomes something you can run on a list of 10,000 domains and audit afterwards.
Where should your ICP come from: closed-won data, churn data, or gut feel?
All three, in a specific order. Gut feel produces hypotheses; your customer records test them.
Pull your closed-won accounts and, just as important, your churned ones and deals lost after real evaluation. The question isn't "what do our customers have in common", because they share plenty that's irrelevant. It's "what do the customers who stayed and expanded have that the churned ones lack?" Most teams skip churn data, and it's where the sharpest disqualifiers live.
With 40 customers this is an afternoon in a spreadsheet: one row per account, one column per candidate trait, one for outcome. Where your intuition says "they're all in healthcare" and the sheet says six of twelve are, believe the sheet.
Which firmographic and technographic criteria can a machine actually verify?
Anything that sits in a field somewhere, with a caveat: most of these fields are estimates. Headcount is usually a range scraped from public profiles. Revenue for private companies is typically modelled. Detected tech stack comes from scanning a site's public code and DNS, so it misses back-end tools and can flag ones removed last year. Validate a sample by hand before you build a rule on any of them.
| Criterion type | Example field | Typical source | How trustworthy |
|---|---|---|---|
| Industry | Category or SIC/NAICS-style code | Data providers, profiles | Coarse; companies straddle categories |
| Size | Employee range | Profile counts, providers | A band, not a count; lags reality |
| Funding stage | Last round, date | Providers, press | Better than modelled revenue |
| Geography | HQ country | Providers, site | Good for HQ; silent on where decisions get made |
| Technology | Uses tool X (detected) | Site-scanning tools | Misses back-end tools; can be stale |
| Hiring | Open role matching a title or keyword | Careers page, job boards | Good while the posting is live |
| Business model | Sells to businesses, self-serve, marketplace | Website text, manual tag | Needs a human or a classifier; check a sample |
Write down the field and its source in the same row. If you can't name the source, the criterion goes back to the "hope" pile.
How do you turn qualitative traits like "growth-minded" into observable data points?
Ask what you'd see if the trait were true, then pick the cheapest thing a tool can see.
"Growth-minded" is the classic, and nobody can query it. But when your best customers were growth-minded, what was visible? Open sales roles, headcount added over two quarters, a recent round, a new product page. Pick two or three and attach thresholds: "at least two open roles in sales or marketing" is something a script can count. The same move works elsewhere:
- "Sales-led" becomes: has a "Book a demo" path and no public self-serve pricing.
- "Technically sophisticated" becomes: has an engineering blog or public repos.
Some proxies will be wrong. That's fine: a proxy is a testable hypothesis, and reply data tells you if it earned its place. A vague adjective can't be proven wrong, which is why it's useless.
Events that fade, like a new round or a fresh posting, are buying signals, a different layer from fit. We cover which are worth acting on in B2B buying signals. Keep the ICP about fit and let signals govern timing.
What should go on your exclusion list, and why does it matter as much as the inclusion criteria?
Because exclusions are the only thing that narrows the funnel back down, and every wasted send costs sender reputation; our deliverability checklist covers why bounces and complaints compound. Start from your own history:
- Industries or business models where you've lost repeatedly or churned fast.
- Size bands where the deal can't pay for the sale, or procurement takes over.
- Lookalikes that aren't buyers: agencies, consultancies, resellers, competitors.
- Regions you can't serve or support.
- Open deals, current customers and anything on a do-not-contact list.
Each exclusion needs a field, a value and a source, like an inclusion. "No agencies" needs a tag; "no competitors" needs a named domain list. Run them as hard filters before scoring, so a high score can never rescue a disqualified account.
How do you write the ICP down: tiers, weights, and hard filters?
Three layers, run in order: hard filters (pass/fail, including every exclusion), weighted scoring for fit among those that pass, and tiers that decide how much effort each account gets.
Here's a worked example for a hypothetical company selling compliance software to mid-sized fintechs. The weights are illustrative assumptions, not recommendations; yours should come from your customer sheet.
| Layer | Criterion | Rule | Points |
|---|---|---|---|
| Hard filter | Employees | 50-500 (provider range) | Pass/fail |
| Hard filter | Business model | Not agency, reseller or competitor | Pass/fail |
| Hard filter | Region | HQ in a country you serve | Pass/fail |
| Score | Regulated product | Site mentions a licence or regulator | 30 |
| Score | Hiring | Open role in compliance or risk | 30 |
| Score | Funding | Round in the last 18 months | 20 |
| Score | Stack | Uses a payments or KYC vendor you integrate with | 20 |
With these assumptions, tier 1 is 70 points or more, tier 2 is 40-69, and anything below 40 is parked. Tier 1 gets individually researched messages, tier 2 lighter personalisation, parked accounts wait. Past roughly five hard filters and five scored criteria you're fitting noise from a small customer set.
How do you test an ICP before scaling outreach against it?
Two tests, cheap one first.
Backtest against your own history. Run the spec over your closed-won and churned lists. It should pass most of your best customers and reject most of your worst. If the hard filters throw out 10 of your 25 best, they're too tight or built on bad fields, and it's often the data (a stale headcount band), not the logic.
Send a small, split pilot. Pull a few hundred accounts per tier, keep copy and sequence identical, and compare positive replies per 100 sends between tiers. If tier 1 doesn't beat tier 2, your weights are wrong. The sample-size table in the buying-signals piece applies here too, and it's sobering: a modest gap needs thousands of sends per arm, so test big differences first.
Then open 25 random accounts that passed and ask whether you'd want them as customers; it finds field errors no dashboard does. If the whole loop is automated, the outbound automation guide covers what to keep a human check on.
How often should you revise your ICP, and what signals tell you it's wrong?
Version it, date every change, and revise on evidence. A quarterly review is a reasonable rhythm, but it should change something only when the data says so. Signs it's wrong:
- High reply volume, few positive ones. Reachable but wrong-fit. Look at who says "not relevant", find what they share, and make it an exclusion.
- Positive replies from low-scoring accounts. Your weights are missing something. Check what those accounts have in common.
- Meetings that don't become opportunities. Compare accounts that progressed against those that stalled.
- High bounce rates in one segment. A data-quality problem in a field, not an ICP problem. Fix the source or drop the criterion.
Change one thing per version, or you won't know which change moved the numbers.
FAQ
How many criteria should an ICP have?
Roughly five hard filters and five scored criteria is our ceiling. Start with the three or four that best separate your best customers from your churned ones, then add only what the data supports.
Can an early-stage startup with few customers define an ICP?
Yes, but call it a hypothesis. With five or ten customers you can't separate signal from coincidence, so write a narrow, explicit guess and let reply and meeting outcomes become your data. A tight hypothesis is easy to prove wrong quickly.
Should I have more than one ICP?
Only if segments differ in who buys, what they pay or why they buy. Different messaging and deal sizes deserve separate specs, each with its own filters and weights. Start with one and split when the data forces it.
What's the difference between an ICP and a total addressable market (TAM)?
TAM is the whole set of companies that could plausibly buy; your ICP is the subset to pursue first. TAM answers "how big could this get?" The ICP answers "who do we email on Monday?" It's always narrower, and it should be.
Do I need paid data providers to use a machine-readable ICP?
No. A machine-readable ICP is a way of writing criteria, not a data subscription. Careers pages, company sites, your CRM export and public tech-detection tools cover a lot. Paid providers add coverage and speed, with the same caveat: employee ranges, revenue and tech stack are approximations, so spot-check before relying on any field.
How do buying signals relate to the ICP?
The ICP says which accounts fit; signals say which of them to contact now. Fit rules are mostly stable and filter the list, while signals are events that fade and set priority and timing. A fresh signal on a non-fitting account is a distraction. See our guide to B2B buying signals.
Put your outbound on autopilot
0effort sources your buyers, writes every touch, answers replies over email and phone, and books the meetings. You just show up.
Start free See how it worksOutbound tips, monthly
One email a month with what's actually working in cold outbound. No spam, unsubscribe anytime.