Exa vs Parallel vs Keenable: which search API to pick
Exa vs Parallel vs Keenable compared on latency, price per 1,000 searches, result caps, full content and filters, with a decision table for agent builders.
Exa, Parallel and Keenable are all web search APIs built for programs rather than people, and they overlap more than they differ. Parallel is the cheapest and fastest at the low end, Exa has the deepest semantic search and the only true full-page content, and Keenable offers a flat price with a realtime index option. Through Mux you can call all three with one key and let the request fall back from one to the next, so the choice is often "in what order" rather than "which one".
This page compares the three as they appear through Mux, using the list prices Mux passes through. Each vendor also sells directly, and at very high volume with a negotiated contract a direct relationship can be the better deal.
The short version#
| Exa | Parallel | Keenable | |
|---|---|---|---|
| Cheapest tier (per 1k requests, 10 results) | $4.00 (exa/instant) |
$1.00 (parallel/turbo, parallel/fast) |
$4.00 (keenable/pro, keenable/realtime) |
| Default-quality tier | $7.00 (exa/auto, ~1 s) |
$5.00 (parallel/basic, ~1 s) |
$4.00 (keenable/pro, ~700 ms) |
| Top tier | $12.00 (exa/deep, ~5 s) |
$5.00 (parallel/advanced, ~3 s) |
same as above |
| Fastest tier latency | ~300 ms | ~200 ms | ~700 ms |
| Extra results beyond 10 | $1.00 per 1k results | $1.00 per 1k results | free |
| Max results per request | 100 | 50 | 50 |
content: "full" |
full page text | joined excerpts | not supported |
published_before |
yes | not applied | yes |
include_domains |
native | native | one native, rest filtered by Mux |
| Provider options via Mux | category, userLocation, moderation, includeText, excludeText |
max_chars_total, client_model, advanced_settings.* |
none |
Prices are per 1,000 requests. One exa/auto search is $0.007, one parallel/fast search is $0.001, one keenable/pro search is $0.004. See /docs/pricing for the billing rules.
| Model | Per 1,000 requests | Included results | Extra result | Latency |
|---|---|---|---|---|
| exa/instant Exa instant, lowest-latency neural search | $4.00 | 10 | +$1.00 / 1k | ~300 ms |
| exa/fast Exa fast | $7.00 | 10 | +$1.00 / 1k | ~500 ms |
| exa/auto Exa auto (default, best general quality) | $7.00 | 10 | +$1.00 / 1k | ~1 s |
| exa/deep Exa deep multi-query search | $12.00 | 10 | +$1.00 / 1k | ~5 s |
| parallel/turbo Parallel turbo, ~200ms | $1.00 | 10 | +$1.00 / 1k | ~200 ms |
| parallel/fast Parallel fast, <1s | $1.00 | 10 | +$1.00 / 1k | ~800 ms |
| parallel/basic Parallel basic | $5.00 | 10 | +$1.00 / 1k | ~1 s |
| parallel/advanced Parallel advanced, highest quality excerpts | $5.00 | 10 | +$1.00 / 1k | ~3 s |
| keenable/pro Keenable pro index | $4.00 | 10 | none | ~700 ms |
| keenable/realtime Keenable realtime index | $4.00 | 10 | none | ~700 ms |
Latency tiers#
Each provider exposes several speeds, and Mux names them provider/variant.
- Parallel spans the widest range:
parallel/turboat roughly 200 ms,parallel/fastaround 800 ms,parallel/basicaround 1 s andparallel/advancedaround 3 s for higher-quality excerpts. - Exa goes from
exa/instantat roughly 300 ms toexa/deep, a multi-query search that takes about 5 s.exa/autoat about 1 s is the general-purpose default. - Keenable has two variants,
proandrealtime, both around 700 ms. They differ by index, not speed.
These are typical figures, not guarantees. The usage.latency_ms field in every Mux response tells you what you actually got.
Price per 1,000 requests#
Parallel's two $1.00 tiers are the floor. Nothing else in the table comes within a factor of four. If your agent does many cheap lookups where a decent snippet is enough, parallel/fast or parallel/turbo is where to start.
Keenable's $4.00 is flat: no extra charge for results past 10, so a 50-result Keenable request still costs $0.004. On Exa and Parallel the same 50 results add $0.04 in extra-result charges, which is more than the base price.
Exa is the most expensive per request, and exa/deep at $12.00 is the most expensive model Mux offers. You pay for it when the query is hard and a single pass will not do.
Result caps and full content#
Exa is the only provider that returns up to 100 results per request. Parallel and Keenable stop at 50. Mux caps max_results to the model's limit rather than erroring.
content: "full" behaves differently on each:
- Exa returns the full page text in
results[].content. - Parallel returns its excerpts joined together, which is longer than a snippet but not the whole page.
- Keenable returns
content: null. If your pipeline needs page text, do not put a Keenable model first.
Date and domain filters#
All three accept published_after and include_domains / exclude_domains. Two caveats: Parallel does not apply published_before, and Keenable natively supports one domain. Mux enforces domain filters on the response regardless of provider, so results will never violate your filter, but on Keenable a long include_domains list may leave you with fewer results than you asked for.
Provider options#
Mux passes through an allow-list of provider-specific options. Exa gets category, userLocation, moderation, includeText and excludeText. Parallel gets max_chars_total, client_model and advanced_settings for excerpts and location. Keenable has none. If a workflow depends on one of these, that decides the provider for you.
Typical fit#
| Workload | Start with | Why |
|---|---|---|
| High-volume, cheap lookups (entity checks, URL discovery) | parallel/fast |
$1.00 per 1k, ~800 ms |
| Lowest latency in a chat loop | parallel/turbo or exa/instant |
~200 to 300 ms |
| Semantic or research queries | exa/auto, then exa/deep |
neural search, 100 results, full text |
| Full page text for RAG | exa/auto with content: "full" |
only provider returning whole pages |
| Many results per query at fixed cost | keenable/pro |
no extra-result charge up to 50 |
| Very recent pages | keenable/realtime |
realtime index |
| Highest-quality excerpts without full pages | parallel/advanced |
$5.00, ~3 s |
Use fallbacks instead of choosing#
The models field takes an ordered list of up to five model ids. Mux tries them in order, refunds any failed attempt, and bills you only for the model that answered. This means you can lead with the cheap option and keep a stronger one behind it.
curl -X POST https://api.getmux.io/v1/search \
-H "Authorization: Bearer $MUX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "postgres logical replication slot lag",
"models": ["parallel/fast", "exa/auto", "keenable/pro"],
"max_results": 10,
"published_after": "2025-01-01"
}'The response's attempts array shows what happened at each step, so you can see how often the fallback fires. The default "auto" model is itself a fallback chain: parallel/fast, then exa/auto, then keenable/pro.
One exception to the refund rule: if a provider times out at 15 s, you still pay that model's base price before the next one is tried.
When to go direct#
Pick a vendor directly if you need something Mux does not expose, such as a crawl or contents endpoint, an answer endpoint, or options outside the allow-list. At sustained high volume with a negotiated contract, a direct relationship may also beat list price. Mux charges no per-request markup, only a 5.5% fee when you buy credits, and with BYOK you can keep your own vendor keys and still use the fallback chain.
FAQ#
Which of Exa, Parallel and Keenable is cheapest?#
Parallel, at $1.00 per 1,000 requests for parallel/turbo and parallel/fast. Exa's cheapest tier is exa/instant at $4.00 and Keenable's two variants are $4.00. Keenable is cheapest when you regularly ask for 30 to 50 results, because it does not charge for extra results.
Which one returns full page content?#
Only Exa returns full page text with content: "full". Parallel returns joined excerpts and Keenable returns no content field. If you need whole pages, put an Exa model first in models.
Do date and domain filters work on all three?#
Mostly. All three honor published_after and domain filters. Parallel ignores published_before, and Keenable supports one domain natively with Mux filtering the rest after the fact.
Can I use my own Exa, Parallel or Keenable key through Mux?#
Yes. Store it with PUT /v1/provider-keys/{provider} and requests to that provider are billed to you by the vendor. The Mux fee is waived for the first 1,000,000 BYOK requests per calendar month, then 5% of list price.
To try the three side by side with one key, start at the quickstart.
Also available as markdown for your coding assistant.
More compare
Tavily alternatives: 7 web search APIs for AI agents
A neutral look at Tavily alternatives for AI agents, covering Exa, Parallel, Keenable, Brave, Serper, You.com and Sonar, plus when to stay on Tavily.
Web search API for AI agents: a buyer's guide
What to look for in a web search API for AI agents, from latency and cost per call to filters and failure handling, with a worked cost example per 1,000 runs.