shipped@di-atomic/icp-discovery · v1.1.2 · beta

An ICP list nobody can fetch isn’t targeting. It’s a wish list.

Any model will hand you 25 tidy target profiles. Then the scraper goes out and finds almost nothing — and nothing in the system says anything is wrong. icp-discovery plans the fetch instead: every profile ships with the flow, a runnable payload and the credit cost, and two scripts stop a bad set before it reaches a paid scrape.

For founders and operators whose AI writes the target list — and whose lead engine then quietly returns nothing, with no error to explain it.

A chalkboard sketch: a search slip reading chemical_company feeds into a large empty gold basket labelled 0 results, no error
Built by Di-Atomic Marketing & compliance agency REACH / CLP vocabulary-aware 7-language team Clients incl. ONYX Radiance, Pamit Group
25diverse ICPs generated per run
10sourced exemplar profiles across 9 verticals
2scripts gate the set before you pay
100/100marketplace security score
Installopvs-skills install @di-atomic/icp-discovery

Then say: “here’s my product — who should I target, and how do I get them?”

Why a list isn’t a target

A model writing a target list
> give me 25 ICPs

industry: Chemicals
googlemapsType: "chemical_company"
size: "mid-market"

(not a real Places type →
 0 results, no error,
 no way to fetch it)

It reads well. It also returns an empty result set that looks exactly like an empty market, after you have paid for the scrape.

icp-discovery plans, then gates
googlemapsType: ""      ✓ correct — no storefront
icpTitles: ["Regulatory Affairs Manager"]

planAcquisition →
  flow:    linkedinProfiles/search
  payload: {country_code:"DE", ...}
  credits: ~1
  reason:  found by role, not by map

Every profile carries the query that finds it, what it costs, and why that route was chosen. You can override it.

A profile you cannot fetch is a description, not a target.

What you actually get

🎯

It plans the fetch, not just the list

For every profile, planAcquisition emits the flow, a runnable payload, an estimated credit cost, the expected output and the reasoning. You are never left holding a description with no query.

🚫

It blocks the silent zero

Google Places has a closed vocabulary. chemical_company is not in it. Filter on a word that is not there and you get zero results with no error — so the shape verifier rejects anything outside the real allow list.

🧬

It enforces real diversity

Ask for 25 and most tools give you 25 adjectives on one company, which dedup collapses back to 1. The diversity verifier demands distinct tuples, variation across three dimensions, and overlap under 0.6.

The two failures it exists to stop

Chalk sketch: a tall stack of identical cards labelled 25 asked collapses to a single card labelled 1 left, beside three visibly different gold shapes labelled 3 real
Ask for 25 and get 25 adjectives on one segment. Dedup strips the overlap and hands back 1. Three genuinely different profiles beat twenty-five near-copies.
Chalk sketch: one road splits in two, the left branch to a shopfront with a map pin labelled hotel and maps, the right to an ID badge labelled no type and titles
Routing is decided by which fields are usable. A valid Places type goes to the lead chain; an empty type with job titles goes to a firmographic search.

The gate that runs before you spend anything

> validate the generated set

  verify-icp-shape ......... FAIL  googlemapsType "chemical_company" not in Places Table A
                                   conversionLikelihood 15 outside [1,10]
                                   icpSIC "chemicals" is not numeric
  verify-icp-diversity ..... FAIL  3 ICPs share (SaaS, mid-market, software)

  → regenerate with sector → sub-profile

  verify-icp-shape ......... PASS  8/8 valid, empty type correct for online ICPs
  verify-icp-diversity ..... PASS  8/8 distinct tuples, SMB → enterprise spread

  → planAcquisition emits 8 runnable payloads

That is real output from the skill’s own test gate. Deterministic scripts — not an LLM grading its own list. A gate that never fails is decoration.

Where it stops

Chalk sketch: a stack of cards labelled shape and diversity is held back by a lowered gold barrier arm with two check marks, in front of a coin meter labelled then pay
Nothing reaches the paid step until both checks pass. The barrier is the product.
It does not scrape and it does not write emails — it plans the acquisition and hands the plan to SpiderIQ to run. It also will not tell you an ICP converts at some percentage: the 1–10 fit score is an editorial sort key for deciding what to run first, not a measured close rate. Anyone quoting you a per-profile conversion number made it up.
Why this exists

I built this by dogfooding the same stack I run for clients.

icp-discovery is one skill in the system behind Di-Atomic — the marketing & compliance agency that runs cognitoAI, SpiderIQ and OPVS. If you want a target list that comes with the query that finds it, priced before you spend, and workable in regulated categories like REACH and CLP — in any of our seven languages — that’s the day job. Let’s talk.

Book a 30-min call with Di-Atomic

Just want the skill? Install @di-atomic/icp-discovery free.