<!-- twin of https://specstream.ai/exa-highlights -->
# Exa highlights: the same call at $1 per 1,000, pages read live

Compared on Nov 12, 2026. The page: https://specstream.ai/exa-highlights

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](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=exa-highlights) page.

[Get an API key](https://specstream.ai/signup?src=alternatives-exa-highlights&utm_source=alternatives-md&utm_campaign=exa-highlights&returnTo=%2Fworkspace%2Fsearch%3Froute%3Dexa) 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](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=exa-highlights) 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](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=exa-highlights)'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](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=exa-highlights) 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 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

### What are Exa highlights?

Passages of each search result that are relevant to your query, returned in `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?

Nothing on top of the search for the first 10 results: $4 per 1,000 requests on `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?

A research preview that sets how much text it takes from each result by what the query needs, and in Exa's evaluations cut tokens by an average of 95% against full page content. A request turns it on with `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?

Yes, for $1 per 1,000 searches. `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?

Send `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?

Yes, with one line changed: the base address. The route accepts `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?

The median answer takes 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.

## Sources

SpecStream wrote this page. Each rival figure comes from that company's own page.

- [Exa highlights guide](https://exa.ai/docs/search/highlights.md), read Nov 12, 2026
- [Exa pricing](https://exa.ai/docs/admin/pricing.md), read Nov 12, 2026
- [Exa changelog](https://exa.ai/docs/changelog.md), read Nov 12, 2026
- [Exa pricing update](https://exa.ai/docs/changelog/pricing-update.md), read Nov 12, 2026
- [Exa Dynamic Highlights](https://exa.ai/blog/dynamic-highlights), read Nov 12, 2026
- [Exa Search API reference](https://exa.ai/docs/reference/search.md), read Nov 12, 2026
- [Exa FAQ, index size](https://exa.ai/docs/admin/faqs.md), read Nov 12, 2026
- [Tavily credits and pricing](https://docs.tavily.com/documentation/api-credits.md), read Nov 9, 2026
- [Brave Search API](https://brave.com/search/api/), read Nov 9, 2026
- [Parallel pricing](https://parallel.ai/pricing), read Nov 9, 2026
- [Firecrawl pricing](https://www.firecrawl.dev/pricing), read Nov 9, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 9, 2026
- [SpecStream pricing](https://specstream.ai/pricing), read Nov 9, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 9, 2026
- [SpecStream data](https://specstream.ai/data), read Nov 9, 2026
- [SpecStream signals](https://specstream.ai/signals), read Nov 9, 2026
