Documentation Index
Fetch the complete documentation index at: https://exa.ai/docs/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Endpoint: POST https://api.exa.ai/search with "category": "people"
What it searches: 1B+ public professional profiles aggregated from LinkedIn, company pages, and other sources. Index refreshed weekly. Semantic search over structured attributes (role, skill, company, location, seniority). Natural language queries return relevance-ranked people results via API.
For creating lists or enriching over many people at scale, use Websets.
Minimal Working Example
curl -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"query": "senior ML engineers at fintech companies", "category": "people", "contents": {"highlights": {"maxCharacters": 4000}}}'
from exa_py import Exa
exa = Exa(api_key="YOUR_API_KEY")
result = exa.search("senior ML engineers at fintech companies", category="people", contents={"highlights": {"max_characters": 4000}})
import Exa from "exa-js";
const exa = new Exa("YOUR_API_KEY");
const result = await exa.search("senior ML engineers at fintech companies", { category: "people", contents: { highlights: { maxCharacters: 4000 } } });
Parameter Restrictions
The people category does not support the following parameters. Using them returns a 400 error:
| Unsupported Parameter | Workaround |
|---|
startPublishedDate | Not available. People profiles don’t have publish dates. |
endPublishedDate | Not available. |
excludeDomains | Not available. |
includeDomains | Not available. |
Supported Parameters
| Parameter | Type | Notes |
|---|
query | string | Natural language. Supports role, skill, company, location, seniority. |
category | string | Must be "people". |
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. |
Query Patterns
By role and company:
"product managers at Microsoft"
"enterprise sales reps from Salesforce in EMEA"
By skill set:
"machine learning engineer with PyTorch experience"
"full-stack developer React and Node.js"
By seniority and location:
"VP Engineering AI infrastructure San Francisco"
"CTO at fintech startups in New York"
Composite:
"senior data scientists at Series B healthcare companies in Boston"
"DevOps engineers with Kubernetes experience at Fortune 500 companies"
Common Mistakes
| Wrong | Correct |
|---|
excludeDomains: [...] with category: "people" | Remove excludeDomains. Not supported for people. Returns 400. |
startPublishedDate: "2025-01-01" with category: "people" | Remove date filters. Not supported for people. Returns 400. |
Missing category: "people" | Without category, the search runs against the general web index, not the people index. Always include "category": "people". |
Patterns and Gotchas
- Always set
category: "people". Without it, you search the general web index and won’t get structured people results.
- Use
highlights for agent workflows. People profiles are dense. Highlights extract the most relevant career details without flooding your context window.
- Natural language is the only filter. Since date filters, text filters, and domain filters aren’t supported, encode all constraints in your query string.
- Python SDK uses snake_case.
numResults → num_results, maxCharacters → max_characters.
- Combine with deep search for enrichment. Use
type: "deep" with outputSchema to extract structured fields (name, title, company, location) from people results.