Exa highlights
The same call at $1 per 1,000, pages read live.
Exa highlights are the passages of each result that answer your query, returned in results[].highlights. They come with a search: $4 per 1,000 requests on lite and $7 on auto. Dynamic Highlights is a research preview that needs a beta header.
SpecStream answers the same call. Change https://api.exa.ai to https://api.specstream.ai/exa, send a SpecStream key in x-api-key, and keep contents.highlights in the body. The search costs $1 per 1,000, with highlights and text in that price.
It is the most accurate web search API in the world: 97.9 F-score on all 1,000 SimpleQA Verified questions (978 correct) and 64.0 item F1 on all 200 WideSearch tasks, on the benchmarks page.
New accounts get $10 of credit, no card. It covers 10,000 searches.
SpecStream and Exa highlights side by side
| SpecStream | Exa | |
|---|---|---|
| What you change | One line. The base address https://api.specstream.ai/exa in place of https://api.exa.ai, and a SpecStream key in x-api-key or as a Bearer token. In exa-py: Exa(api_key=..., base_url="https://api.specstream.ai/exa") | POST /search with contents.highlights, and an Exa key in x-api-key or as a Bearer token |
| What `highlights` returns | results[].highlights, a list with the result's snippet for your query, in Exa's shape. With contents.text, text holds the text of the page closest to your query, up to about 3,500 characters, read when your call arrives | Extractive passages from each result that are relevant to the query, in results[].highlights. Exa reports that 500 characters of highlights match the accuracy of the first 8,000 characters of page text, with 16x fewer tokens |
| Price per 1,000 searches with highlights | $1 for up to 10 results on lite, auto, fast and instant, with highlights and text in that price, and $5 on a deep type. numResults: 100 costs $0.0118 a call | $4 on lite and $7 on auto for up to 10 results, with text and highlights of those results included, plus $1 per 1,000 results above 10 |
| How much text each result carries | contents.text.maxCharacters cuts text to the size you set, so one field gives your model the passage and its limit. highlights.maxCharacters and highlights.query are accepted as sent | highlights: true lets Exa choose how much text to return from each result. maxCharacters sets a fixed limit per page |
| Dynamic Highlights | highlights: {"dynamic": true} and the Exa-Beta header are accepted, so a request written for the preview runs without an edit. The reply keeps the results[].highlights shape | A research preview. dynamic: true needs the header Exa-Beta: dynamic-highlights-2026-08-28. In Exa's evaluations it cut tokens by an average of 95% against full page content |
| Where the text is read | From the live page when your call arrives, on every search type | lite serves page content from Exa's cache and never fetches a page live |
| The reply | Exa's JSON: requestId, results[] with id, url, title, publishedDate, and text and highlights when asked, searchTime and costDollars.total | results[] with the title, URL, published date and author of each result, and its text, highlights or summary when contents asks for them, with costDollars |
| Known URLs | POST /exa/contents answers Exa's Contents call with the text of up to 20 pages, PDF, Word and Excel files included, at $0.80 per 1,000 pages. A page with no text is not charged | /contents costs $1 per 1,000 pages per content type, so one page with text and highlights counts as two |
| What answers the call | The whole live web, read at the moment of the call. 97.9 F-score on all 1,000 SimpleQA Verified questions (978 correct) and 64.0 item F1 on all 200 WideSearch tasks | Exa's own index, which tracks over 2 trillion URLs and serves 100 billion pages as of October 2026 |
| Free to start | $10 of credit, no card. That is 10,000 searches, and credit you buy never expires | $10 in credits, up to 2,500 Lite searches, reset on the first of every month |
| Every match as structured rows | Deep Search: a request in plain words returns every match on the live web as rows that meet each condition you wrote, at 5¢, 15¢ or $1 a row, plus 5¢ for an email and 15¢ for a phone. The most a run can cost is quoted before it starts | Agent: $0.012 a request at minimal effort up to $1.00 at xhigh |
Why teams that use Exa highlights move to SpecStream
The switch is one line
Your code keeps its body, contents.highlights included, and its parser. The address changes, and the key.
# Before: Exa, $4 per 1,000 on lite and $7 on auto
curl -X POST https://api.exa.ai/search \
-H "x-api-key: $EXA_API_KEY" -H "Content-Type: application/json" \
-d '{"query": "latest chip export rules", "numResults": 5, "contents": {"highlights": true, "text": {"maxCharacters": 1000}}}'
# After: SpecStream, $1 per 1,000, each page read live
curl -X POST https://api.specstream.ai/exa/search \
-H "x-api-key: $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"query": "latest chip export rules", "numResults": 5, "contents": {"highlights": true, "text": {"maxCharacters": 1000}}}'Each result comes back with id, url, title and publishedDate, highlights as a list and text cut to the 1,000 characters the body asks for. searchTime and costDollars.total close the reply, as on Exa.
Highlights and text in one price of $1 per 1,000
Exa includes text and highlights for the first 10 results of a search that costs $4 per 1,000 requests on lite and $7 on auto, and each result above 10 adds $1 per 1,000. On /contents each content type is billed, so 100,000 pages with text and highlights cost $200. SpecStream charges $1 per 1,000 searches of up to 10 results with both fields in that price, and numResults: 100 costs $0.0118.
A passage sized for the context window
Highlights exist to keep search results small in an agent's context. Exa reports that highlights cut search tokens by 5x on average against full text. On SpecStream the same control is one number: contents.text.maxCharacters. text starts from the part of the page closest to your query, in the page's order, one list item, paragraph or table row a line, and stops at the limit you set. With no limit it runs to about 3,500 characters.
Read from the live page
Exa's lite type serves page content from its cache and never fetches a page live. SpecStream reads each page at the moment of your call, whichever type you send. A result whose page is not read in time keeps its snippet in text, so no result is dropped.
A Dynamic Highlights request runs as it is
Dynamic Highlights is a research preview on Exa: dynamic: true inside contents.highlights, with the header Exa-Beta: dynamic-highlights-2026-08-28. SpecStream's route accepts the object and the header, and answers in the same results[].highlights shape, so code written for the preview needs no second path.
The most accurate web search API in the world
On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the benchmarks page.
How fast the route answers
The fast search behind the Exa route had a median of 0.82 seconds at one search a second and 1.07 seconds at 20 searches a second, measured on production on November 9, 2026, with 718 of 720 searches answered. There is no limit per key and no daily limit.
Pages, documents and rows on the same key
POST /exa/contents answers Exa's Contents call, and exa.get_contents(urls) works with the same base_url: up to 20 pages a call, each at the Extract API's $0.80 per 1,000 pages, PDF, Word and Excel included. When you need every match on the web in place of a results page, Deep Search returns structured rows at 5¢, 15¢ or $1 a row, under a maximum you approve before it runs.
Other Exa highlights alternatives
Tavily
A search API for agents, billed in credits: $0.008 a credit pay as you go, 1 credit for a basic search and 2 for an advanced one, with 1,000 free credits a month. SpecStream answers Tavily's call too, at https://api.specstream.ai/tavily/search, for $0.001 a search.
Brave Search API
A search API on Brave's own index. Search costs $5 per 1,000 requests, with $5 in free credits every month and 50 queries per second. SpecStream answers Brave's /res/v1/web/search call on the same path, at $1 per 1,000 searches of up to 10 results.
Parallel
Separate Search, Extract, Task, FindAll and Monitor APIs, each priced by its own unit. Search starts at $1 per 1,000 requests. On SpecStream one request in plain words covers the search, the reading and the finished rows, under a maximum you approve.
Firecrawl
Search, Scrape and Crawl endpoints billed in credits. The Hobby plan is $19 a month, and a search costs 2 credits per 10 results. SpecStream bills a search at $0.001 and a page read at $0.0008, and a page with no text is not charged.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to switch a highlights call to SpecStream
1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 10,000 searches.
2. Set the base address to https://api.specstream.ai/exa where your code has https://api.exa.ai. In exa-py that is base_url.
from exa_py import Exa
exa = Exa(api_key=SPECSTREAM_KEY, base_url="https://api.specstream.ai/exa")
reply = exa.search(
"latest chip export rules",
num_results=5,
contents={"highlights": True, "text": {"max_characters": 1000}},
)
for result in reply.results:
print(result.url, result.highlights, result.text)3. Leave the rest. query, numResults, includeDomains, excludeDomains, startPublishedDate, endPublishedDate, contents.highlights and contents.text work as before. A call of up to 10 results is one search at $0.001, and costDollars.total shows what each call cost.
4. Where your model needs more than the snippet, read text and set maxCharacters to the budget you gave highlights. The key carries the spending limit you give it.
Frequently asked questions
Something we didn't answer? Talk to a human
What are Exa highlights?
results[].highlights when the request sends contents.highlights. Exa reports that 500 characters of highlights match the accuracy of the first 8,000 characters of page text, with 16x fewer tokens.How much do Exa highlights cost?
lite and $7 on auto, plus $1 per 1,000 results above 10. On /contents, highlights cost $1 per 1,000 pages, and text on the same page is billed as a second content type. SpecStream answers the search call for $1 per 1,000 with highlights and text included.What is Exa Dynamic Highlights?
dynamic: true in contents.highlights and the header Exa-Beta: dynamic-highlights-2026-08-28. The reply has the same results[].highlights shape.Does SpecStream return highlights on Exa's call?
POST https://api.specstream.ai/exa/search with contents.highlights returns highlights on each result as a list with the result's snippet, and contents.text adds the text of the page closest to your query, up to about 3,500 characters.How do I limit the text each result returns?
contents.text with maxCharacters, for example 1,000. text is cut to that size on every result, and without a limit it runs to about 3,500 characters. exa-py sends max_characters, which the route reads the same way.Does Dynamic Highlights code run on SpecStream?
highlights: {"dynamic": true} and the Exa-Beta header, and each result carries highlights in the shape Exa's preview returns. A fast type costs $1 per 1,000 searches and a deep type $5.How fast does the route answer?
Sources
SpecStream wrote this page. Each rival figure comes from that company's own page.
- Exa highlights guideexa.ai/docs/search/highlights.md, read Nov 12, 2026
- Exa pricingexa.ai/docs/admin/pricing.md, read Nov 12, 2026
- Exa changelogexa.ai/docs/changelog.md, read Nov 12, 2026
- Exa pricing updateexa.ai/docs/changelog/pricing-update.md, read Nov 12, 2026
- Exa Dynamic Highlightsexa.ai/blog/dynamic-highlights, read Nov 12, 2026
- Exa Search API referenceexa.ai/docs/reference/search.md, read Nov 12, 2026
- Exa FAQ, index sizeexa.ai/docs/admin/faqs.md, read Nov 12, 2026
- Tavily credits and pricingdocs.tavily.com/documentation/api-credits.md, read Nov 9, 2026
- Brave Search APIbrave.com/search/api/, read Nov 9, 2026
- Parallel pricingparallel.ai/pricing, read Nov 9, 2026
- Firecrawl pricingfirecrawl.dev/pricing, read Nov 9, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 9, 2026
- SpecStream pricingspecstream.ai/pricing, read Nov 9, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 9, 2026
- SpecStream dataspecstream.ai/data, read Nov 9, 2026
- SpecStream signalsspecstream.ai/signals, read Nov 9, 2026




