--- name: company-research description: Company research using Exa. Finds company info, competitors, news, financials, LinkedIn profiles, builds company lists. Use when researching companies, doing competitor analysis, market research, or building company lists. context: fork --- # Company Research ## Tool Selection (Critical) Two Exa surfaces, two jobs: - **Exa Agent** (`agent_run`) — the default for company research. Use it for deep dives, competitor analysis, multi-angle research (product + funding + news + people), and building company lists. One Agent run handles query decomposition, multi-step searching, and synthesis internally — do not orchestrate many manual searches for work an Agent run covers. - **`web_search_advanced_exa`** — quick, low-latency lookups: a fast `category: "company"` discovery pass, a single news check, or finding a homepage. Do NOT use other Exa tools. ## Deep Dives and Lists: Exa Agent Agent runs may stream to completion in one call. If a run outlives the MCP call window, continue waiting with its returned run ID. 1. Call `agent_run` with a natural-language `query` and, when you want repeatable structure, an `outputSchema` (bound arrays with `maxItems`). 2. If it returns `status: "running"` with a `runId`, call `agent_run` again with only that `runId` until `outputReady` is true. 3. Read `output.text` or `output.structured`, plus `output.grounding` citations, from the `agent_run` result. Useful inputs: `systemPrompt` (source preferences, dedup rules), `input.exclusion` (companies to avoid), `previousRunId` (a new follow-up run based on a completed run), `effort` (`"low"` default; `"auto"` or `"high"` for more depth). ### Example: company deep dive ``` agent_run { "query": "Research Anthropic: product lines, funding history and valuation, key executives, main competitors, and notable news from the last 6 months.", "effort": "auto", "outputSchema": { "type": "object", "properties": { "overview": { "type": "string" }, "funding": { "type": "array", "maxItems": 10, "items": { "type": "object", "properties": { "round": { "type": "string" }, "amount": { "type": "string" }, "date": { "type": "string" } }, "required": ["round"] } }, "competitors": { "type": "array", "maxItems": 10, "items": { "type": "string" } }, "key_people": { "type": "array", "maxItems": 10, "items": { "type": "object", "properties": { "name": { "type": "string" }, "title": { "type": "string" } }, "required": ["name", "title"] } } }, "required": ["overview", "competitors"] } } ``` ### Example: build a company list ``` agent_run { "query": "Find 25 AI infrastructure startups headquartered in San Francisco. For each, include what they build and their latest funding stage.", "effort": "auto", "outputSchema": { "type": "object", "properties": { "companies": { "type": "array", "maxItems": 25, "items": { "type": "object", "properties": { "name": { "type": "string" }, "website": { "type": "string", "format": "uri" }, "description": { "type": "string", "description": "in 12 words or less" }, "funding_stage": { "type": "string" } }, "required": ["name", "website", "description"] } } }, "required": ["companies"] } } ``` ## Quick Lookups: Advanced Search Use `web_search_advanced_exa` when a single fast search answers the question. Tune `numResults` to intent (a few → 10-20; comprehensive → 50-100; specified → match it). ### Categories - `company` → homepages, rich metadata (headcount, location, funding, revenue) - `news` → press coverage, announcements - `people` → public professional profiles - No category (`type: "auto"`) → general web results, broader context Default to `type: "auto"`. Prefer `highlights` for content extraction; do not stack text + highlights + summary in one call. ### Category-Specific Filter Restrictions Unsupported category/filter combinations return 400 errors: - `category: "company"` does not support published-date or crawl-date filters, `excludeDomains`, or exact-text filters; express constraints like "founded after 2020" in the query instead - `category: "people"` does not support published-date, crawl-date, domain, or exact-text filters; put all filtering in the natural-language query - Without a category (or with `news`), domain and date filters work fine ### Examples Discovery pass: ``` web_search_advanced_exa { "query": "AI infrastructure startups San Francisco", "category": "company", "numResults": 20, "type": "auto" } ``` News check: ``` web_search_advanced_exa { "query": "Anthropic AI safety", "category": "news", "numResults": 15, "startPublishedDate": "2025-01-01" } ``` Key people: ``` web_search_advanced_exa { "query": "VP Engineering AI infrastructure", "category": "people", "numResults": 20 } ``` ## Token Isolation Never dump raw search results into main context. Spawn Task agents for Advanced Search calls; for Agent runs, go straight from `output.structured` to the final answer. ## Browser Fallback Fall back to Claude in Chrome only when content is auth-gated or requires JavaScript rendering. ## Output Format Return: 1) Results (structured list; one company per row) 2) Sources (URLs; 1-line relevance each — use `output.grounding` from Agent runs) 3) Notes (uncertainty/conflicts) ## References - Exa Agent guide: https://docs.exa.ai/reference/agent-api-guide - Company Search reference: https://docs.exa.ai/reference/verticals/company-for-coding-agents - Exa MCP setup: https://docs.exa.ai/reference/exa-mcp - Full docs for LLMs: https://docs.exa.ai/llms.txt