Turn the ICP into observable criteria

Industry, size, technology and signals you can actually find in data.

Flour being sifted over a bowl

A criterion no field can verify will never reach your list. “Innovative”, “growth-minded” and “takes compliance seriously” are fine in a pitch and useless in a query, so each line of the ICP card needs a field, a source and a rule that returns an answer.

The deliverable is a criteria sheet with one row per criterion. We keep the example from the previous chapter: payroll and scheduling software for French employers with several sites, and invented figures.

Put every ICP line through the script test

Ask whether a script could answer yes, no or unknown from a field available for most accounts. If it can’t, find a proxy. If no proxy holds, the line leaves the list logic and becomes a question for the first sales call.

ICP line Observable proxy Field Source Verdict
Childcare or care home operator Declared main activity NAF code 88.91A or 87.10A SIRENE Filter
Several sites Open establishments per SIREN, 3 or more Count of active SIRETs SIRENE establishment file Filter
20 to 499 employees Headcount band trancheEffectifsUniteLegale SIRENE Filter
Payroll handled in house A payroll job ad, recent or open Job titles Job boards, LinkedIn Score
Expanding New establishments in the last 12 months Establishment creation date SIRENE Score
Fed up with their current tool None you can trust Sales question

That last row is common. Pain and dissatisfaction rarely leave a data trace. Keep them for the conversation, where they belong.

Know the four families of criteria

Family Examples Typical source Main weakness
Firmographic Activity, headcount, age, legal form, location Registries, LinkedIn Self-declared or dated
Structural Number of sites, group membership Registries, maps Groups often split across several legal entities
Technographic CMS, CRM, payment tool, analytics Website detection Sees only what a public page loads
Signals Hiring, funding, new site, new executive Job boards, news, registries Expires quickly, covered in the signals chapter

Firmographic and structural criteria decide who is in the TAM. Signals decide who to contact this month, so they belong in scoring and should never shrink the market itself.

Flour falling between open hands

Use registry fields with care

In France, the SIRENE files give you the first criteria almost for free. The NAF nomenclature on the INSEE site lists the codes, and INSEE revises it, so check which version your source uses. Headcount comes as a band code:

Code Employees Code Employees
00 0 21 50 to 99
01 1 to 2 22 100 to 199
02 3 to 5 31 200 to 249
03 6 to 9 32 250 to 499
11 10 to 19 41 500 to 999
12 20 to 49 NN or empty Not provided

Our filter translates to this:

etatAdministratifUniteLegale = 'A'
AND activitePrincipaleUniteLegale IN ('88.91A', '87.10A')
AND trancheEffectifsUniteLegale IN ('12', '21', '22', '31', '32')

Three traps. A NAF code is the main declared activity, so a group can sit under a holding code such as 70.10Z or 64.20Z while its operating subsidiaries carry the real one. Software companies scatter between codes like 62.01Z and 58.29C with little logic. And the headcount band refers to a given year, shown in anneeEffectifsUniteLegale, which can be several years old. Before fixing your NAF list, count the codes held by your best customers:

SELECT naf_code, COUNT(*) AS best_customers
FROM customer_accounts
WHERE segment IN ('childcare_groups', 'care_home_groups')
GROUP BY naf_code
ORDER BY best_customers DESC;

Codes you hadn’t thought of will appear, and the ones you assumed may turn out to be rare.

Give each criterion a role and three possible answers

A hard filter removes an account, so it needs a field that is nearly always filled. Sparse fields go in the score, where a blank costs points instead of a place in the market.

Role Requirement Effect Example
Hard filter Field present for nearly all accounts Account in or out Activity, active status
Score Field may be incomplete Adds points Stack, hiring
Sales question Not observable Asked during discovery Satisfaction with current tool

Treat a missing value as its own state. In a spreadsheet, each criterion column returns one of three words, and a final column combines them.

=IF(F2="","unknown",IF(F2>=3,"pass","fail"))

=IF(COUNTIF(G2:I2,"fail")>0,"out",IF(COUNTIF(G2:I2,"unknown")>0,"to check","in"))

The “to check” group deserves a sample review. If most of it turns out to be good accounts, loosen the rule.

Back-test on customers you know

Run the rules on your best-fit customers and on accounts you would not want again. A useful criterion lets most of the first group through and stops much of the second.

Criterion Best customers passing (of 60) Poor-fit accounts passing (of 40) Decision
NAF in list 54 6 Hard filter, add the missing codes
3+ open sites 52 9 Hard filter
Headcount 20 to 499 41 14 Keep, unknown passes to review
Hiring in the last 90 days 27 18 Light score
Blog on the website 22 15 Drop

The NAF row needs a caveat, because the segments were partly built with that field, so it flatters itself. The six best customers it misses are the ones to read: they show you holding structures and odd codes. Any hard filter losing more than a few of your best accounts is too strict for a market you have not seen yet.

Hands dusting off flour

Collect the harder criteria

Technology and hiring take more than a registry. Derrick, which I co-founded, so keep that in mind, covers these from a column of companies.

Criterion Feature Input Output Credits
Stack of a known company Website Technologies Website URL Detected technologies 2 per site
Companies on a given stack Find Companies by Tech Stack Technologies or site type, optional country Domain, site type, score, country, technologies 1 per company found
Hiring Company Hiring Signal LinkedIn company URL Yes or no, number of open roles, job titles 1 per company
Anything stated on the site Website Crawler then Ask Claude URL, then a closed question on the text Page content, then your classification 2 per row, each

Detection only sees what a site exposes, so a payroll tool used behind a login will never show. That rules out most back-office software as a technographic criterion, and our payroll vendor can’t read its competitors’ installed base this way. Any AI classification should be a closed question (“does this site mention several locations: yes, no, unclear”), and you should read a sample of 50 answers before trusting the column.

Without a tool, browser extensions that detect technologies, a look at the page source and a manual pass over job boards work fine at the scale of a back-test.

What the criteria sheet looks like

Criterion Role Field Source Rule If unknown Back-test
Activity Filter activitePrincipaleUniteLegale SIRENE In code list Review 54 of 60
Sites Filter Open SIRET count SIRENE 3 or more Review 52 of 60
Headcount Filter trancheEffectifsUniteLegale SIRENE Bands 12 to 32 Review 41 of 60
Hiring Score Open roles LinkedIn Payroll role open No points 27 of 60

Your next step: take every line of your ICP card, write its row in this sheet, and run the back-test on your own customers. The source column then tells you what you need to buy or extract, which is what the data sources chapter settles.