Search the web as it was on any date

Backtest models, train agents and run evals without future leakage, using only webpages that were public before your cutoff date.

What teams use Snapshot for

A time machine for the web

Explore over 400 billion stored page versions.

Versioned Search

A search tool that only returns information that was on the web before your selected cutoff date.

Versioned Contents

See web pages as they appeared at any point in time before your selected cutoff date.

Give reinforcement learning agents web search without leaking the answer

Freeze the web at a cutoff date so models can't reward hack by looking up solutions published after the task was written. Every training run searches the web as it was at the cutoff, so evals can measure performance gains that come from the model, not what it can look up.

Why reinforcement learning teams use it

Backtest trading signals and risk models on point-in-time web data

Improve alpha research with Exa Snapshot’s point-in-time web data. Test how a prediction model or trading signal would have performed using only information available on each date, without spending months assembling datasets manually.

Why finance and forecasting teams use it
AaruLearn how Aaru runs leakage-free backtests for its prediction models with Exa Snapshot.

One parameter on the endpoints you already use

Add snapshotAsOf to a /search or /contents request. Exa returns the newest stored version of each page at or before that date, and leaves out pages with no version from before it.

snapshot.py
from exa_py import Exaexa = Exa()# Search pages stored on or before the cutoffresults = exa.search(    "Q2 results for a public company",    type="auto",    num_results=10,    contents={        "highlights": True,        "snapshot_as_of": "2026-06-30T00:00:00Z",    },)# Read a known page as it was on the cutoffpage = exa.get_contents(    ["https://example.com/pricing"],    text=True,    snapshot_as_of="2026-06-30T00:00:00Z",)

The historical web, with depth where it matters

400B+ page versions

Historical snapshots of web pages across news, coding, finance and the general web.

Code history

GitHub source code, issues, pull requests and commits, plus package managers, docs and software forums.

A growing record of the web

Exa’s daily crawl of billions of pages adds more versions to explore.

Start testing on pay as you go

100trial requests
Pay as you go10 QPS

100 trial requests with access to the last 5 months of history, up to 10 search results or 1 contents URL per request.

Enterprisecustom

Full history, higher limits and coverage mapped to the domains your models need.

Common questions

A historical web search API returns web pages as they existed at an earlier point in time, not as they look today. Exa Snapshot adds this to Exa's Search and Contents APIs. Set a cutoff date and Exa returns only page versions it stored on or before that date, drawing on more than 400 billion stored page versions.

Add the snapshotAsOf parameter to a /search or /contents request, with an ISO 8601 date or datetime. Exa returns the newest stored version of each page at or before that cutoff and leaves out pages with no stored version from before it. See the Snapshot docs for examples in Python, JavaScript and cURL.

A date filter, such as a published-date range, decides which pages appear, but the content you get back is today's version of each page. A page published in 2024 may have been edited since, with corrections, updates or outcomes added later.

Versioned search also controls the content. Titles, text, highlights and summaries come from the version Exa stored before your cutoff, so later edits don't leak into results.

On pay as you go, Snapshot covers the last 5 months of history, with 100 trial requests. Enterprise plans include deeper history, and how far back it goes depends on the site. Talk to sales to see coverage for the domains your models need.

Give the agent a search tool that calls Exa with snapshotAsOf set to the date the task was written. The agent can search and read the web freely during rollouts, but pages published or updated after that date are left out, so it can't look up the answer or reward hack with solutions posted later.

Leakage happens when a model sees information from after the event it's tested on, such as a write-up of the answer. Point-in-time search limits every retrieved page to versions stored before the eval's cutoff date, so scores reflect the model's reasoning rather than what it found online.

Snapshot controls what the web shows the model, not what the model learned in training. Many teams also use a model whose training data ends before the cutoff.

Set one snapshotAsOf value per task and reuse it in every run. Each run then reads page content from the same stored versions, so later changes to those pages don't shift results between runs.

Search ranking still uses Exa's current retrieval signals, so the results and their order can vary slightly between runs with the same cutoff.

Set the cutoff to just before the answer became public, such as the day a question was posed or a fix was merged. For benchmarks built from real events, like coding tasks from pull requests or forecasting questions, use each task's own date, since snapshotAsOf is set per request. On pay as you go, cutoffs must fall within the last 5 months.

For each date in the backtest, query Exa with snapshotAsOf set to that date, build the signal from the pages returned, and record the trade the model would have made. Every result comes from page versions stored before that date, so the backtest uses only information the strategy could have had at the time, without months of collecting pages going forward.

Look-ahead bias creeps in when a backtest uses information that wasn't available yet, such as a page edited after the fact or an article published later. With Snapshot, every field, including title, author, published date, text, highlights and summaries, comes from the page as it was stored before your cutoff, so later edits and publications stay out of the test.

Run the model on past cases with snapshotAsOf set to each case's decision date. For example, check a KYB or AML decision against the web as it looked when the decision was made, so later news, like an enforcement action, doesn't make the model look better than it would have been. This shows how web features would have performed on past cases before you rely on them in production.