The Exa alternative
vsExa
typesearch vs Exa
Everything you use Exa for in news and web search — at a fifth of the price, with the exa-py and exa-js SDKs you already have.
Same job, 5× cheaper
Search
$1.40
Exa: $7−80%
Deep search
$2.40
Exa: $12–15−80–84%
Contents · per 1k pages
$0.20
Exa: $1−80%
What stays the same
Your SDK, your parameters, your response parsing. Here is how each Exa parameter maps.
| Exa parameter | Status | On typesearch |
|---|---|---|
| query, numResults | Same | Same. Up to 50 results. |
| type | Mapped | instant → Ultra · fast → Fast · auto, neural, keyword → Normal · deep → Deep |
| includeDomains, excludeDomains | Same | Same, up to 20. *.domain.com works too. |
| startPublishedDate, endPublishedDate | Same | Same. |
| includeText, excludeText | Mapped | Applied to title, standfirst and highlights. |
| contents.highlights | Same | Verbatim excerpts from verified results. |
| contents.text | Limited | A short excerpt, never the full page. |
| contents.summary | Not supported | We don’t write summaries. Use essentials instead. |
| /findSimilar, /contents | Same | Same endpoints, same shapes. |
What you gain
- A calibrated relevance probability on every result
- Top results read and verified before they’re ranked
- Typed questions answered per result, in the same call
- Tone, same-story dedupe and who-published-first
- Up to five queries per request
- Hard cost caps per request
When Exa is still the better fit
We’d rather you stay than churn in a month. Keep Exa for these:
- You need full page text for every result.
- You rely on people, company or research-paper indexes.
- You want the API itself to write answers or summaries.
Migration
The whole migration
One compatibility layer per provider: same parameters, same response shape, same errors. Point your official SDK at us and ship.
from exa_py import Exa-exa = Exa(api_key=EXA_API_KEY)+exa = Exa(api_key=TYPESEARCH_API_KEY, base_url="https://api.typesearch.ai/compat/exa")results = exa.search("lithium royalties in Chile", num_results=10, type="fast")similar = exa.find_similar(results.results[0].url, exclude_source_domain=True)pages = exa.get_contents([r.url for r in results.results], highlights=True)
beforeafter