> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squid-id.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ICP filtering

> Save ideal customer profiles in Squid ID to badge your best-fit visitors in the dashboard and drive Slack routing rules for high-priority accounts.

An ICP (ideal customer profile) is a named set of rules that describes a good-fit account. Squid ID matches every identified visitor against your ICPs and gives matches a flame (hot-lead) badge on the [Visitors](/finding-visitors/identified-visitors) list, so your best-fit leads surface first. ICPs also drive [Slack routing](/routing/route-to-slack), so a match can notify your team automatically.

ICPs are a highlighting and routing tool. They do not change identification or billing. We always de-anonymize matched visitors in real time, and you're charged for every identification whether or not it matches an ICP. ICPs run after your suppression [filters](/finding-visitors/filters), so a filtered-out visitor never reaches ICP matching.

## If you're coming from RB2B

RB2B's Hot Leads tags visitors against ICP attributes. Squid ID's ICPs cover the same attributes and let you choose how rules combine.

<div className="compare">
  <table>
    <thead>
      <tr><th /><th>RB2B</th><th>Squid ID</th></tr>
    </thead>

    <tbody>
      <tr><td>Revenue, size, seniority</td><td>Yes</td><td>Yes (revenue segments, employee min/max, seniority)</td></tr>
      <tr><td>Department, industry, geography</td><td>Yes</td><td>Title, industry, country</td></tr>
      <tr><td>Rule combination</td><td>Fixed</td><td>Match all, any, or at least N populated rules</td></tr>
      <tr><td>Intent</td><td>Separate</td><td>Minimum high-intent page hits as an ICP rule</td></tr>
      <tr><td>Multiple profiles</td><td>Yes</td><td>Multiple ICPs, each with priority and a badge color</td></tr>
    </tbody>
  </table>
</div>

<p className="why"><strong>Why this matters.</strong> Choosing all/any/at-least lets a loose ICP cast a wide net or a strict one demand a tight fit, without writing separate profiles for every combination.</p>

## Rule fields

Every field is optional. Set the ones that matter and leave the rest blank. A blank rule doesn't restrict anything. Fields are grouped into three tabs.

**Person**

* **Title contains (any)** matches job titles. Common abbreviations expand, so "CEO" also matches "Chief Executive Officer" and "VP" matches "Vice President".
* **Seniority (any)** matches seniority terms (for example director, vp, c-level).
* **Persona** is Any, B2B, or B2C.

**Company**

* **Industry contains (any)** matches the company's industry.
* **Country / region (any)** matches the visitor's country.
* **Employees min** and **Employees max** bound headcount.
* **Revenue (any)** matches one or more company revenue segments: **SMB** (under \$50M), **Mid-Market** (\$50M to \$1B), and **Enterprise** (\$1B and up). The upper end of a reported range determines the segment.
* **Domain includes (any)** requires the visitor's domain to contain one of these.
* **Domain excludes (none of)** drops visitors whose domain contains any of these.

**Behavior**

* **Min high-intent pages** requires the visitor to have hit at least N pages matching your high-intent patterns. Set those patterns in [Pages](/finding-visitors/pages). With none defined, this rule never matches.
* **Min visits** matches visitors who have come back at least N times. Leave blank to match on the first visit.
* **Campaign source (UTM, any)** matches the first-touch `utm_source` (or a bare `source=`) on the landing URL, so a visitor who arrived from a tagged campaign qualifies as this ICP. Case-insensitive. Comma-separate to match any of several sources.
* **Campaign name (UTM, any)** matches the first-touch `utm_campaign` the same way.
* **Landing URL contains** matches any substring of the raw first-touch landing URL, a catch-all for custom or opaque params. See [Campaign tracking](/finding-visitors/campaign-tracking) for how to tag your links.

## Match mode

Match mode decides how an ICP's populated rules combine:

* **Match all rules** (default): the visitor must satisfy every rule you set.
* **Match any rule**: the visitor must satisfy at least one.
* **Match at least N rules**: the visitor must satisfy at least N. If you ask for more rules than you've populated, we use the count of populated rules instead, so the ICP can still match.

<Info>An ICP with no populated rules matches everyone under "all" and no one under "any" or "at least N". Set at least one rule for a meaningful profile.</Info>

## Priority and color

Each ICP has a priority and a badge color. When a visitor matches more than one ICP, the highest-priority ICP sets the flame badge color on the row. You can also pause an ICP, which keeps its configuration but stops it from matching.

## Setting one up

<Steps>
  <Step title="Create an ICP">
    On the ICPs settings page, click "New ICP", name it, and pick a badge color.
  </Step>

  <Step title="Choose a match mode">
    Pick all, any, or at least N. Leave it on "Match all rules" unless you want looser matching.
  </Step>

  <Step title="Set the rules that matter">
    Fill in only the fields that define your fit. Skip the rest.
  </Step>

  <Step title="Save and route">
    Save the ICP. Matching visitors get the badge immediately, and you can route them to [Slack](/routing/route-to-slack).
  </Step>
</Steps>

<Warning>An ICP can't match anyone when it conflicts with your filters: a B2C persona while "Hide consumer leads (B2C)" or "B2B only" is on, a domain include that's in your suppressed list, or a high-intent minimum with no patterns defined. The editor warns you when this happens.</Warning>

## Related

* [Tags](/finding-visitors/tags)
* [Filters](/finding-visitors/filters)
* [Pages](/finding-visitors/pages)
* [Route to Slack](/routing/route-to-slack)
* [Match rate and accuracy](/how-it-works/match-rate)
