Exa Snapshot Lets AI Search the Web as It Existed Years Ago
Exa Snapshot pins search and page retrieval to any past date, using 400 billion stored webpages to prevent evaluation leakage and enable backtests.
- Exa Snapshot indexes 400 billion webpage versions spanning two decades, queryable by date.
- Add
snapshotAsOfto/searchor/contentsto pin results to a past instant. - Primary use case: prevent web leakage during RL training and agent evaluation.
- Also targets quant backtesting, where point-in-time web data previously did not exist.
- Pay-as-you-go tier gives 10 QPS, 5-month lookback, and 100 requests before sales contact.
- Cutoff bounds content only, not ranking, so it is not a full SERP reconstruction.
Exa Snapshot gives web search a cutoff date
Most search APIs expose the current web, which can contaminate AI evaluations when answers appear online after a task was created. Exa has launched Snapshot, a search capability that limits queries and page fetches to versions stored by a specified point in time.
Exa says its index contains more than 400 billion webpage snapshots spanning two decades. Snapshot is available as a research preview through the existing /search and /contents endpoints. The former discovers pages; the latter retrieves archived versions of known URLs.
When browsing becomes answer lookup
A benchmark written in June may have public solutions by September, including papers, pull requests, issue threads, and blog posts. An agent with web access can retrieve those answers during training or evaluation, allowing the reward signal or grader to credit retrieval of leaked material as successful task completion.
Choosing a cutoff before the task was published removes later page versions from the available evidence and reduces that source of contamination. It cannot prove independent problem-solving because an agent may have memorized the answer or obtained it through another channel.
Fixed cutoffs also limit drift caused by edited pages. Current retrieval signals may still change which eligible pages appear or how they rank, so teams requiring identical evaluation fixtures should persist the responses or URL manifests alongside the cutoff.
One timestamp sets the boundary
The Python SDK accepts an ISO 8601 timestamp through snapshot_as_of inside the contents options. With exa-py installed and EXA_API_KEY configured, a recent public-tier request looks like this:
from datetime import datetime, timedelta, timezone
from exa_py import Exa
cutoff = (
datetime.now(timezone.utc) - timedelta(days=30)
).isoformat()
exa = Exa()
result = exa.search(
"latest stable Python release notes",
num_results=3,
contents={
"snapshot_as_of": cutoff,
"highlights": True,
},
)The rolling example keeps the timestamp within the public tier’s five-month archive window. Raw JSON requests use the camel-case field snapshotAsOf. Benchmarks should store a fixed timestamp and confirm that the account’s archive access will continue to cover it.
Current ranking selects archived pages
On /search, Exa’s current retrieval system discovers and ranks candidate URLs. A URL qualifies only when Exa has stored a version at or before the requested timestamp, and the service returns the latest eligible version it holds. Historical result order may therefore differ from the search results shown on the cutoff date.
Every content-derived field comes from the archived version, including the title, author, publication date, text, highlights, and summaries. Snapshot availability depends on Exa’s crawl history, so page changes made between stored captures may be absent.
The preview caps history and traffic
| Constraint | Current behavior |
|---|---|
| Request quota | The preview includes 100 requests. Continued use requires contacting sales. |
| Public-tier access | Pay-as-you-go accounts receive 10 queries per second and a rolling five months of archive access. Older timestamps are rejected. |
| Search modes | auto, fast, and instant are supported. deep-lite, deep, and deep-reasoning are unavailable. |
| Conflicting options | livecrawl, livecrawlTimeout, maxAgeHours, and subpages cannot accompany snapshotAsOf. Mixed requests return INVALID_REQUEST. |
| Search filters | The category parameter is unsupported. |
| Older archives | Access beyond the rolling public window requires a sales agreement. |
Because the public window rolls forward, a fixed benchmark cutoff will eventually fall outside standard access. Evaluations tied to older events or long-running studies need deeper archive access before that happens.
Four uses for a time-bounded web
Point-in-time retrieval supports workflows where later publications, edits, or disclosures would invalidate the result:
- Agent training and evaluation: Reinforcement-learning runs can restrict browsing agents to information available when each task was created, reducing leakage into rewards and benchmark scores.
- Financial backtesting: Researchers can test web-derived signals using pages available by a historical date, matching the point-in-time discipline already applied to prices and company fundamentals.
- Documentation and policy audits: Teams can fetch the same URL at separate cutoffs and run their own diff across documentation, pricing pages, policies, or filings.
- Historical agent tests: Developers can rerun an agent against an earlier content boundary without exposing it to subsequent page updates.
The API docs provide the supported request formats and current compatibility details.
Historical research needs sampling care
Two decades of archived pages could also support research into the web before widespread LLM-generated publishing. Such studies still need to account for crawl coverage, missing versions, publication provenance, and the selection effects introduced by current retrieval signals.
Search-based studies inherit those modern ranking choices when assembling a historical sample. Researchers working from known URL collections can use /contents with fixed dates, while open-ended studies should record the query, cutoff, search mode, run date, and returned URLs.