Prospect Qualification

What is ICP scoring and how do you automate it?

ICP scoring ranks each prospect by how well it matches your ideal customer profile, usually as a hot, warm, or cold tier. You automate it by pulling observable signals per domain (tech stack, infrastructure, firmographics, AI-readiness) and running them through a rule or model. Bassethound returns a fused icp_signal from a five-layer dossier in one call, so the scoring input arrives already correlated.

Best move: score accounts on signals you can observe, not fields a rep typed in.

Why it works: an ICP is a hypothesis about fit, and fit shows up in what a company runs (stack, infrastructure, AI maturity), which you can read from the outside without asking anyone.

Key takeaways

  • ICP scoring assigns each account a fit tier (hot, warm, cold) against your ideal customer profile, so reps work the top of the list first.
  • Automating it replaces manual field entry with observable signals pulled per domain, so the score updates when the company changes, not when a rep remembers to.
  • Firmographic-only scoring (size, industry, revenue) rates who a company is. Tech and AI signals rate what it has built, which sits closer to intent for technical products.
  • A good scoring function is transparent: each tier traces back to named signals with evidence, not a black-box number.
  • Bassethound’s sniff_domain returns a fused icp_signal alongside the five layers that produced it, so the score and its justification arrive together.

What signals predict ICP fit?

Signals fall into layers, and the one that predicts fit depends on what you sell. Firmographics tell you who a company is (vertical, size, contacts). Infrastructure tells you where it runs (hosting org, CDN, email provider, TLS posture). Tech stack tells you what it builds with (frameworks, CMS, analytics, payments). AI-readiness tells you whether it ships AI (model providers, SDKs, vector stores, orchestration, MCP endpoints). Security tells you how it operates (header grade, TLS grade).

The common mistake is scoring every account on the same generic firmographic axis. Fit is product-specific. If you sell AI infrastructure, a detected Pinecone client or an Anthropic SDK import outweighs headcount. If you sell to ecommerce, a Shopify detection plus a live payments widget matters more than the vertical label. Pick the layer that maps to what you sell, weight it heaviest, and treat the rest as context that breaks ties. A prospect that scores high on your primary layer and matches on a second is a confident match. One signal is a lead. Two correlated signals are a reason to call today.

How do you turn signals into a score?

Two approaches: rules or a model. Rules are transparent and cheap. Start with a small set of weighted conditions (AI-readiness verdict of shipping adds three, a detected vector store adds two, target vertical adds one) and sum to a tier threshold. A model learns weights from labeled closed-won data, which needs volume and ongoing maintenance to stay honest.

Start with rules. A rep can see why an account landed hot, you can tune the weights by hand as you learn, and there is no training pipeline to babysit. Move to a model only once you have enough closed deals to learn from and evidence that the hand-tuned weights are mis-ranking accounts you would have won.

Either way, the score is only as good as its inputs. Garbage signals produce a garbage tier, and no arithmetic on top rescues it. That is why the detection layer matters more than the formula. Spend your effort on getting clean, correlated signals per account, then keep the scoring function readable enough that a human can audit any tier in ten seconds.

What does automating ICP scoring look like in practice?

The manual version: a rep opens the site, guesses the stack, checks LinkedIn, types fields into the CRM. Every rep does it differently, and the fields are stale by the next morning. The automated version: an agent takes a domain, calls one tool that returns the observable signals, applies your scoring rule, and writes a tier.

With a remote MCP endpoint, the agent host (Claude, Cursor, or an internal workflow) calls sniff_domain(domain, “standard”), reads the icp_signal and the five layers behind it, and either trusts the fused signal or runs its own weighting. Keyless and stateless means no key provisioning and no per-account setup. One call per domain, self-contained.

That shape scales both directions. Loop the tool over a list of 500 imported domains to rank a territory before a rep touches it. Or fire one call the moment an inbound form submits, so the lead lands already tiered and routed. Because every call is read-only and carries nothing from one request to the next, you can re-score the same domain next quarter and get the current picture. The agent does the investigation inside one request instead of stitching five tabs together by hand.

Where does automated ICP scoring break down?

Detection is inference from the outside, so name the limits before you trust the tier. A static crawl plus optional JS render can miss fully server-side or proxied components. An AI stack behind a backend proxy can read as none. A company can match every firmographic box and still be a bad fit for reasons no crawl sees: budget, timing, an incumbent contract with two years left.

Confidence is not certainty. Treat the tier as a prioritization aid, not a verdict. The safeguard is transparency. A score that names its evidence lets a human override it, which a black-box number never does. Bassethound reports what it could not reach rather than filling the gap with a guess, so a low AI-readiness score reads as no signal found, not confirmed no AI. That distinction protects you from cutting an account that is shipping behind a proxy.

Use the score to sort the list, then let a human close the loop on the top tier. Automation earns its keep by removing the busywork of first-pass triage, not by pretending to know things a public crawl cannot know.

How is this different from CRM lead scoring?

CRM lead scoring usually runs on behavior and form fields: email opens, page visits, the job title someone typed at signup. That measures engagement and self-reported identity. ICP scoring on observable signals measures fit independent of behavior, before anyone raises a hand.

The two compose. Use ICP fit to decide which accounts deserve outreach at all. Use behavioral scoring to decide when a fitting account is warm enough to work. Fit without engagement is a list to nurture. Engagement without fit is a distraction dressed as a lead.

Apollo, ZoomInfo, and Clearbit anchor on firmographics and contact data. That is strong for who to call and how to reach them, and thin on what a company has built. For a technical or AI-native ICP, the stack signal is the one that separates a real prospect from a lookalike that shares the same headcount and industry code. Pair a contact corpus for reach with a live crawl for fit, and score on both. The CRM already holds behavior. What it usually lacks is a current, evidence-backed read of the account’s actual technology, which is the part you can automate from the domain alone.

Bassethound perspective

Firmographic ICP scoring rewards a company for existing at the right size in the right industry. That was enough when every buyer looked the same on paper. It is thin now. The accounts worth your week are the ones building something, and building leaves a trail the marketing page never mentions: a detected vector store, an Anthropic SDK import, an MCP endpoint answering at a known path. Those are ICP signals Apollo and ZoomInfo do not carry, because their moat is a contact corpus, not a live crawl.

The second claim competitors will dispute: fusion beats fan-out. You could assemble this from five tools (BuiltWith for stack, Censys for infrastructure, Clearbit for firmographics, something homegrown for AI). Then you own the correlation, five rate limits, and five bills, and an agent cannot cheaply join five dossiers on the fly mid-request. Bassethound returns the five layers already correlated, with a fused icp_signal, in one keyless call. Score the account, read the evidence, move on. The moat is not any single layer. It is that they arrive together, keyed to the same domain, in the same call.

Sources

Frequently asked questions

What is a good threshold for hot vs cold?

There is no universal number. Calibrate against your own closed-won accounts. Score the last 50 deals, find where fit signals cluster, and set the hot cutoff there. Re-tune as you learn.

Can you automate ICP scoring without buying a data license?

Yes, for the observable layers. Tech stack, infrastructure, AI-readiness, and security all read from a crawl of the public domain. Bassethound returns them keyless, so you can score a list without provisioning a data contract.

Does automated ICP scoring replace a rep's judgment?

No. It sorts the list so reps work the strongest accounts first. A score names its evidence; a human decides. Budget, timing, and incumbent contracts are things no crawl sees.

How often should an automated ICP score refresh?

Re-score when the company might have changed, or on a cadence that matches your sales cycle. Each call is stateless and self-contained, so re-running a domain costs one call and returns the current picture.

What if a company hides its AI stack behind a proxy?

Then it reads as no signal, not confirmed absence. A static crawl plus optional JS render can miss fully server-side or proxied components. Bassethound reports the gap instead of guessing, so a low score stays honest.

Sniff a domain.

Run sniff_domain on any site and read its five-layer dossier in one call.

Sniff a domain