Skip to Content
HandbookSalesICP fit score

ICP fit score

We score every lead on how well it matches who we build for. This is the ICP fit score. “Fit” because it answers exactly one question: does this company match our definition?

The fit score is definitional, not a revenue prediction. A four-person seed-stage startup paying us 150€/month can score high, and a large enterprise paying us a lot can score low. A separate expected-revenue score (planned) will answer “what is this lead likely to be worth?” The two are consumed together as a fit x revenue quadrant and will disagree on purpose for some accounts.

Where it lands

The score is stamped on the Prospect object in our CRM as three fields, written at creation, update, and refreshed whenever the company is re-enriched:

FieldValues
ICP fit statusscored/disqualified/insufficient_data/not_found. Check this first: a score is only current when the status is scored or disqualified
ICP fit score0–100. Never read a missing score as 0
ICP fit versionThe formula version the score was computed under (e.g. v0.1)

A Prospect with no ICP fit status at all was never evaluated. Some leads are not enriched, so they never get one; that is different from not_found.

How it works

Each prospect is looked up in various data sources by the domain of their work email or their LinkedIn profile, and the profile is scored in three steps. This page describes the intent and shape of v0.1. The exact rules, thresholds, and files live in the prospect_fit_score.py, and every score carries the version that produced it.

1. Hard disqualifiers: score 0, with reason code:

  • Public sector and banking. This keys off company type, not its market tags, so pharmaceutical company selling to public sector hospitals is not caught.
  • Prospects that have a personal email address
  • Companies that do not use Microsoft 365

2. Insufficient data: no numeric score

A profile that matched but has no firmographics, or no tech stack tags gets insufficient_data instead of a number. We retry them automatically over the following months rather than treating “no data yet” as “not ICP”.

3. Weighted components, summing to 100

ComponentPointsWhat it reads
Recent account compromise35Evidence of a recent account compromise or security incident. More recent incidents score highest, with points decaying as the incident gets older
Recent 365 migration30Evidence that the company recently migrated to Microsoft 365. More recent migrations score highest, with points decaying over time
Headcount growth20Recent company headcount change, measured by percentage growth and/or net hires. Growth only scores meaningfully above a minimum employee base to reduce small-company noise
Software relevance15Signals that software is important to the business: engineering/IT headcount, software-product or technology tags, or software-related language in the company description

Metadata fields (don’t affect the score)

FlagMeaning
low_confidenceScored from at most one of the four core signals (headcount, traffic, funding, tags). Read this as “unknown”, not “bad”
agency_flagConsultancy or agency. Qualifies on its merits, but downstream teams may route differently
nonprofit_flagNon-profit

Known limitations

  • Enrichment coverage is weaker for smaller companies in our target markets;
  • Generic company domains occasionaly match the wrong company, so spot check before doing outreach;
  • Scores are a snapshot; insufficient_data and not_found signups are retried automatically over the following months.
Last updated on