BusinessIntend

Writing an ICP definition that holds up under pressure

Munaza Iqbal · · 3 min read · Data & Signals

Most ICP documents are a description of existing customers with the inconvenient ones removed. Here is how to build one that a rep can act on and a model can score.

Ask five people at a B2B company to describe the ideal customer and you will get five answers, all of which are true and none of which can be turned into a filter. "Mid-market companies that value data-driven decision making" is not an ICP. It is a sentiment.

A usable ICP has one property: someone who has never met your customers can apply it to a list of ten thousand companies and produce the same answer you would.

Build it from retention, not revenue

The default analysis looks at closed-won deals and finds what they have in common. This bakes in every mistake your sales team has ever made, because a customer who churned in month four is in that dataset as a win.

Weight by retained revenue instead, and the picture usually changes:

If you have fewer than fifty customers, the analysis is not statistically meaningful and you should say so. Use it directionally and re-run it every quarter.

Write down the negative criteria

The half that gets skipped, and the half that saves the most time.

An ICP that only describes who to pursue leaves every rep to decide independently who to skip, which means nobody skips anyone. Explicit exclusions are permission to disqualify, and disqualification speed is the highest-leverage variable in a rep's week.

Real negative criteria look like:

Every criterion must be observable

This is the test that kills most ICP documents.

For each attribute, ask: can I determine this about a company I have never spoken to, from data I can actually get?

AttributeObservable?Use
Headcount, by departmentYesFilter
Funding stage and recencyYesFilter
Technology installedYesFilter
Hiring velocity in a functionYesFilter
"Values data-driven decisions"NoDelete
"Growing fast"Only if defined as headcount changeDefine, then filter
Budget authority of the contactPartly — infer from titleScore, do not filter

Anything in the "no" column belongs in the qualification conversation, not in the targeting model. Mixing the two produces a target list that no one can reproduce.

Score, do not sort into bins

Tiering accounts into A, B and C feels organised and loses information. A company that misses tier A on one criterion by a small margin is treated identically to one that misses on all of them.

A weighted score keeps the gradient:

fit = 0.30 * size_band
    + 0.25 * industry_match
    + 0.20 * tech_stack_overlap
    + 0.15 * growth_rate
    + 0.10 * geography

Two rules keep it honest. Publish the weights — a score nobody can explain is a score nobody trusts, and reps will quietly ignore it. And re-fit the weights against closed-won-and-retained every quarter, or the model slowly encodes last year's market.

Validate against the losses

The final check, and the one that finds the errors: take the last twenty deals you lost after a demo and score them.

If your model rates them highly, the model is describing who takes meetings rather than who buys. That is a specific, fixable failure — usually a missing negative criterion — and it is invisible if you only ever validate against wins.

An ICP is not a description of your customers. It is a prediction about strangers, and it should be evaluated like one.

Prospecting Engine

Search companies and contacts on the attributes that actually predict a deal — headcount trajectory, funding stage, installed tech, hiring signals — then save the search and let new matches arrive on their own.

Explore prospecting

Related reading