Neeraj Sujan
← Writing

How to Define an ICP That Actually Filters (Not Just Describes)

Most ICPs describe a market. A real ICP filters one. Here is the three-layer framework GTM engineers use — firmographic, technographic, persona — and why exclusion logic is the part everyone skips.

·11 min read

Most ICPs are descriptions.

"Mid-market SaaS companies with a sales team." "B2B tech companies between 50 and 500 employees." "Growth-stage startups focused on revenue."

These are not ICPs. They are vibes with a spreadsheet attached.

A real ICP is a filter. It does not describe the market — it eliminates 95% of it and leaves you with accounts worth pursuing. The difference between the two is not a philosophy debate. It shows up in bounce rates, reply rates, and pipeline quality. Teams running on vibe ICPs wonder why their outbound doesn't convert. Teams running on filter ICPs wonder why they ever did it any other way.

Here is the version that actually works.


The Three-Layer Architecture

A functioning ICP has three layers. Most teams build one. Some build two. Almost nobody builds all three, which is why most outbound is mediocre.

Layer 1 — Firmographic. Company-level facts. What kind of company, how big, where, in what industry.

Layer 2 — Technographic. What tools they currently use. Their tech stack is a proxy for budget, sophistication, and the specific problems they are trying to solve.

Layer 3 — Persona. Who inside the company you are targeting, and in what capacity — buyer or influencer.

Each layer is a filter applied on top of the previous one. Firmographic narrows the universe. Technographic narrows the shortlist. Persona determines the message and the sequence.

Skip any one of them and your ICP is a sieve, not a filter. You will reach people who technically match your description but will never buy — because you didn't specify that their CRM needs to be Salesforce, or that you need the VP of Sales, not the Head of RevOps, or that Series A companies in fintech are excluded because your deal cycles don't survive their procurement process.

Build all three. In order.


Layer 1: Firmographic

Firmographic is where most teams start and stop. They get the industry right and call it done. That is table stakes.

A complete firmographic layer covers four parameters: industry, revenue, employee count, and geographic location. Each one has a specific way to get it wrong.

Industry. The mistake is being too broad. "Technology" is not an industry. "B2B SaaS with a product-led growth motion" is closer. "Series B B2B SaaS, product-led, with a sales team layered on top" is specific enough to filter on.

Revenue. Use revenue bands, not rough descriptions. "$5M–$30M ARR" tells you something. "Mid-market" tells you nothing. Revenue filters also differ from employee count filters — a 30-person company can be doing $20M ARR, and a 300-person company can be pre-revenue. They are separate data points. Use both.

Employee count. Here is where even careful teams make a structural mistake: they store total employee count and employee count range in the same column. Don't. They are different data types and different filter mechanisms. Total count is a number. Range ("50–200") is a category. Keep them in separate columns or your downstream filtering logic will break.

Geography. This is more precise than most people think. "United States" is not a geographic filter. "United States, specifically New York City, California, Texas, and Illinois" is a filter. And it still requires specificity — "New York" could mean New York City or New York State. Those are different populations. When you are building in Clay or running Apollo queries, the city/state/country trifecta matters. Ambiguous location data produces ambiguous results.


Layer 2: Technographic

Technographic is the layer that tells you whether a company is operationally ready to use your product — before you ever contact them.

The insight is simple: what tools a company has deployed tells you more about their budget, maturity, and buying behavior than almost any other firmographic signal. A company running Salesforce, Outreach, ZoomInfo, and Gong is a different animal from a company running HubSpot free and a spreadsheet. Same industry, same employee count — entirely different buyer.

BuiltWith is where you start. It detects frontend and website technology — hosting infrastructure, analytics tools, CMS, e-commerce platforms, marketing pixels. Good for top-of-funnel tech detection. Free tier is useful; paid tier is necessary for bulk.

HG Insights is where you go when you need verified data on internal software usage — the CRM, the ERP, the data warehouse. HG uses research-based methods, not just tag detection. More expensive. More accurate. Worth it for enterprise plays where the tech stack is determinative of whether they are a real buyer.

Sumble is newer and more intelligent than either. It does account-level technology mapping by combining multiple signals rather than relying on a single detection method. Better for nuanced stack analysis.

The practical application: you are not just checking if a company uses Salesforce. You are using that fact as a buying signal — if they are already investing in a CRM at that sophistication level, they understand the problem you solve. You are not selling the concept. You are selling your solution.

Tech stack as ICP filter is one of the highest-leverage things you can do. Most teams don't do it. That is the gap.


Layer 3: Persona

Persona is where the ICP connects to the sequence.

Most teams treat persona as a title. "VP of Sales." "Head of Marketing." "CTO." That is not a persona layer — that is a LinkedIn filter.

A persona layer requires one distinction that most outbound strategies ignore entirely: the difference between decision-makers and champions.

A decision-maker is the person who can sign the contract. They have budget authority. They can say yes without asking anyone else. They are harder to reach, more protective of their time, and require a specific kind of message — one that speaks to business outcomes, risk, and ROI.

A champion is someone who wants what you are selling but cannot buy it alone. They are an internal advocate. They can get you in front of the decision-maker. They are often more accessible, more willing to have a conversation, and — if you win them — your most powerful sales asset.

Most outbound targets one or the other by accident, not design.

The right approach is to sequence deliberately. Champions first if your product has a bottom-up adoption motion. Decision-makers first if your deal size requires executive buy-in from the start. Or both, with different messages — the champion message is about pain and capability, the decision-maker message is about revenue impact and competitive risk.

Same company. Same campaign. Two separate sequences. Completely different angles.

If you are sending the same email to the VP of Sales and the Sales Ops Manager, you are leaving conversion on the table.


Exclusion Logic: The Half of ICP Nobody Talks About

Here is the part most articles skip.

An ICP is not just who you target. It is equally who you explicitly exclude.

Exclusion logic matters because databases are imprecise. Apollo and Prospio return broad results. Without explicit exclusions, your enriched list includes:

  • Competitors — companies you should never be selling to and whose employees will recognize your product
  • Active customers — already in your system; outbound to them is noise and damages relationships
  • Accounts in active sales cycles — contacting them from a cold outbound sequence mid-negotiation creates friction
  • Large legacy companies — Google, Microsoft, IBM. They match your firmographic filters on employee count but have procurement cycles that will kill your deal velocity

Beyond specific account exclusions, there are domain-level exclusions that belong in every ICP by default: .org, .gov, and .edu domains. These are non-commercial entities. Unless your product is explicitly for nonprofits, government agencies, or educational institutions, they consume credits and produce zero pipeline. Exclude them globally.

The deeper point: exclusion lists are dynamic. They are not set once and forgotten. Every client engagement surfaces new accounts to exclude — competitors you didn't know existed, customers who switched, categories of company that consistently churn. Build a process for updating exclusion lists monthly.

There is also a title-level exclusion problem. When you search for "product" roles and get production engineers, manufacturing leads, and product managers all in the same list — that is a keyword contamination issue. The fix is to separate title keyword searches from seniority filters, and to add explicit keyword exclusions. "Product" and exclude "production," "manufacturing," "plant." It sounds tedious. It is. But it is the difference between a clean list and a list you have to manually review.


The "AI-Native" Problem

Here is a specific case that exposes the limits of database filtering.

Suppose your ICP includes "AI-native companies." You want companies that are building their core product on top of AI — not companies that added an "AI feature" to a legacy product.

There is no filter for this in Apollo. There is no checkbox in Prospio. No database has a field called "AI-native: yes/no."

So what do you do?

You add a secondary validation layer — typically a Claygent or Claude AI column in Clay that reads the company website, the product description, and recent job postings, and answers a specific question: Is this company's core product built on AI, or does it merely use AI as a supplementary feature?

This is the class of firmographic criteria that requires AI validation rather than database filtering: nuanced characteristics that require reading and interpretation, not just looking up a field value.

The pattern: database filter for the rough cut → AI column for the qualitative filter → human review for the edge cases. Three stages, applied in order of cost. Databases are cheap. AI columns cost tokens. Human review costs time. Run them in that sequence and you maximize precision while controlling cost.


Your ICP Has a Shelf Life

The ICP you build today is not the ICP you will run in six months.

Every campaign teaches you something. Reply data tells you who is responding and who is not. Positive replies cluster around specific industries, titles, or company sizes. Negative replies or non-opens cluster around others. The ICP should absorb that feedback and sharpen.

This is not a weakness — it is the design. An ICP built on theory and not updated against campaign data is getting stale at around 90% accuracy. An ICP updated monthly against real results can reach 90-93% accuracy, where the marginal accounts you are hitting are genuinely good-fit prospects, not noise.

The process:

  1. Review reply and open rates by firmographic segment monthly
  2. Identify which criteria segments are over- or under-performing
  3. Update filters accordingly — tighten where you are getting noise, expand where you are getting signal
  4. Update exclusion lists from new information surfaced in active accounts

Document every filter decision and the reasoning behind it. Not for compliance — for memory. When you revisit the ICP in three months, you need to know why you excluded Series A fintech companies or why you capped employee count at 200. Context explains the filter. Without it, you will undo decisions that were right.


How to Build It

Start with firmographic. Pull a rough list from Apollo or Prospio. Do not try to get it perfect — get it directional.

Layer technographic on top. In Clay, run BuiltWith enrichment on your company domains. Add HG Insights for the accounts where tech stack is determinative. Filter to the companies with the stack configuration that indicates a real buyer.

Build your persona layer. Define the decision-maker title and seniority for your deal. Define the champion title and function. Find both in your target accounts.

Build your exclusion list. Domain types (.org, .gov, .edu). Named account exclusions. Category exclusions. Title keyword exclusions.

For any firmographic criteria that cannot be filtered in a database — AI-native, PLG motion, specific use case — add a Claygent column and validate with a specific prompt.

Audit the output. Check 50 accounts manually against your criteria. Find what the filter missed or included incorrectly. Adjust.

Then run the campaign. Review results after 30 days. Update the ICP.

That loop — build, run, review, update — is not a quarterly exercise. It is the job.


The teams that win at outbound are not the ones with the best sequences or the most sophisticated personalization. Those things matter. But they run on top of the ICP.

Get the ICP right and a mediocre sequence will still produce results. Get the ICP wrong and the best copywriting in the world will not save you.

Build the filter, not the description. Update it when reality tells you something. Let the data sharpen the criteria over time.

That is how a working ICP is built.

#gtm-engineering#icp#clay#outbound#data