Internet Archive API: List archived snapshots of a page
Lists Wayback Machine captures of a web page, oldest first, with HTTP status and whether the content changed since the previous capture.
Unofficial. Not affiliated with or endorsed by Internet Archive.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Page, required
page Website address to look up, for example openai.com/pricing.
example.com
- To Date optional
to_date Last capture date to include, for example 2023-12-31. Omit for all later dates.
2020-01-01
- From Date optional
from_date First capture date to include, for example 2023-02-01. Omit for all earlier dates.
2020-01-01
- Max Results optional
max_results Maximum captures returned, for example 50. The total still counts all matching captures.
3
Whole number from 1 to 1000. Default
50.- Changes Only optional
changes_only Include only the first capture and later captures with changed content, for example true.
false
True or false. Default
true.
Input as JSON
{ "page": "example.com", "to_date": "2020-01-01", "from_date": "2020-01-01", "max_results": 3, "changes_only": false}Output
{ "snapshots": [ { "http_status": null, "snapshot_link": "https://web.archive.org/web/20200101002334/https://example.com" , "content_digest": "JI6OR3QR4CI526JD6TMMNZNV4QPMPQCH", "content_changed": false, "http_status_code": null, "snapshot_datetime": "2020-01-01T00:23:34Z" }, { "http_status": null, "snapshot_link": "https://web.archive.org/web/20200101002938/https://example.com" , "content_digest": "JI6OR3QR4CI526JD6TMMNZNV4QPMPQCH", "content_changed": false, "http_status_code": null, "snapshot_datetime": "2020-01-01T00:29:38Z" }, { "http_status": null, "snapshot_link": "https://web.archive.org/web/20200101012043/https://example.com/" , "content_digest": "JI6OR3QR4CI526JD6TMMNZNV4QPMPQCH", "content_changed": false, "http_status_code": null, "snapshot_datetime": "2020-01-01T01:20:43Z" } ], "total_snapshots": 249}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"web.archive.org/list_snapshots","input":{"page":"example.com","to_date":"2020-01-01","from_date":"2020-01-01","max_results":3,"changes_only":false}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "web.archive.org/list_snapshots" , "input": { "page": "example.com", "to_date": "2020-01-01", "from_date": "2020-01-01", "max_results": 3, "changes_only": False }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "web.archive.org/list_snapshots" , "input": { "page": "example.com", "to_date": "2020-01-01", "from_date": "2020-01-01", "max_results": 3, "changes_only": false } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run web.archive.org/list_snapshots# with {"page":"example.com","to_date":"2020-01-01","from_date":"2020-01-01","max_results":3,"changes_only":false}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "page" ], "properties": { "page": { "type": "string", "minLength": 1, "description": "Website address to look up, for example openai.com/pricing." }, "to_date": { "type": "string", "description": "Last capture date to include, for example 2023-12-31. Omit for all later dates." }, "from_date": { "type": "string", "description": "First capture date to include, for example 2023-02-01. Omit for all earlier dates." }, "max_results": { "type": "integer", "default": 50, "maximum": 1000, "minimum": 1, "description": "Maximum captures returned, for example 50. The total still counts all matching captures." }, "changes_only": { "type": "boolean", "default": true, "description": "Include only the first capture and later captures with changed content, for example true." } }}Output schema
{ "type": "object", "required": [ "total_snapshots", "snapshots" ], "properties": { "snapshots": { "type": "array", "items": { "type": "object", "properties": { "http_status": { "type": [ "string", "null" ] }, "snapshot_link": { "type": "string" }, "content_digest": { "type": [ "string", "null" ] }, "content_changed": { "type": "boolean" }, "http_status_code": { "type": [ "integer", "null" ] }, "snapshot_datetime": { "type": "string" } } } }, "total_snapshots": { "type": "integer" } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
web.archive.org/list_snapshots- Returns
- total_snapshots, snapshots with datetime, link, HTTP status, content_changed, digest
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method web.archive.org/list_snapshots with the inputs above.
Ask your agent
- Show me every archived version of example-news.com/front-page from 2019 to 2021, oldest first, with status codes
- Did the pricing page at saas-tool.io/plans change between captures in 2022? List only the captures where content differed
- List up to 20 Wayback Machine snapshots of myblog.org/about since March 2015 including HTTP status and digest values
- I need the full capture history of the company's careers page at startup-corp.net through 2024-06-30, including all unchanged captures
- Give me the archived snapshots of docs.python-tips.dev/install from 2017-01-01 to 2018-12-31 and tell me which ones had content changes
See more
All Internet Archive methodsFinds the closest Wayback Machine capture of a web page to a past date and returns its title and readable text.
web.archive.org/get_archived_pageFinds BBC News articles matching search words, newest first or by relevance, with publication time, authors, section and summary, optionally limited to a date range. Date filters and newest order apply to the first 180 search matches; older or less relevant matches may be missed.
bbc.com/search_newsSearches Fox News articles by keyword, with date filtering, ordering and pagination, over the first 100 matches.
foxnews.com/search_newsSearches historic U.S. newspaper pages (Chronicling America) by text, with optional state and issue-year filters. Returns relevance-ranked page records with snippets and image links; newspaper OCR may contain transcription errors.
loc.gov/search_historic_newspapersSearches public National Archives Catalog records by keywords, year range, material type and online availability, in catalog relevance order.
catalog.archives.gov/search_recordsSearches CNBC-published articles by keyword, with optional publication date range, sort order and pagination. Excludes videos, wire stories and press releases.
cnbc.com/search_newsSearches The Verge articles by keyword, with optional date filters, sorting and pagination. Only the first 100 matches from The Verge search are used.
theverge.com/search_newsReturns human-reader view counts for a Wikipedia article by day or month, with totals, daily averages and the peak period.
wikipedia.org/get_page_views