AI-Readiness as an ICP Signal

How do you build a list of AI-forward companies?

You build a list of AI-forward companies by starting with a domain universe and filtering each one on the AI signals in its live stack: model SDKs, vector stores, LLM observability, and machine-facing endpoints like MCP. Bassethound scores every domain's AI-readiness layer in one keyless call and returns a verdict of shipping, experimenting, or none, plus an ICP signal you can sort on. Rank by verdict and score, then send the confident hits to outreach.

Best move: start from a domain universe and filter by the AI signals in each live stack, not by press releases or funding rounds.

Why it works: AI-forward is a property of the codebase, not the marketing. A site that loads a vector store, an LLM SDK, or an MCP endpoint is building, and that evidence is fingerprintable at scale.

Key takeaways

  • An AI-forward company is one whose production stack shows real AI, not one that mentions AI in a headline.
  • Bassethound scores AI-readiness as the count of distinct signal groups a domain hits, out of six, capped at 1.0, and returns a verdict of shipping, experimenting, or none.
  • The strongest list-building signals are machine-facing endpoints: an MCP endpoint, a .well-known AI file, or a technical llms.txt. Any one flips a domain to shipping on its own.
  • The pipeline is: assemble a domain list, run each through the AI-readiness layer, filter by verdict and ICP signal, then rank by score.
  • Detection is a static crawl plus optional JS rendering, so a purely server-side or proxied stack stays invisible. A none verdict means no external signal, not no AI.

What makes a company AI-forward?

The label gets thrown at anyone with an AI tab in their nav. That is useless for a list. A useful definition is operational: a company is AI-forward when its production stack loads AI infrastructure. A model provider SDK (Anthropic, OpenAI, Gemini, Cohere, Mistral). An orchestration framework (LangChain, LlamaIndex, Haystack, CrewAI). A vector store (Pinecone, Weaviate, Qdrant, Chroma, Milvus). LLM observability (Helicone, LangSmith, Langfuse). Or a machine-facing surface like an MCP endpoint or a technical llms.txt.

Each of those costs engineering time to stand up and serves no marketing purpose. Nobody adds a Pinecone client to look busy. That is what makes them worth filtering on. Bassethound groups these into six signal categories and counts how many a domain hits. Hit three or more, or expose one machine-facing endpoint, and the verdict is shipping. Hit one or two, and it is experimenting. Hit none, and the domain reads none, meaning no external AI signal fired.

The distinction that matters for a list: shipping is a company already living in your world, experimenting is a company reaching for it, none is either not building or building somewhere you cannot see. You write different outreach for each. Start by deciding which verdict your list is for.

What signals should the list filter on?

Filter by the signals that survive minification and map to intent. In rough order of confidence:

Machine-facing endpoints first. An MCP endpoint, a .well-known AI file, or a technical (not marketing) llms.txt says the company is building for agents to consume. Bassethound classifies llms.txt as standard versus technical for exactly this reason. One of these flips a domain to shipping on its own.

Then infrastructure. A vector store, or an LLM observability tool (Helicone, LangSmith, Langfuse), means there is a real pipeline behind the front end, not a demo.

Then SDKs and orchestration. Anthropic SDK, OpenAI SDK, Vercel AI SDK, LangChain, LlamaIndex tell you which model family and how they wire it. Useful for targeting, weaker as proof because a single chat widget can trip them.

Then packaged AI widgets. Intercom Fin or Sierra show adoption, though they are bought rather than built, so weight them lower.

For a buyer-intent list, layer Bassethound’s ICP signal on top: hot, warm, or cold. That folds the raw groups into one ranking you can sort. Filter on verdict for the coarse cut, then sort on ICP signal and the AI-readiness score for priority.

How do you rank the list once you have signals?

Ranking beats filtering, because a flat list of 500 shipping domains is still 500 cold calls. Bassethound gives you two numbers to sort on. The AI-readiness score is the count of distinct signal groups hit, out of six, capped at 1.0, so a domain running a model SDK, a vector store, and an MCP endpoint scores higher than one running a lone chat widget. The ICP signal collapses the dossier into hot, warm, or cold against a buyer profile.

Rank in tiers, not on a single float. Tier one: verdict shipping and ICP signal hot. These are companies with a real stack that also match who you sell to. Tier two: shipping but warm, or experimenting but hot. Tier three: everything else you keep for nurture.

Do not over-trust the score’s precision. It is a coverage count, not a maturity index. A three-signal company is not fifty percent AI-ready in any deep sense. It is a company that left three fingerprints. Use the score to order outreach, not to make claims. And re-run on a cadence. AI stacks move fast, and a domain that scored experimenting last quarter may be shipping now. The list is a snapshot, so date it.

Where does this approach miss, and how do you cover the gap?

Two blind spots, and honesty about them keeps the list clean.

First, detection is a static crawl plus optional JS rendering. A company that runs its entire AI stack server-side, or proxies every model call through its own backend, exposes nothing to fingerprint. It reads none while shipping serious AI. So none means no external signal, never no AI. Do not delete those domains. Bucket them as unknown and qualify by other means.

Second, bought widgets inflate the signal. A marketing site with an Intercom Fin bubble trips the AI-widgets group without the company building anything. Weight machine-facing endpoints and infrastructure above widgets so a chat bubble alone does not earn a shipping verdict in your ranking.

Cover the gaps by treating Bassethound’s output as high-precision, lower-recall. Every shipping verdict is a strong true positive, because the signals are expensive to fake and pointless to fake. The misses live in none and unknown, not in false shipping calls. Build your primary list from the confident hits, and run a second pass (job posts, GitHub org activity, funding) over the unknowns rather than trusting a single crawl to be exhaustive. Bassethound reports its own gaps in the dossier, so you know which domains to send down the second path.

How do you run this against a whole domain list?

Bassethound is one keyless call per domain that returns the full five-layer dossier, so the loop is simple: iterate your domains, analyze each, keep the AI-readiness layer. Because it is stateless and read-only, you fan out in parallel without coordinating state, and there are no keys to provision across workers.

Source the domain list first. A CRM export, a conference attendee list, a funding database, an existing account list. Bassethound scores domains, it does not generate them, so bring your own universe. Then enrich: each dossier also carries tech stack, infrastructure, firmographics, and security, so the same call that scores AI-readiness gives you company size and hosting to segment on.

Cache results and stamp them with a date. The static crawl is cheap, but the web moves, so a quarterly re-run keeps the list honest and catches domains crossing from experimenting to shipping. Store the raw verdict, score, and ICP signal per domain so you can re-rank without re-crawling.

Handle the gaps in the pipeline. Route none and unknown verdicts to a secondary qualification path rather than dropping them, and log which signals fired so a human can audit a surprising verdict instead of trusting a black box.

Bassethound perspective

Most AI-forward company lists start from the wrong evidence. Intent vendors scrape job postings, press releases, and funding rounds, then sell you a list of companies that talk about AI. Those are lagging indicators, and every one of them is gameable. A company posts an AI Engineer role to look current and ships nothing. A founder says AI-native on a podcast and runs a wrapper around one API call.

The stack does not lie. To use a vector store, an application loads its client and calls its API. To expose an MCP endpoint, an engineer builds and deploys one. Those signatures survive minification and serve no marketing purpose, which is why they are worth trusting. We would rather return a shorter list of confirmed builders than a longer list of aspirational ones.

The honest cost is recall. Server-side and proxied stacks stay invisible, and we say so in the dossier instead of guessing. A competitor who pads a list with intent scores will claim broader coverage. They are trading precision for volume. For a list you are going to spend real outreach on, precision wins. Sniff the stack, not the story.

Sources

Frequently asked questions

What counts as an AI-forward company?

A company whose production stack loads real AI infrastructure: a model SDK, an orchestration framework, a vector store, LLM observability, or a machine-facing endpoint like MCP. Not one that only mentions AI in its copy. Bassethound returns a verdict of shipping, experimenting, or none per domain.

Do I need my own domain list to start?

Yes. Bassethound scores domains, it does not generate them. Bring a universe (a CRM export, an event list, a funding database), then run each domain through the AI-readiness layer and filter by verdict and ICP signal.

Does a 'none' verdict mean the company uses no AI?

No. It means no external signal fired. A fully server-side or proxied AI stack stays invisible to a crawl. Treat 'none' as 'unknown' and qualify those domains through a second path rather than dropping them.

How is the AI-readiness score calculated?

It is the count of distinct signal groups a domain hits, out of six, capped at 1.0. It is a coverage count, not a maturity index, so use it to rank outreach rather than to make claims about how advanced a company is.

Can I run this without API keys?

Yes. Bassethound is keyless on the free tier, stateless, and read-only. One call per domain returns the full five-layer dossier, so you can fan out across a list in parallel without provisioning keys.

Sniff a domain.

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

Sniff a domain