Skip to content
Market3 min read

Living ICP, segments and leads

Write the yardstick, write who you are targeting, then read who your own records reach.

On this page

Where this comes from

This guide is distilled from src/features/growth-kit/help/content/market.ts. When the guide and Growth-OS disagree, that document is the one to trust, and the difference is worth reporting.

The leads view with the coverage funnel, the exclusion tally and the ranked companies
A living ICP record with target platforms and the two minimums
A living ICP record with target platforms and the two minimums
The four declared ICP criteria and the points each one carries
The four declared ICP criteria and the points each one carries
A segment criteria field written one clause per line
A segment criteria field written one clause per line
Companies excluded from a segment, grouped by the rule that decided
Companies excluded from a segment, grouped by the rule that decided

The ICP is a rule comparison, not a score about a company

A living ICP record declares what we mean by fit: target platforms, a minimum catalog size, a minimum number of languages, and optional disqualifier lines. The comparison uses only what the record declares, so a criterion nobody wrote is a criterion nothing enforces.

Four criteria carry a hundred declared points: technographic fit 30, catalog scale 30, localization 25, and recorded problem evidence 15. Met contributes its weight, not met contributes nothing, and an input nobody recorded leaves the denominator entirely. Below 60 evaluated points there is no score at all, only the list of what was missing. This is deterministic and it is not a prediction that a company will buy.

A disqualifier never rejects and never subtracts. A matching line raises the record for a person to read, names the line and the field it was found in, and leaves the score where it was.

A segment saves criteria, not members

A segment record saves who we are targeting and who we are deliberately leaving out. It does not save a member list: Leads re-derives membership from the company records on every read, so the count moves when the records move and there is nothing to refresh.

Write one clause per line. A clause is a field, a comparator and a value, and the fields are the ones a company record holds. A line the grammar cannot read is reported with its line number, the text as you wrote it, the reason and a hint. It is never guessed at, because a guessed clause quietly changes who gets contacted.

  • ecommerce platform is one of Shopify, Magento
  • catalog size is at least 5000
  • number of languages is at least 3

Leads reports three populations

Companies eligible for outreach, companies excluded by a rule, and companies our records cannot answer for. The third group contradicts nothing; it simply records nothing a clause compares, and it is listed under cannot tell rather than counted as a miss.

Every exclusion carries the first rule that decided it: marked exclude from campaigns, campaign suppression not recorded, already a customer, open opportunity, contacted recently, matched a deliberate exclusion, or a deliberate exclusion that could not be answered. The contact window defaults to thirty days and is a courtesy rule we chose, not a deliverability rule and not consent.

The coverage funnel is coverage of what we have written down, never of the market. Forty company records produce a funnel about forty companies. Below twenty eligible companies the page says a result from a run that small cannot be read as anything but noise.

Fix the record, not the figure

Leads has no editing controls by design. A company in cannot tell needs the field a clause compares. A company excluded for unrecorded suppression needs that answer typed on it. A member with no route needs a company domain. Every fix is one record away, and the next read follows.

Was this page helpful?

Feedback is stored only in this browser in the starter implementation.