target-discovery
Skill1 starsChanged 3 months agoMITView on GitHub
Find private companies that match an acquisition thesis. Works public sources — association directories, trade show exhibitor lists, registries and licensing boards, franchise directories, review platforms, job boards, PE portfolio pages — records a source for every row, and never fabricates a field. Triggers on: find targets, find acquisition targets, build target list, target discovery, source deals, deal sourcing, sourcing run, find companies to buy, find businesses to acquire, who should I acquire, build a deal list.
In this repository8 other files it gives its agents.
- contact-verificationSkill
- deal-pipelineSkill
- founder-researchSkill
- market-mappingSkill
- outreach-sequencerSkill
- outreach-writerSkill
- reply-classificationSkill
- thesis-fit-scoringSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 5 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
Read thesis-profile.md from the user's workspace.
- Very specific: line 23
If it does not exist: stop. Copy templates/thesis-profile.md into the workspace and walk the user through sections 2, 3, 4, and 7 at …
- Distinctive: line 30
Check section 10 (Compliance notes):
- Very specific: line 38
TBDor blank: stop and ask. - Distinctive: line 55
Ask for a target list size.
- Very specific: line 59
Wait for confirmation before searching.
- Very specific: line 101
Not foundis correct and expected: Use it constantly. Never fill a gap with a plausible guess. - Distinctive: line 107
Quote, do not summarize, the signal: If you cannot quote it, you do not have it.
- Distinctive: line 109
Every row carries its source URL: No exceptions.
- Distinctive: line 114
Respect robots and terms: Read pages. Do not bulk harvest sites that prohibit it.
- Very specific: line 146
Leave fit_score and fit_reason blank.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Target Discovery
Builds the target list everything else runs on. The quality of this step sets the ceiling on the entire origination effort, so it is slow and it is careful.
Read first:
references/target-taxonomy.md— who can actually sell, and to whom you talkreferences/sourcing-directories.md— where private companies are findablereferences/scoring-rules.md— the anti-fabrication rulesreferences/compliance-and-ethics.md— the lines you do not cross
Step 0 — Load the thesis profile
Read thesis-profile.md from the user's workspace.
If it does not exist: stop. Copy templates/thesis-profile.md into the
workspace and walk the user through sections 2, 3, 4, and 7 at minimum. Do not
research without it. A list built without a thesis is a list of companies for
somebody else's fund.
🚧 HARD GATE — intermediary check
Check section 10 (Compliance notes):
- Principal buyer (buying for your own fund, search, or holdco): proceed.
- Fee-based intermediary (paid to introduce deals to other buyers): STOP.
In the US this can trigger broker-dealer registration risk. Tell the user
plainly and proceed only after they confirm counsel has cleared their model.
Per
references/compliance-and-ethics.md, this is not legal advice — but it is the question counsel will ask first. TBDor blank: stop and ask.
Step 1 — Confirm the search brief
Restate back to the user, from the profile:
- Sectors and business models wanted
- The size box: revenue range, EBITDA range, check/EV range
- Geography, or
No constraint - Ownership types that are actionable, per
target-taxonomy.md - Explicit exclusions and existing-portfolio conflicts
- Who counts as a competitor (ask directly if the profile is vague — a competing sponsor's platform and a conflict with your own portfolio are different things, and both matter)
Ask for a target list size. Recommend 100 to 300 for a first run. If the user asks for thousands, say plainly why that is worse, then do what they decide.
Wait for confirmation before searching. If the sector is unfamiliar or the
brief feels thin, offer to run market-mapping first.
Step 2 — Plan the search, then show the plan
Build a source plan from references/sourcing-directories.md. Weight it toward
Tier 1, because that is where private companies actually appear and everyone
else skips it.
A good plan for ~200 targets looks roughly like:
| Angle | Method | Rough yield |
| Association directories | Member lists of 2 to 4 sector associations | 40 to 80 |
| Trade show exhibitors | Exhibitor lists from 2 to 3 sector events | 30 to 60 |
| Registries and licensing | State registries, Companies House, license boards | 20 to 50 |
| Review platforms and maps | Google Maps density scan for local services | 20 to 50 |
| Local press lists | Business journal fastest-growing and family lists | 10 to 30 |
| Job boards | Active hiring as an operating signal | 10 to 30 |
| PE portfolio pages | Who is consolidating; the independents around them | 10 to 20 |
Run several angles. Each one is blind to what the others surface. Good private companies are often visible in exactly one place.
Show the plan. Get a nod. Then go.
Step 3 — Research
Work one angle at a time. For each candidate, capture only what you can see:
- Company name, domain, HQ location
- Sector and subsector
- Ownership type per
target-taxonomy.md, orNot found - Year founded and employee count, if published
- An operating signal, quoted, with its source URL and date
Rules while researching
Not foundis correct and expected. Use it constantly. Never fill a gap with a plausible guess.- Never infer revenue or EBITDA from headcount and present it as fact. If you estimate, label it an estimate and state the basis in the same field.
- A thin website is normal for a good private company. It is not a negative signal. Do not skip a company for looking small online.
- Quote, do not summarize, the signal. If you cannot quote it, you do not have it.
- Every row carries its source URL. No exceptions.
- Check the domain before merging near-identical names. Similar names are usually different companies.
- Dead or parked site: record that as the finding. Do not describe the company from memory.
- Respect robots and terms. Read pages. Do not bulk harvest sites that prohibit it.
Deduplicate as you go
Match on domain, not on name. Keep the row with the better source. Record where the duplicate came from, since appearing in three independent sources is itself a mild positive signal.
Step 4 — Write targets.csv
Append to the workspace targets.csv, creating it from
templates/targets.csv if absent. Schema:
company,domain,hq_location,sector,subsector,ownership_type,year_founded,
employee_count,est_revenue,est_ebitda,fit_score,fit_reason,signal,
signal_source,evidence_date,owner_name,owner_title,owner_linkedin,owner_email,
email_status,succession_signal,warm_path,warm_path_via,source,date_added,
status,notesAt this stage you fill: company, domain, hq_location, sector,
subsector, ownership_type, year_founded, employee_count, signal,
signal_source, evidence_date, source, date_added. Set status to
identified.
Fill est_revenue and est_ebitda only if published, or as a labeled
estimate with the basis stated. Otherwise Not found.
Leave fit_score and fit_reason blank. That is thesis-fit-scoring's job,
and doing it here skips the rubric. Leave every owner and contact field blank.
That is founder-research and contact-verification's job.
Everything unknown is the literal string Not found. Never blank, never a
guess.
🚧 HARD GATE — before writing
Show the user:
- How many rows you are about to add
- How many are new vs. duplicates of existing rows
- The breakdown by subsector and ownership type
- Five sample rows in full, so they can inspect actual quality
- Any angle that produced little or nothing, and why
Get approval. Then write.
Step 5 — Report honestly
Discovery run complete
Added: 164 new targets
Duplicates: 19 (already in list)
Total list size: 164
By ownership type:
founder-owned 88
family-owned 34
partner-owned 11
PE-backed (platform) 9
Not found 22
Evidence quality:
Quoted signal + source 102
Company confirmed only 62
Revenue published 7
Revenue Not found 141 (16 labeled estimates)
Angles run: 7 of 7
Weakest angle: Import/export records (4 rows — sector is mostly services)
Not yet done: Fit scoring, owner research, contact verification
Next: run thesis-fit-scoring to qualify these.Report what did not work. A silent shortfall reads as coverage. If an angle returned little, say so and say why. If you capped anything, say where.
Notes
- Stop and check in every 50 rows or so on a large run. Show a sample. It is much cheaper to correct the brief at row 50 than at row 300.
- Volume is not the goal. 150 well-sourced rows beat 1,500 scraped ones on every metric that matters, including owner conversations booked.
- If yield is low, the brief is probably too narrow. Come back to the user with what you are seeing rather than padding the list to hit a number.
- Never score a row here. The rubric exists for a reason.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

