Claude-skill-registry company-research
Company research using Exa search. Finds company info, competitors, news, tweets, financials, LinkedIn profiles, builds company lists.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/company-search" ~/.claude/skills/majiayu000-claude-skill-registry-company-research && rm -rf "$T"
manifest:
skills/data/company-search/SKILL.mdtags
source content
Company Research
Tool Restriction (Critical)
ONLY use
web_search_advanced_exa. Do NOT use web_search_exa or any other Exa tools.
Token Isolation (Critical)
Never run Exa searches in main context. Always spawn Task agents:
- Agent runs Exa search internally
- Agent processes results using LLM intelligence
- Agent returns only distilled output (compact JSON or brief markdown)
- Main context stays clean regardless of search volume
Dynamic Tuning
No hardcoded numResults. Tune to user intent:
- User says "a few" → 10-20
- User says "comprehensive" → 50-100
- User specifies number → match it
- Ambiguous? Ask: "How many companies would you like?"
Query Variation
Exa returns different results for different phrasings. For coverage:
- Generate 2-3 query variations
- Run in parallel
- Merge and deduplicate
Categories
Use appropriate Exa
category depending on what you need:
→ homepages, rich metadata (headcount, location, funding, revenue)company
→ press coverage, announcementsnews
→ social presence, public commentarytweet
→ LinkedIn profiles (public data)people- No category (
) → general web results, deep dives, broader contexttype: "auto"
Start with
category: "company" for discovery, then use other categories or no category with livecrawl: "fallback" for deeper research.
Category-Specific Filter Restrictions
When using
category: "company", these parameters cause 400 errors:
/includeDomainsexcludeDomains
/startPublishedDateendPublishedDate
/startCrawlDateendCrawlDate
When searching without a category (or with
news), domain and date filters work fine.
Universal restriction:
includeText and excludeText only support single-item arrays. Multi-item arrays cause 400 errors across all categories.
Public LinkedIn via Exa:
category: "people", no other filters.
Auth-required LinkedIn → use Claude in Chrome browser fallback.
Browser Fallback
Auto-fallback to Claude in Chrome when:
- Exa returns insufficient results
- Content is auth-gated
- Dynamic pages need JavaScript
Models
- haiku: fast extraction (listing, discovery)
- opus: synthesis, analysis, browser automation
Examples
Discovery: find companies in a space
web_search_advanced_exa { "query": "AI infrastructure startups San Francisco", "category": "company", "numResults": 20, "type": "auto" }
Deep dive: research a specific company
web_search_advanced_exa { "query": "Anthropic funding rounds valuation 2024", "type": "deep", "livecrawl": "fallback", "numResults": 10, "includeDomains": ["techcrunch.com", "crunchbase.com", "bloomberg.com"] }
News coverage
web_search_advanced_exa { "query": "Anthropic AI safety", "category": "news", "numResults": 15, "startPublishedDate": "2024-01-01" }
LinkedIn profiles
web_search_advanced_exa { "query": "VP Engineering AI infrastructure", "category": "people", "numResults": 20 }
Output Format
Return:
- Results (structured list; one company per row)
- Sources (URLs; 1-line relevance each)
- Notes (uncertainty/conflicts)