What it means
An ICP is the answer to a resource-allocation question: given that you cannot pursue every company on earth, which ones should get your money and your reps' hours? A profile that cannot be used to say no to a company is not an ICP, it is a description of your market.
The word "ideal" misleads people into writing aspirational documents. The useful ICP is retrospective and unglamorous: it describes the accounts that already worked, measured by outcomes you can pull from your own billing and support data. Fast to close, cheap to support, slow to churn, likely to expand. Whatever those accounts have in common is the profile, whether or not it flatters the pitch deck.
Once written, the ICP is not a document that sits in a folder. It becomes the fit component of lead scoring, the firmographic half of the MQL threshold, the territory definition behind lead routing, the exclusion list on paid campaigns, and the first question on the SQL checklist. That is the test of whether an ICP exercise was real: how many systems changed afterwards.
The scoring formula, written out
An ICP that only exists as prose cannot be applied to fifty thousand records. Turn it into a weighted score:
ICPScore(A) = ( sum over i of w_i * s_i(A) ) / ( sum over i of w_i * s_max ) x 100
A: the account being scored.i: each attribute in the model.w_i: the weight of attribute i. Weights are relative, so making them sum to 100 is a convenience rather than a requirement.s_i(A): the account's score on attribute i, on a fixed ordinal scale. A 0 to 4 scale works well: 4 for an exact match, 2 for adjacent, 0 for no match.s_max: the top of that scale, 4 here. It appears in the denominator so the result lands on 0 to 100 regardless of the scale you chose.
Two rules keep this honest. First, every attribute needs a written anchor describing what a 4 and a 0 look like, otherwise two people score the same account differently. Second, an attribute that everybody scores the same is carrying no information and should be removed, however important it feels.
To decide which attributes belong in the model at all, compute the lift of each candidate:
Lift(attribute) = P(attribute | good customer) / P(attribute | all customers)
An attribute present in 61 of 96 good accounts (63.5%) but in only 88 of all 240 customers (36.7%) has a lift of 1.73. Anything close to 1.0 is decoration.
A worked example, end to end
Six attributes, weights summing to 100, a 0 to 4 scale, so the maximum possible weighted sum is 100 x 4 = 400.
Kavi Studio, a 140-person creative agency in Istanbul running client comms through WhatsApp and Instagram, no CRM in place, 3.2M in revenue:
(25x4) + (20x4) + (20x4) + (15x3) + (10x4) + (10x4) = 100 + 80 + 80 + 45 + 40 + 40 = 385
ICPScore = 385 / 400 x 100 = 96.3
Northvale Logistics, 3,400 employees, freight, an entrenched enterprise suite, contact happens by phone and on site, supported region, large revenue:
(25x1) + (20x1) + (20x2) + (15x1) + (10x4) + (10x4) = 25 + 20 + 40 + 15 + 40 + 40 = 180
ICPScore = 180 / 400 x 100 = 45.0
Northvale is a bigger company with more money, and it scores half as well. That is the entire point of the exercise: size is one attribute among six, and it carries a weight of ten.
Now the population view. Score all 240 paying customers with the same model and split at 70:
- 96 accounts score 70 or higher. Combined ARR 1,152,000, an average of 12,000 each.
- 144 accounts score below 70. Combined ARR 528,000, an average of 3,667 each.
ICP revenue concentration = 1,152,000 / 1,680,000 = 68.6% of revenue from 40.0% of accounts
The retention split is where the argument ends. Over the trailing twelve months the high-scoring cohort lost 4 of 96 logos (95.8% retention) and grew net revenue by 14%. The low-scoring cohort lost 28 of 144 (80.6% retention) and shrank net revenue by 12%. Same product, same team, same year. If the sales motion spends equally on both, roughly 60% of new-business effort is going into the cohort that produces less than a third of the revenue and returns it more slowly.
Three ways the profile goes wrong
Averaging the whole customer base. Take the mean headcount across all 240 customers and you get 310, because six enterprise logos drag it upward. Aim paid acquisition at 310-person companies and you are targeting a segment that contributed a small slice of ARR and the majority of the support load. The median headcount of the 96-account ICP cohort is 85. Use the cohort, and use medians rather than means whenever the distribution has a tail.
Survivorship bias. Building the profile only from current customers hides everything churn taught you. The 28 accounts that left the low-scoring cohort last year are the most informative records in the database, and they are exactly the ones a "score our customers" query excludes. Include churned accounts, tagged as churned, and let the model learn what a bad fit looked like on the day it signed.
Learning only from deals you won. Won deals encode the reach of your sales team as much as the shape of the market. If your reps only ever called agencies, the model will conclude that agencies are the ICP, which may be true or may just be where the phone calls went. Where you can, score the accounts you lost and the accounts you never contacted, so the profile is a statement about the market rather than about last year's territory assignments.
How the ICP is actually derived from CRM data
The scoring model reads from four places, and the joins between them are where implementations get interesting:
- Account records for the firmographic attributes. Expect gaps: enrichment coverage on employee count and industry is routinely well under 100%, and a null is not a zero. Score missing attributes as "unknown" and exclude them from both the numerator and the denominator, otherwise poorly-enriched accounts score low purely for being poorly enriched.
- Subscription and invoice records for the outcome variables: current ARR, ARR twelve months ago, plan changes and their effective dates.
- Deal records for cycle length and discount depth, which are the two clearest early signals of a bad fit.
- Support and conversation volume per seat, which is the cost side of the profile and the one most teams never measure.
Edge cases to settle before you trust the output:
- Multi-entity accounts. Three subsidiaries with separate contracts are three rows and one buying relationship. Score at the level you sell at, and be consistent, because a parent counted once looks like a small account while its subsidiaries counted separately look like three.
- Partner and reseller-sourced accounts. Their acquisition economics and their churn behaviour are both different. Tag them and either exclude them or model them apart.
- Free-plan accounts. They belong in the product-usage analysis and not in the revenue cohorts. Including them silently deflates average ARR and pulls the profile toward whoever signs up most, which is rarely whoever pays most.
- Mid-period plan changes. An account that upgraded in month nine has two ARR values in the same year. Fix a snapshot date for the cohort and use it everywhere, or the concentration number will not reconcile with finance.
Why it matters
An ICP is the highest-leverage document in a go-to-market system because everything downstream inherits it. Bad targeting produces bad leads, which produce a bad MQL threshold, which produces demoralised reps, which produces slow follow-up, which produces the conclusion that the market is hard. Almost every one of those symptoms is treated locally, and almost none of them can be fixed locally.
The other half of the value is subtraction. A written ICP gives everyone permission to decline: to skip a lead, to exclude a keyword, to lose a deal on purpose. Teams without one are unable to say no in a defensible way, so they say yes to everything and discover the cost eighteen months later in the churn report.
Common mistakes
- Writing it as prose only. If it cannot be applied to a database column it cannot be applied to a database.
- Too many attributes. Beyond about seven, the weights become arbitrary and the score stops moving in interpretable ways. Six is plenty.
- Treating a null as a zero. Missing enrichment data punishes accounts for a vendor's coverage gap.
- Never recomputing it. A profile derived from the 2024 customer base and used unchanged in 2026 encodes a product that no longer exists.
- Confusing it with total addressable market. TAM is how big the market could be. The ICP is which slice of it you should attack this year.
Related concepts
- Lead scoring: the ICP score is its fit half.
- MQL: the threshold that combines ICP fit with behaviour.
- SQL: where a rep tests the profile against a real conversation.
- Churn rate: the outcome variable that proves or disproves the profile.
- Lead routing: territories and segments are ICP slices given owners.
- Conversion funnel: the ICP determines who enters at the top.
How Pinlyx handles it
Pinlyx stores firmographic attributes as structured fields rather than tags, so a weighted fit score can be computed across the whole base and refreshed when enrichment lands. Scores are visible on the account and on every contact under it, segments can be built directly from a score band, and the same fit model feeds lead scoring, routing rules and campaign audiences so that one profile change propagates instead of being reimplemented in four places.