From vc-skills
Full competitor analysis for VC market maps: scope competitors at 4 levels (direct, indirect, adjacent, substitute), discover companies via Extruct API with a two-pass strategy (fast search first, deep search where needed), enrich with positioning axes and competitive intelligence, and build feature comparison matrices. Triggers on: "find competitors", "scope competitors", "competitive landscape", "competitor analysis", "discover competitors", "competitive enrichment", "competitor search", "build landscape", "competitor discovery".
How this skill is triggered — by the user, by Claude, or both
Slash command
/vc-skills:vc-competitive-landscapeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scope, discover, enrich, and compare competitors across 4 levels. This is the core skill — it takes a market definition and produces enriched Extruct tables and feature comparison matrices.
Scope, discover, enrich, and compare competitors across 4 levels. This is the core skill — it takes a market definition and produces enriched Extruct tables and feature comparison matrices.
All Extruct API operations are delegated to the extruct-api skill. Do not construct raw HTTP requests — use the bundled CLI via the extruct-api skill.
| Variable | Service |
|---|---|
EXTRUCT_API_TOKEN | Extruct API |
| Input | Source | Required |
|---|---|---|
| Market context | claude-code-gtm/vc-maps/{map-slug}/market_context.md | yes |
| User knowledge of competitors | User input | recommended |
This skill has 5 phases. Each phase pauses for user review before proceeding.
Read market_context.md. Extract: market description, positioning axes, capability areas, seed companies, geographic scope, stage focus.
Read references/scoping-framework.md for the full framework.
For each of the 4 competitor levels, draft the scoping and search queries.
Definition: Products that solve the same problem for the same users in the same way.
Query design — describe the PRODUCT, not the problem:
Example queries (AI code review market):
Lookalike seeds: Use seed companies from market context + any the user names.
Discovery criteria (for Pass 2 if needed): Design 3-5 criteria from the capability areas in market context.
Definition: Products that solve the same problem but with a fundamentally different approach.
Query design — describe the PROBLEM, not the product:
Example queries (AI code review market):
Discovery criteria (for Pass 2 if needed): Focused on problem overlap, NOT product similarity.
Definition: Products that don't compete today but could expand into this market.
Three query sub-strategies:
A. Similar technology, different use case:
B. Same customers, different product:
C. Platform expansion risk:
Write 1 query per sub-strategy (2-3 total).
Lookalike: Run from direct competitors — finds similar-profile companies in adjacent spaces.
Definition: Entirely different ways users solve the underlying need.
Two parts:
Narrative section — ask user: "What do companies do instead of using a product like this? Think: hiring people, using general-purpose tools (Excel, email), outsourcing, or ignoring the problem."
Software-adjacent search — 1-2 queries for general-purpose tools that subsume the need:
Show the complete scoping plan:
Level: Direct Competitors
Definition: [...]
Known companies: [from user + seed list]
Semantic queries:
1. "[query]"
2. "[query]"
3. "[query]"
Lookalike seeds: [domains]
Discovery criteria (for Pass 2): [criteria]
Level: Indirect Competitors
...
Ask once: "Does this scoping look right? Any competitors or approaches I'm missing?"
If user confirms, proceed immediately to Phase B. Do not ask multiple follow-up questions.
Save to claude-code-gtm/vc-maps/{map-slug}/competitor_scoping.md.
Execute the search plan from Phase A. All Extruct operations use the extruct-api skill.
Step 0: Check for existing tables
Before running any searches, check if the user already has Extruct tables that cover this market:
extruct-api tables list.extruct-api tables get.This avoids duplicate work and saves Extruct credits when the user has already run a previous mapping session.
Step 1: Run semantic searches
For each level, run each query via extruct-api semantic search:
limit=100 per query (up to 200 for direct competitors if needed)Step 2: Run lookalike searches
For levels with seed companies, run extruct-api lookalike search:
limit=100Step 3: Merge and deduplicate
Per level:
Across levels:
Step 4: Create or extend tables, upload, and assess coverage
For levels where an existing table was reused from Step 0, upload only the new (deduplicated) domains that aren't already in the table. For levels without an existing table, create a new one:
{map-slug} — {level} competitorsextruct-api rows createThen present coverage assessment:
| Level | Semantic | Lookalike | After Dedup | Coverage |
|---|---|---|---|---|
| Direct | N | N | N | Sufficient/Thin/Gaps |
| Indirect | N | N | N | ... |
| Adjacent | N | N | N | ... |
| Substitute | N | -- | N | ... |
Coverage signals:
Auto-proceed logic:
Only run for levels where the user requests deeper coverage. Uses the extruct-api skill's deep-search commands.
Step 1: Design Discovery criteria
Based on what was found (and missing) in Pass 1, design criteria sets:
Step 2: Run Discovery tasks
Create deep-search tasks via extruct-api deep-search create.
Step 3: Poll until complete
Use extruct-api deep-search poll until status == "done" or is_exhausted == true.
Step 4: Fetch and integrate results
Fetch results via extruct-api deep-search results. Deduplicate against existing table for this level. Upload new companies to the level's existing table.
Step 5: Present updated counts
Show what Discovery added:
| Level | Before Discovery | New from Discovery | Total |
|---|---|---|---|
| {level} | N | +N | N |
Note any notable companies Discovery found that semantic search missed.
Before running expensive enrichment, validate that every company in the tables actually belongs in the target market. Semantic search returns false positives — companies with similar keywords but different markets.
Step 1: Add a relevance check column
Add a single select column to each table via extruct-api columns add:
{
"kind": "agent",
"name": "Market Relevance",
"key": "market_relevance",
"value": {
"agent_type": "research_reasoning",
"prompt": "Does this company operate in the {MARKET_DESCRIPTION} market? Check the company's website and product description. Return ONLY one label.",
"output_format": "select",
"labels": ["Yes — core market", "Partially relevant", "No — different market"]
}
}
Customize {MARKET_DESCRIPTION} from market_context.md (e.g., "AI-powered legal software in Brazil").
Step 2: Run relevance check and wait for completion
Run the relevance column via extruct-api tables run (scoped to relevance column only). Poll until complete. This is a cheap research_reasoning column — fast to run.
Step 3: Remove irrelevant companies
Fetch table data. For each row where market_relevance = "No — different market":
extruct-api rows deleteReport:
| Table | Before | Removed | After |
|---|---|---|---|
| Direct | N | -N | N |
| Indirect | N | -N | N |
| Adjacent | N | -N | N |
Companies marked "Partially relevant" stay — they may be indirect or adjacent competitors.
Design and run enrichment columns on the validated tables. All column operations use the extruct-api skill. Read the extruct-api skill's references/column-guide.md for column design rules.
Step 1: Select columns
See references/enrichment-columns-vc.md for pre-built column configs.
Standard 7 intelligence columns (applied to all tables):
Optional capability columns — only add if user requests deep analysis on direct competitors.
Present the column plan and proceed to create. Do not ask for confirmation unless the user has previously requested custom columns.
Step 2: Create columns
For each table, create confirmed columns via extruct-api columns add.
Step 3: Trigger enrichment
For each table, run via extruct-api tables run scoped to the new column IDs.
Report total cells queued.
Step 4: Monitor progress
Poll each table via extruct-api tables poll. Report completion percentage.
Step 5: Quality spot-check
After 50%+ completion on the direct competitors table, fetch 5 rows via extruct-api tables data and display a sample:
If quality issues: delete the column via extruct-api columns delete, adjust the prompt, recreate, re-run.
Step 6: Summarize enrichment results
Once enrichment completes, present a summary of key findings:
| Output | Path / Location |
|---|---|
| Scoping document | claude-code-gtm/vc-maps/{map-slug}/competitor_scoping.md |
| Direct competitors table | Extruct table (ID saved in scoping doc) |
| Indirect competitors table | Extruct table (ID saved in scoping doc) |
| Adjacent competitors table | Extruct table (ID saved in scoping doc) |
market-definitionnpx claudepluginhub extruct-ai/vc-skills --plugin vc-skillsMaps a startup's real competitive landscape by aggregating mentions from LinkedIn, Reddit, YouTube, Twitter, YC, SEC, and web search. Use before positioning or pain-mining work.
Analyzes competitive landscape for your product: identifies 5 direct competitors, profiles strengths/weaknesses/pricing/GTM, maps differentiation opportunities. Use for market research or briefs.
Identifies, categorises, and score-filters a competitor set for competitive benchmarking. Use when scoping who counts as a competitor before any scoring begins.