Refining your ICP with stack data instead of guesses
Every ICP document contains at least one belief that nobody has ever tested. Usually it's a headcount band, inherited from the second year of the company, defended by the fact that it appears in the slide deck. Sometimes it's an industry. Occasionally it's a persona that stopped existing two product cycles ago.
The reason these beliefs survive is that testing them requires data about what customers actually do, and most of what marketing can get is data about what they are. Vendor stack data is the other kind. Here's how to use it to check whether your ICP is describing your winners or describing your history.
Step 1 — assemble the two lists
You need closed-won accounts and a comparison population. The comparison matters more than teams expect: a pattern that appears in 80% of your customers is meaningless if it also appears in 80% of everyone. Use closed-lost as the comparison set if you have enough of them, since they were qualified enough to enter the pipeline. Failing that, use your whole enriched prospect list.
Export both as domains. Deduplicate. Strip anything that isn't a real company domain.
Step 2 — enrich both lists
#!/usr/bin/env bash
# enrich a file of domains, one per line, into JSONL
while read -r domain; do
curl -sS "https://api.vendorstacks.com/v1/company/$domain" \
-H "Authorization: Bearer $VENDORSTACKS_KEY" \
>> stacks.jsonl
sleep 1.1 # stay under the 60 rpm default
done < domains.txtUse /v1/company/DOMAIN for this pass. It reads the index only and never triggers a live scan, so a 600-domain run takes about eleven minutes instead of potentially hours. Same 1 credit per lookup. If coverage on your list turns out to be thin, re-run the misses through /v1/check?url=DOMAIN with a 120-second timeout — that endpoint will scan the ones the index hasn't seen.
Step 3 — count, then compare
Flatten each record into a set of (category, vendor) pairs and count across both populations. The number you care about is not the raw frequency in your customer base — it's the lift: how much more common a vendor is among winners than among the comparison group.
{
"vendor": "segment",
"category": "analytics_data",
"won_accounts": 68, "won_total": 210, // 32.4%
"lost_accounts": 41, "lost_total": 480, // 8.5%
"lift": 3.8
}A vendor at 3.8x lift is telling you something. A vendor present in 90% of your customers and 88% of everyone else — AWS, typically — is telling you nothing at all, no matter how dominant it looks in the raw count. This is the mistake that ruins most first attempts: teams rank by frequency, conclude that their ICP is "companies that use AWS", and build a filter that matches the entire market.
Look at three things:
- High-lift individual vendors. The clearest signal. Often a tool that implies a workflow adjacent to yours.
- High-lift category presence. Sometimes the signal isn't a specific vendor but the fact that the company bought anything in a category. "Has an observability vendor at all" can be a stronger predictor than which one.
- Stack size. Total vendor count is a crude maturity proxy, and it frequently correlates with deal size. Worth checking before you invent something more elaborate.
Step 4 — the sample-size problem
This is where honesty earns its keep, because the analysis above will happily produce confident-looking numbers from data that cannot support them.
Under about 100 closed-won accounts, treat everything as a hypothesis. With 40 customers, a vendor appearing in 12 of them looks like a pattern and is well within what randomness produces. You can still use the output — as a list of things to go ask your reps about — but do not build routing rules on it.
Coverage is not uniform. The corpus is built from public web evidence, and companies differ in how much they publish. B2B SaaS discloses more than most; smaller and non-technical businesses disclose less. If your winners skew toward companies that publish more, they will show richer stacks for reasons that have nothing to do with why they bought. Check whether your won and lost populations have similar found: true rates before you trust any comparison between them. If won accounts hit 80% and lost accounts hit 45%, you are measuring disclosure, not fit.
Remember what a miss means. found: false is "no public evidence located", never "uses no vendors". Exclude misses from the denominator rather than counting them as zeros.
Correlation, still. A vendor that predicts winning may be a proxy for something else entirely — company stage, budget, or the fact that your best rep worked that segment last year. Stack data narrows the search; it doesn't settle causation.
Step 5 — build the lookalike filter
Once you have two or three signals that survive the caveats, turn them into something operational. The reverse lookup gives you the population directly:
curl "https://api.vendorstacks.com/v1/prospect?vendor=Segment&category=analytics_data&page=1" \ -H "Authorization: Bearer $VENDORSTACKS_KEY"
Ten entities per page, 1 credit per result, and zero-result pages cost nothing. Pull the population for your highest-lift vendor, then enrich each domain and score against the rest of your pattern. What comes out is a ranked lookalike list built from behaviour rather than from firmographic resemblance.
The public vendor pages are a useful sanity check before you commit credits — they show which vendors have meaningful coverage and what co-occurs with them, so you can tell whether a hypothesis is even testable at your scale.
What to do with the result
Two outputs, both concrete. A scoring input: add the high-lift signals to your lead score with weights proportional to lift, and let inbound routing use them. And a list definition: the filter above, run quarterly, producing the outbound target list.
The third output is less concrete and often more valuable: a specific, falsifiable claim about your market that replaces a paragraph of received wisdom in the ICP doc. Even when the answer is "the headcount band was right after all", you now know it rather than assume it.
The API reference has the full response shape, and the GTM plays post covers what to do with the segments once you have them. Get a key — 25 free credits — and enrich your 25 most recent closed-won accounts. It won't be statistically meaningful, and it will still probably surprise you.