Download all docs

Recipe: ICP Lead Qualification

This recipe filters a pile of leads down to the ones worth pursuing. You define an icp — an Ideal Customer Profile of declarative match rules — store your leads as contacts linked to organizations, and let a sales-board match them against the profile and open a pursuit for each one that fits.

The problem it solves

Lead lists are mostly noise. Qualifying them by hand is slow and inconsistent, and the rules (“companies in these industries, this size, in these regions, showing these signals”) live in someone’s head instead of anywhere you can audit or reuse. This recipe makes the profile a real element and the matching a real operation, so qualification is repeatable and the bar is written down.

Elements

ElementRole
icpDeclarative Ideal Customer Profile — the match rules leads are filtered against.
contactsThe people you’re qualifying, with rich identity and consent fields.
organizationsThe companies your contacts belong to — the firmographics the ICP scores.
sales-boardPursuit pipeline; runs the match and opens a pursuit per qualifying lead.

Flow

  1. Create an icp. It is a pure config element — a declarative rule set (industries, regions, employee/revenue bands, required signals, target roles, excluded keywords, a min_score). It has no operations of its own; you inspect its rules with the generic element GET, and a consumer reads them by reference.
  2. Build your lead store. Create organizations records with upsert (deduplicate on a stable key with find_by_domain or find_by_org_no), and contacts records with upsert, attaching each person to their employer with link_organization.
  3. Create a sales-board — a pursuit-based pipeline where each card is a long-lived sales case.
  4. Qualify the list with the sales-board’s ingest-icp-matches operation. Point it at your ICP (by icp_id or icp_slug) and your leads; it reads the ICP’s rule set, walks the leads, scores each against the rules, and opens a pursuit for every match above min_score. (If the circle has more than one ICP and you omit the id/slug, it returns SALES_ICP_AMBIGUOUS — name the one you mean.)
  5. Work the qualified pursuits on the board; the unqualified leads simply never become pursuits.

What this shows

A modifier like ICP is policy as data — it carries no behavior, just rules, and the behavior lives on the consumer that reads it (sales-board/ingest-icp-matches). That separation is the point: you can tune the qualification bar without touching the pipeline, and the same ICP can be read by anything that wants to filter against it. The lead data, meanwhile, is real contacts and organizations with proper identity and org links, so the firmographics the ICP scores are anchored to deduplicated records rather than raw spreadsheet rows.

Next pages