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.md
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:

  • company
    → homepages, rich metadata (headcount, location, funding, revenue)
  • news
    → press coverage, announcements
  • tweet
    → social presence, public commentary
  • people
    → LinkedIn profiles (public data)
  • No category (
    type: "auto"
    ) → general web results, deep dives, broader context

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:

  • includeDomains
    /
    excludeDomains
  • startPublishedDate
    /
    endPublishedDate
  • startCrawlDate
    /
    endCrawlDate

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.

LinkedIn

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:

  1. Results (structured list; one company per row)
  2. Sources (URLs; 1-line relevance each)
  3. Notes (uncertainty/conflicts)