Overview
Endpoint:POST https://api.exa.ai/search with "category": "company"
What it searches: 50M+ company pages including LinkedIn company profiles, official websites, and Crunchbase-style data. Semantic search over industry, funding stage, headcount, geography, and technology attributes. Natural language queries return relevance-ranked company results.
For creating lists or enriching over many companies at scale, use Websets.
Minimal Working Example
Parameter Restrictions
Thecompany category does not support the following parameters. Using them returns a 400 error:
| Unsupported Parameter | Workaround |
|---|---|
startPublishedDate | Not available. Use natural language (e.g. “founded after 2020”). |
endPublishedDate | Not available. |
excludeDomains | Not available. |
Supported Parameters
| Parameter | Type | Notes |
|---|---|---|
query | string | Natural language. Supports industry, geography, funding, headcount, technology, similarity. |
category | string | Must be "company". |
type | string | "auto" recommended. "deep" and "deep-reasoning" also work. |
numResults | integer | 1–100. Default 10. |
contents | object | text, highlights, summary, all nested under contents. |
Structured Entity Metadata
Company Search returns structured company metadata inentities for result rows that resolve to a company. Each company entity has type: "company", a stable id, a schema version, and a properties object with company profile fields.
| Field | Type | Notes |
|---|---|---|
entities[].id | string | Stable company entity identifier. |
entities[].type | string | "company". |
entities[].version | integer | Entity schema version. |
properties.name | string | null | Company name. |
properties.foundedYear | integer | null | Year the company was founded. |
properties.description | string | null | Short company description. |
properties.workforce | object | null | Workforce details. Currently includes total, the estimated employee count. |
properties.headquarters | object | null | address, city, postalCode, and country. |
properties.financials | object | null | revenueAnnual, fundingTotal, and fundingLatestRound, all in USD when present. |
properties.financials.fundingLatestRound | object | null | name, date, and amount for the most recent funding round. |
properties.webTraffic | object | null | visitsMonthly, countryRank, avgDurationSeconds, and monthly history. |
properties.webTraffic.history[] | object | Historical monthly visits with value, dateFrom, and dateTo. |
Query Patterns
Named lookup:Common Mistakes
| Wrong | Correct |
|---|---|
excludeDomains: [...] with category: "company" | Remove excludeDomains. Not supported for company. Returns 400. |
startPublishedDate: "2023-01-01" with category: "company" | Remove date filters. Use natural language like “founded after 2023” in query. |
Missing category: "company" | Without category, the search runs against the general web index. Always include "category": "company". |
Patterns and Gotchas
- Always set
category: "company". Without it, you search the general web index and won’t get company-specific results. - Natural language handles what filters can’t. Since date/text/exclude filters aren’t supported, put all constraints in your query: “Series A fintech companies in Europe with 50-200 employees founded after 2020”.
- Use
highlightsfor agent workflows. Company pages are long. Highlights extract key details (industry, funding, headcount) efficiently. - Use
entitiesfor typed metadata. Read founded year, workforce, headquarters, financials, and web traffic fromresults[].entities[].properties; usetextorhighlightsfor supporting snippets. - Similarity queries work well. “Companies like X” and “competitors of X” leverage semantic understanding of the company index.
- Python SDK uses snake_case.
numResults→num_results,maxCharacters→max_characters. - Combine with deep search for custom enrichment. Use
type: "deep"withoutputSchemawhen you need fields outside the built-in company entity schema.

