The ICP Search Browser is Searchalong AI's answer to a specific question: given a warm domain that showed up in the citation loop, is this actually a fit for the operator's product, and how quickly can that judgment be made without a paid data-broker contract. It is the demand-side companion to AI Distribution, the work of getting a brand named by AI answer engines: once the loop surfaces a domain, the next question is whether that company is worth pursuing. What follows is the mechanic, the endpoint-to-signal map, and the design choices that made it possible to ship a free enrichment engine that is honest about what it can and cannot do.
Why domain-first, not lead-first
Most ICP tools take a person and try to enrich them: title, email, LinkedIn, employer, tenure. That approach depends on maintained people-graph databases, which are the expensive part of the market. The ICP Search Browser inverts the order. It takes a domain (already surfaced by the citation loop, or pasted by the operator) and enriches the company. People-level enrichment is a downstream step that runs against a warm signal, not the discovery mechanism itself.
The domain-first order matters for cost, honesty, and scope. A domain has a WHOIS record. A company has a hiring page. A brand has a social profile and an HN mention count. All of these are queryable without a licensed dataset. The ICP Search Browser builds the fit picture out of the 15 signals that public infrastructure will hand over for free.
The 15 signals and their sources
Every fetcher runs in parallel via Promise.allSettled with a 12-second hard cap on the whole run. Every failure is caught into a graceful missing or error status so one slow endpoint cannot stall the whole run.
- Domain age. RDAP (
rdap.org/domain/{d}). The Registration Data Access Protocol is the successor to WHOIS and returns JSON. Free, public, no API key. - Company size band. Public LinkedIn company URL (
linkedin.com/company/{slug}). Company pages render an employee-count range without authentication on many organisations. A robust regex over the HTML parses the band. - HQ country. RDAP registrant vCard. The
adrfield on entity vCards carries a country code when the registrant chooses to disclose it. - Funding recency. HackerNews Algolia API (
hn.algolia.com/api/v1/search). A query for"brand" raisedfiltered by story tag surfaces most funding announcements. Not exhaustive, but a useful signal. - Tech stack. Self-hosted signature scan of the homepage HTML. Thirty signatures cover the common B2B stack: Next.js, React, Vue, Svelte, WordPress, Shopify, Framer, Vercel Analytics, Google Analytics, Segment, PostHog, Mixpanel, HubSpot, Intercom, Stripe, Supabase, Firebase, Auth0, Clerk, Algolia, Sentry, Datadog, Tailwind, Bootstrap, Contentful, Sanity. Every signature is a regex over the HTML body capped at 500KB.
- Content velocity. RSS or sitemap XML. The fetcher tries the common paths (
/rss.xml,/feed,/blog/rss.xml,/sitemap.xml) and counts entries with a datestamp within the last 90 days. - Social presence. Nitter, a public mirror of X profile pages. Returns follower band as displayed text (e.g. "12.4K").
- GitHub footprint. GitHub REST API (
api.github.com/orgs/{slug}). Public without a token at sixty requests per hour per IP, or five thousand with a personal access token. Returns public repo count, follower count, org creation date. - Hiring signal. Public ATS boards. The fetcher probes Greenhouse (
boards-api.greenhouse.io), Lever (api.lever.co/v0/postings), and Workable (apply.workable.com/api/v3/accounts). The first responding board returns the count of open roles. - Press volume. Google News RSS feed for the brand name. Counts total items and items in the last 90 days.
- First indexed. Wayback Machine
availableendpoint (archive.org/wayback/available). Returns the closest snapshot to the epoch, which is a defensible proxy for when the domain first went public. - Redesign cycles. Wayback CDX API (
web.archive.org/cdx/search/cdx) with month collapsing. Snapshot count is a proxy for how often the site is being materially updated. - HN mentions. HackerNews Algolia hit count across stories and comments. Total volume of category conversation.
- Reddit mentions. Reddit JSON search endpoint (
reddit.com/search.json). Returns recent posts across subreddits; the fetcher extracts the unique-subreddit count as a signal of category breadth. - Peer co-mention. DuckDuckGo HTML endpoint (
html.duckduckgo.com/html) for"brand" alternatives(or a category hint). Counts result blocks. A directional signal of how many pages already position this brand against category peers.
Every one of these is a public endpoint. Nine of them require no authentication at all; the two that support tokens (GitHub, HN Algolia) work unauthenticated at the free rate limit. No paid data-broker contract sits underneath any of it.
How the fit score is computed
The ICP Search Browser returns a 0-100 fit score alongside the raw signals. The scorer is deterministic and interpretable: it starts at a neutral 50, then applies a signed delta for every configured field in the operator's ICP config. Delta magnitudes are capped so no single field can dominate. Fields that are not configured contribute nothing. The final score clamps to [0, 100].
The design is intentionally boring. Machine-learned fit scores are common in this category, and they optimize the wrong function: they hide the reasoning inside a model where the operator cannot argue with it. The ICP Search Browser publishes the reasoning as a fit_notes array attached to every score, so any operator can read exactly why a domain landed at 74 versus 62.
Given a config that sets size_bands: ["51-200"], tech_prefer: ["next.js", "stripe"], and require_recent_funding_days: 365, a domain that has 51-200 employees, ships Next.js plus Stripe, and raised nine months ago receives: +12 for size match, +10 for two tech matches, +10 for the funding recency. Neutral 50 becomes 82. Every one of those deltas is named in the notes.
Engineering choices worth naming
Three decisions in particular shaped how the ICP Search Browser behaves in production.
- Parallel-first orchestration. The fifteen fetchers run in parallel through a single
Promise.allSettledcall inside a race against a 12-second hard cap. One slow endpoint cannot stall the run; a hung endpoint gets marked as an error signal and the rest continue. - 24-hour server-side cache. The API endpoint returns the cached row if a domain was enriched within the last twenty-4 hours. This is not a performance optimization primarily; it is a citizenship rule for the free public endpoints the ICP Search Browser uses. Repeatedly hammering Reddit or Wayback for the same domain is a way to lose the ability to query them.
- Every signal declares its own source and timing. The result carries the endpoint URL and the milliseconds it took for every signal. Operators who want to audit a score can trace it back to a public URL they can open themselves. Nothing is a black box.
What the ICP Search Browser does not do
Being honest about the boundaries is the point of an operator tool.
- It is not a cold-prospecting engine. The ICP Search Browser enriches domains you already have a warm signal on (from the citation loop, or from a manual paste). It does not go out and generate a cold list of candidates.
- It does not discover contacts. Contact-level enrichment is a separate downstream step handled by the existing lead-enrichment pipeline. The ICP Search Browser answers a company-fit question, not a person-reach question.
- Every free source has coverage holes. Public LinkedIn withholds size on some companies. RDAP redacts registrant country on privacy-protected domains. Nitter goes down. Google News RSS is rate-limited. The ICP Search Browser reports these as
partialormissingsignal statuses rather than pretending it has data it does not have. An honest miss is more useful than a fabricated value.
The ICP Search Browser is one of five surfaces in the AI Visibility OS. It sits inside every brand workspace at searchalong.xyz, gated behind the same free score entry point. Every domain enriched is an operator learning something they did not know when they woke up, at zero cost per enrichment. That is the shape of the design.