Exa vs Google search results: semantic discovery or ranking truth
Exa and Google search data solve different problems. Exa is a search engine for machines: its own index, queried by meaning, returning pages plus their text in one call. It is strong when you need to discover relevant documents or entities, such as companies like a given one or papers on a narrow topic. Google SERP data is an observation of what Google shows people for a query, in a country, city and device. It is the only right answer when the question involves Google’s ranking, its SERP features or its AI Overview.
The rule of thumb: if the output of your job is a set of documents, start with Exa. If the output is a fact about Google, start with a SERP API. Vendor facts below were checked on 2026-09-17 and are linked. For a wider field of agent search tools, see best search APIs for AI agents.
What each one is
Exa describes itself on its homepage as “The world’s data for AI agents”, and says it can “crawl billions of documents per day”. Queries run against Exa’s own index with search types from instant to deep-reasoning, and a single call can also return page contents.
A Google SERP API runs the query on Google from a chosen market and returns the results page as JSON. This API’s POST /v1/monitor/google returns organicResults, ads, peopleAlsoAsk, relatedSearches, localResults, knowledgeGraph, shoppingCards, peopleAreSaying and, on request, the aioverview. There is no stored index: each request returns Google’s current results.
Google’s own route to full-web results is closing: the Custom Search JSON API overview, checked 2026-09-17, says it is closed to new customers, with existing customers given until January 1, 2027 to move.
Output compared field by field
| Need | Exa /search |
Google SERP (this API) |
|---|---|---|
| Result identity | results[].title, url, id, favicon, image |
organicResults[].title, link, displayedLink, position, page |
| Position meaning | Exa’s relevance order | Google’s rank on the page, 1-indexed |
| Dates | publishedDate, optional author |
date when Google shows one |
| Page text | contents.text (up to 10,000 characters per page, verbosity compact, standard or full) |
Not returned; Google snippet only |
| Query-relevant excerpts | contents.highlights |
snippet |
| Structured summary | contents.summary with a custom query and a JSON schema |
Not applicable |
| SERP features | None | Ads, People Also Ask, local pack, knowledge panel, shopping cards, discussions |
| AI answer on the page | None (Exa has a separate /answer endpoint) |
aioverview with text, sources, citationPills |
| Cost reported in response | costDollars with a breakdown |
Credit headers on each response; see credits |
Exa fields are from its search reference, checked 2026-09-17.
The practical consequence: Exa can remove a fetch-and-extract step, because text comes back with the result. Google SERP data cannot, because it only describes the page of results. If a model needs to read the documents, a Google pipeline needs a fetcher after the SERP call.
Query controls
Exa
From the search reference:
type:instant,fast,auto(default),deep-lite,deep,deep-reasoning. Deep types acceptadditionalQueries(1 to 10 variants).numResults: 1 to 100, default 10.category:company,publication,news,personal site,financial report,people.includeDomainsandexcludeDomains: up to 1,200 entries each, as hostnames, path prefixes or wildcard subdomains.startPublishedDateandendPublishedDatein ISO 8601. The crawl-date filters are marked deprecated with no effect.maxAgeHours: -1 to 720.0fetches fresh content;-1always uses the cache.userLocation: a two-letter country code.
Google SERP data
On this API: query with country (or gl), hl for interface language, location (City,Region,Country) or uule for city-level targeting, device (desktop, mobile, ios, android), pages from 1 to 10, and include.aioverview. Alternatively a full Google search url, of which q, gl, hl, uule, num, start, tbs and safe are applied.
Filtering in the Google case happens the way users do it: operators such as site: in the query and date ranges through tbs in the URL shape. There is no 1,200-domain allowlist, and there is no semantic category filter. Conversely, Exa has no city-level location, no device and no language parameter in its search reference.
Freshness
Freshness means different things here.
- Exa serves from its index and lets you decide how old a cached page may be with
maxAgeHours. Setting it to0asks for fresh content; published-date filters limit results to a window. Whether a brand-new page is in the index is a crawl question Exa controls. - Google SERP data is current by construction: each request returns a new results page. It is as fresh as Google’s own results for that market at that moment. That is also why two runs an hour apart can differ, which is the signal rank trackers measure.
If you are monitoring change, you want the second. If you are retrieving documents and want to cap cost and latency, cached content is usually fine.
Pricing and limits
From Exa’s pricing page and rate limits, checked 2026-09-17:
| Exa item | Price |
|---|---|
| Search, up to 10 results | $7 per 1,000 requests |
Deep search (deep-lite, deep) |
$12 per 1,000 |
Deep search (deep-reasoning) |
$15 per 1,000 |
| Results above 10 | $1 per 1,000 results |
| Contents | $1 per 1,000 pages per content type |
| AI page summaries | $1 per 1,000 pages |
| Answer | $5 per 1,000 requests |
| Monitors | $15 per 1,000 requests |
| Free credits | $20 for new accounts; the Free tier adds $10 a month |
| Exa endpoint | Default rate limit |
|---|---|
/search, /answer |
10 QPS |
/search with deep types |
5 QPS |
/contents |
100 QPS |
Exa’s docs say adding $1,000 in credits within any 30-day window on pay-as-you-go raises a team to 25 QPS for 90 days; beyond that, sales.
This API’s Google Search credits per request (credits):
| Google request | Async task | Synchronous |
|---|---|---|
| 1 page | 3 | 5 |
| 1 page + AI Overview | 5 | 7 |
| 3 pages + AI Overview | 9 | 11 |
Plan prices and concurrency are on /pricing and rate limits. Failed requests are not charged.
A cost comparison that is fair to both
Comparing $7 per 1,000 Exa searches with a SERP request price hides what each line includes. Normalize to the job.
Job A: give a model 10 relevant documents with text, 10,000 times a month.
- Exa: 10,000 searches × $7/1,000 = $70, plus 100,000 pages of text × $1/1,000 = $100. Total $170, no fetcher to run.
- Google SERP route: 10,000 one-page requests, plus fetching and extracting 100,000 pages yourself, plus the handling of pages that block fetchers. The SERP line is 30,000 credits async; the fetch pipeline is your own cost.
Job B: record Google positions and AI Overview citations for 10,000 keywords a month.
- Exa cannot do it; its ordering is not Google’s.
- This API: 10,000 × 5 credits = 50,000 credits as async tasks.
The cheaper option is whichever one does the job without a second system.
Five jobs, and which to pick
| Job | Pick | Why |
|---|---|---|
| “Find 50 companies similar to X” | Exa | category: "company" and semantic queries; Google returns pages about the query, not a list of entities |
| RAG over recent web documents on a technical topic | Exa | Text and highlights in one call; domain and date filters |
| Rank tracking by city and device | Google SERP | location, device, and positions that mean Google’s positions; see local rank tracking |
| “Is our brand cited in the AI Overview for these queries?” | Google SERP | aioverview.sources and citationPills; see monitoring AI Overviews |
| Keyword research | Google SERP | peopleAlsoAsk and relatedSearches come from Google’s page; see keyword research |
A hybrid pattern that uses both
Many GEO and research pipelines need both views. A pattern that keeps each tool on its strength:
- Observe on Google. For each tracked query, request the SERP with the AI Overview. Store
organicResultsandaioverview.sources. - Find the gap set. List the domains Google ranks or cites that are not yours or your clients’.
- Discover on Exa. For each topic, run a semantic search with
includeDomainsset to the gap domains, or with no filter to find similar pages Google did not surface, and requesthighlights. - Read and summarize. Feed highlights to a model to describe what the cited pages cover that yours do not.
- Re-observe. After content changes, rerun step 1 on a schedule and compare citations over time.
Step 1 on this API, as a batch item (queue up to 500 per POST /v1/async/task/batch call):
{
"taskType": "GOOGLE",
"payload": {
"query": "soc 2 compliance software",
"country": "US",
"hl": "en",
"include": { "aioverview": {} }
},
"idempotencyKey": "google-soc2-software-US-2026-09-17",
"webhook": { "url": "https://example.com/hooks/serp" }
}
And reading the result once it arrives, in Python:
from urllib.parse import urlparse
def google_domains(result: dict) -> dict:
organic = [urlparse(r["link"]).hostname for r in result.get("organicResults", []) if r.get("link")]
overview = result.get("aioverview") or {}
cited = [urlparse(s["url"]).hostname for s in overview.get("sources", []) if s.get("url")]
return {"organic": organic, "aio_cited": cited, "has_aio": bool(overview)}
The rest of that pipeline is covered in tracking AI Overviews with async batches and webhooks and structured SERP data.
Decision criteria
- Whose ordering does the output depend on? Google’s: SERP data. Anyone’s relevant documents: Exa.
- Does the consumer need text? Exa returns it; SERP data needs a fetcher.
- Is location more precise than a country? Only the SERP route has city and device.
- Are you tracking change over time? Each SERP request is a timestamped observation of Google; an index query gives the index.
- How many domains do you filter by? Exa handles up to 1,200 per request; Google needs operators.
- What throughput do you need? Exa’s default is 10 QPS for search; SERP APIs typically bound concurrency by plan and let you queue bulk work.
- Does the vendor state its data handling? Exa’s homepage says “Zero data retention” and “SOC 2 Type II”. Ask any vendor for the same in writing before sending customer queries.
Pitfalls
- Treating Exa result order as a rank. It is relevance within Exa. Do not report it as a position.
- Counting only the search line. Exa bills contents per page per content type; text plus highlights for 10 results is 20 content units.
- Using SERP snippets as document text. Snippets are Google’s excerpt for the query, not the page. Fetch the page if the model must read it.
- Planning around Custom Search JSON API. It is closed to new customers; existing access ends January 1, 2027.
- Running scheduled SERP jobs synchronously. Synchronous calls cost 2 more credits each; use async batches.
For the Google side, start with the quickstart or the Google Search engine page.
Questions
Is Exa a Google search API?
No. Exa runs its own search over its own index and returns pages chosen by its ranking, with optional page text, highlights and summaries. A Google SERP API returns what Google itself shows for a query in a given market.
How much does Exa cost per 1,000 searches?
Exa's pricing page, checked 2026-09-17, lists Search at $7 per 1,000 requests for up to 10 results, deep search types at $12 to $15, extra results at $1 per 1,000, and contents at $1 per 1,000 pages per content type. New accounts get $20 in free credits.
What are Exa's rate limits?
Per Exa's rate-limit docs checked 2026-09-17: 10 QPS for /search and /answer, 5 QPS for deep search types, and 100 QPS for /contents. Adding $1,000 in credits within 30 days raises the team to 25 QPS for 90 days.
Can Exa tell me where my site ranks on Google?
No. Exa's result order is Exa's relevance, not Google's positions. For Google positions, the AI Overview or local packs you need Google SERP data.
How many credits does a Google results request cost on this API?
3 credits for a one-page async task, 2 more for each extra results page, and 2 once if you request the AI Overview. A synchronous call adds 2 credits.