Research a company or idea, define the Ideal Customer Profile, and route to the right next step — either mapping the TAM or finding leads/prospects directly. The entry point for any "find me leads", "map my market", or "who should I sell to" request. Auto-loads when a user provides a company URL or idea and asks for leads or market mapping.
npx gooseworks install --claude # Then in your agent: /gooseworks <prompt> --skill icp-identification
Research a company or idea, define the Ideal Customer Profile, and route to the right next step. This is the entry point for any "find me leads" or "map my market" request — it sits upstream of all lead-finding and TAM-building skills and ensures we understand the business, define the target, and pick the right approach before executing.
When triggered, collect these inputs from the user:
If the user provides a company URL, research it using web tools before asking follow-up questions. Don't ask questions you can answer from the website.
Intake principle: Every answer here should help you populate a search filter (title, industry, headcount range, region) or an exclusion filter (titles to skip, industries to ignore, company types to avoid). If a user's answer is too vague to become a filter value, probe deeper. Don't ask generic strategy questions — ask questions that sharpen the search.
Using web search and the company URL, investigate:
Output: Synthesize findings into a brief (5-10 bullet points) and present to the user for validation. Example:
Research Summary:
- Company sells X to Y
- Main competitors: A, B, C
- Typical buyer: VP/Director level at mid-market companies
- Purchase triggers: scaling team, switching from legacy tool, new budget cycle
- Pricing suggests mid-market / enterprise buyer
Ask the user: "Does this match your understanding? Anything to correct or add?"
Based on research + user input, propose a structured ICP:
| Dimension | Recommendation | Reasoning |
|---|---|---|
| Job Titles | e.g., VP Sales, Head of Revenue Ops | Direct buyers of sales tools |
| Seniority | e.g., VP, Director | Budget authority at this deal size |
| Company Size | e.g., 51-200 employees | Sweet spot for this product |
| Industry | e.g., SaaS, FinTech | Highest product-market fit |
| Region | e.g., US, SF Bay Area | Current market focus |
| Signals | e.g., recently hired, posted about pain | Timing indicators |
Present as a table. Ask user to confirm, adjust, or refine. Iterate until they approve.
Define what to filter OUT. These map directly to "not in" / exclusion parameters in search tools:
| Dimension | Exclude | Reasoning |
|---|---|---|
| Titles to exclude | e.g., Intern, Coordinator, Assistant, Student | No budget authority or decision power |
| Industries to exclude | e.g., Government, Education, Non-profit | Product doesn't serve these verticals |
| Company types to exclude | e.g., Agencies, consultancies, sole proprietors | Not a fit for the product model |
| Company size to exclude | e.g., 1-10 employees, 10,000+ | Too small to need it / too large to buy it |
| Specific companies to exclude | e.g., existing customers, competitors, partners | Already in pipeline or not appropriate |
Present exclusions alongside the inclusion table. Ask user to confirm both.
Important: The ICP definition becomes the input context for all downstream skills. Be specific — vague ICPs produce vague leads.
Search precision warning: Downstream tools (Crustdata, Apollo) match on the exact title strings, industry tags, and keywords you pass them. Overly broad or stuffed filters (e.g., 15 keyword tags) return noisy results. Each filter value should be specific and intentional. When in doubt, use fewer, more precise values and let exclusions do the narrowing.
Once ICP is locked, ask the user:
"Now that we have the ICP defined, would you like to:
- Map your TAM — Build a scored Total Addressable Market: discover all companies matching your ICP, score and tier them, and build a persona watchlist for the best-fit accounts. This is the strategic, market-first approach.
- Find leads/prospects now — Go straight to finding individual people to contact. This is the tactical, results-now approach.
TAM mapping is best when you want a full picture of your market, ongoing signal monitoring, and a systematic account-based approach. Lead finding is best when you need contacts to reach out to immediately."
tam-builderIf the user chooses TAM mapping, don't jump straight into the full build. Walk through a sizing + confirmation gate first:
CRITICAL: No database writes without explicit user approval. The tam-builder must never upsert to Supabase until the user has reviewed sample results and said "go." This prevents polluting the database with unwanted entries that are hard to clean up.
Run tam-builder with the --preview flag to get a total company count without touching the database:
python3 skills/capabilities/tam-builder/scripts/tam_builder.py \
--config <config>.json --mode build --previewPresent the count to the user along with cost/resource context:
"Based on your ICP filters, Apollo found ~X companies in your TAM universe. Here's what a full build would look like:
- Apollo API credits: ~Y pages of company search (100 companies/page) + persona lookups for Tier 1-2 companies
- Supabase rows: up to X company records + estimated persona records
- Time: roughly Z minutes for the full build
Before committing, let me run a sample so you can see how the scoring and results look."
Always run a sample before any database writes:
python3 skills/capabilities/tam-builder/scripts/tam_builder.py \
--config <config>.json --mode build --sample --testThis searches Apollo (1 page, ~100 companies), scores them in-memory only, and prints:
No data is written to Supabase. Present the output to the user and ask:
"Here's what the sample looks like — [tier distribution + example companies]. Does this look right? Would you like to:
- Proceed with the full build — upsert all ~X companies to Supabase
- Limit the build — cap at a specific number of companies
- Adjust filters — tweak the ICP filters and re-sample "
If the user wants to adjust filters and re-sample, run --sample --test again. Multiple re-samples are free — nothing touches the database until the user approves.
Once the user confirms, run tam-builder in the agreed scope (full or limited) without --sample:
python3 skills/capabilities/tam-builder/scripts/tam_builder.py \
--config <config>.json --mode buildNever pass --yes on a first build. The script's built-in confirmation prompts are an additional safety net.
After the build completes, summarize results and explain what comes next:
signal-scanner — Monitor TAM companies for buying signals (headcount changes, funding, job postings, LinkedIn activity)cold-email-outreach or linkedin-outreach — Reach out to Tier 1-2 personas when signals firetam-builder → signal-scanner → cold-email-outreachWhen to recommend TAM path:
If the user chooses lead finding, present ranked strategies based on what's available in the skill graph:
| # | Strategy | Skill Used | Best For | Effort |
|---|---|---|---|---|
| 1 | Database search — Search people DB by title, industry, region, company size | crustdata-supabase | High volume, broad ICP | Low |
| 2 | Pain language — Find people posting about problems your product solves | pain-language-engagers | Warm leads with expressed need | Medium |
| 3 | Competitor audiences — Find people engaging with competitor content | competitor-post-engagers | Leads already in-market | Medium |
| 4 | KOL audiences — Find leads from industry influencer audiences | kol-discovery → kol-engager-icp | Niche, high-quality leads | Medium |
| 5 | Hiring signals — Find companies hiring roles your product replaces/supports | job-posting-intent | Companies with budget & urgency | Medium |
| 6 | Event attendees — Find leads from industry events | get-qualified-leads-from-luma | Engaged, in-market leads | Low |
| 7 | Apollo database search — Search Apollo's 210M+ contact database (free search, paid enrichment) | apollo-lead-finder | Broadest coverage, cost-controlled enrichment | Low |
Recommendation logic:
Recommend 1-2 strategies based on the ICP and company stage. Ask user to pick which to execute.
Once user selects their path and strategy(ies):
SKILL.mdWhen transitioning to a downstream skill, carry forward:
ICP Context (from icp-identification):
Include:
- Titles: [list]
- Seniority: [list]
- Company size: [range]
- Industries: [list]
- Region: [list]
- Signals: [list]
- Product: [what the user sells]
- Competitors: [identified competitors]
Exclude:
- Titles to exclude: [list]
- Industries to exclude: [list]
- Company types to exclude: [list]
- Company size to exclude: [ranges]
- Companies to exclude: [specific names, if any]This ensures downstream skills skip redundant intake questions and start executing immediately. Both inclusion and exclusion criteria must be passed — exclusions are what prevent noisy search results.
Check and improve your brand's visibility across AI search engines (ChatGPT, Perplexity, Gemini, Grok, Claude, DeepSeek). Set up tracking, run visibility analyses, audit your website for AI readability, and get actionable recommendations. Uses the npx goose-aeo@latest CLI.
Extract competitor and customer intelligence from any company's landing page HTML. Discovers tech stack, analytics tools, ad pixels, customer logos, SEO metadata, CTAs, hidden elements, and more. No API keys required.
Discover all customers of a given company by scanning websites, case studies, review sites, press, social media, job postings, and more. Use when you need competitive intelligence on who a company sells to.