Wayback Machine Scraper: Snapshots, History & Old URLs avatar

Wayback Machine Scraper: Snapshots, History & Old URLs

Pricing

from $1.50 / 1,000 result rows

Go to Apify Store
Wayback Machine Scraper: Snapshots, History & Old URLs

Wayback Machine Scraper: Snapshots, History & Old URLs

Get the Wayback Machine history of any URL or domain from archive.org's official CDX API: first and last capture, last working copy, status changes, content versions, every snapshot, and all historical URLs of a domain (for SEO recovery and due diligence).

Pricing

from $1.50 / 1,000 result rows

Rating

0.0

(0)

Developer

Julian Genuario

Julian Genuario

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Get the Internet Archive (Wayback Machine) history of any URL or domain in a clean table, through archive.org's official CDX API. Three modes:

  1. History summary per URL (default): first capture, last capture, last working copy (last HTTP 200), last status code, status changes over time (200 to 301 to 404...), number of distinct content versions, days captured and captures per year.
  2. All snapshots per URL: every capture with date, HTTP status, MIME type, content digest, size and the link to the archived copy. Collapse to only the captures where the content changed, or one per day / month / year.
  3. Historical URLs of a domain: every URL the Wayback Machine has seen on a domain (and its subdomains, or under a path prefix), with the first capture date, status and archived link.

What does Wayback Machine Scraper do?

Wayback Machine Scraper uses archive.org's official CDX API to get the history of any URL or domain: first and last capture, last working archived copy, status changes, content versions, every snapshot and all historical URLs of a domain. Use it for SEO recovery of lost pages, expired domain research and due diligence.

How to use Wayback Machine Scraper

  1. Click Try for free on this page (a free Apify account is enough to start).
  2. Fill in the input (see the examples below) or keep the prefilled example.
  3. Click Start and wait for the run to finish.
  4. Download the results from the Output tab as JSON, CSV, Excel or HTML, or read them with the Apify API.
  5. Optional: create a Schedule to run it daily or weekly, and connect a webhook or an integration (Make, Zapier, n8n, Slack).

What people use it for

  • SEO recovery: find old URLs of a site (after a migration or a domain purchase) that still have backlinks, and the archived content to restore or redirect.
  • Expired domain due diligence: how old is the site, what was on it, when did it go dark, how often did it change.
  • Content and legal evidence: when did a page change, and what did it say on a given date (link to the archived copy).
  • Competitor research: how often a competitor's pricing or landing page changed over the years.
  • Dead link fixing: replace broken links with the last working archived copy.

Input

FieldWhat it does
What to getsummary, snapshots or domainUrls.
URLs or domainsexample.com, example.com/pricing, with or without https://. Also from a dataset or a CSV / Google Sheets link.
From / To dateYYYY, YYYY-MM or YYYY-MM-DD.
HTTP status filter200, 3xx, !404...
MIME type filtertext/html, application/pdf, image/*...
Snapshots: collapseEvery capture, only content changes, one per day / month / year.
Historical URLs: scopeDomain + subdomains, exact host, or URL prefix (example.com/blog/). URLs with ?parameters are skipped by default (tracking noise).
Max results per URL, Max URLs per runLimits.
Only new since the last runFor scheduled runs: only new snapshots / newly discovered URLs.

Example: old URLs of a domain

{ "mode": "domainUrls", "urls": ["example.com"], "mimeTypes": ["text/html"], "statusCodes": ["200"], "maxResultsPerUrl": 5000 }

Example: when did the pricing page change in 2024-2026?

{ "mode": "snapshots", "urls": ["example.com/pricing"], "collapse": "contentChange", "from": "2024" }

Output

Summary row:

{
"recordType": "summary",
"input": "apify.com",
"status": "ok",
"firstCapture": "2007-05-31T10:15:38Z",
"firstCaptureUrl": "https://web.archive.org/web/20070531101538/http://www.apify.com:80/",
"lastCapture": "2026-10-25T20:21:20Z",
"lastStatusCode": "200",
"lastOkCapture": "2026-10-25T20:21:20Z",
"lastOkCaptureUrl": "https://web.archive.org/web/20261025202120/https://apify.com/",
"daysWithCaptures": 1151,
"distinctVersions": 744,
"capturesByYear": { "2007": 3, "2018": 194, "2026": 104 },
"statusChanges": [{ "from": "200", "to": "301", "at": "2024-02-03T10:00:00Z" }]
}

Snapshot row: url, timestamp, capturedAt, statusCode, mimeType, digest, contentChanged, length, archiveUrl. Historical URL row: url, firstCapture, statusCode, mimeType, archiveUrl. URLs that were never archived come back with status: "not-archived" (free).

Pricing

Pay per event: USD 1.50 per 1,000 results (a summary, a snapshot or a historical URL). "Not archived" and failed rows are free. The run respects your max charge per run.

Fair use of archive.org

The Internet Archive is a non-profit. This Actor uses only its public CDX API, sends one request at a time with a delay (4 s by default, configurable from 2 s), identifies itself with its own user-agent, pages through big results with the official resume key, and stops cleanly if archive.org keeps answering HTTP 429 instead of retrying aggressively. It does not download archived pages. Big domains with hundreds of thousands of URLs take time: use the filters and limits.

Cost examples

Prices at the current pay-per-event rate: USD 1.50 per 1,000 result rows (summaries, snapshots or historical URLs; URLs that were never archived are free). You can set a maximum charge per run in the run options.

JobApproximate cost
Test run: summary of 2 URLs (measured: 8 s)about $0.003
Summary for 1,000 domainsabout $1.50
Up to 1,000 snapshots of one pageabout $1.50
20,000 historical URLs of a domain (SEO migration)about $30.00

Use it from your code, an integration or an AI agent

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("latamdatatools/wayback-machine-history").call(run_input={
"mode": "summary",
"urls": [
"apify.com",
"apify.com/pricing"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["url"], item.get("firstCapture"), item.get("lastCapture"))

JavaScript / Node.js (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('latamdatatools/wayback-machine-history').call({
mode: 'summary',
urls: [
'apify.com',
'apify.com/pricing'
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

No code:

  • Schedules: save your input as a Task and run it daily or weekly from Apify Console (Schedules).
  • Integrations: send the results to Google Sheets, Slack, email, Make, Zapier, n8n or Airbyte from the Integrations tab, or call your own webhook when a run finishes.
  • AI agents: add it as a tool in Claude, Cursor, VS Code and other MCP clients through the Apify MCP server (https://mcp.apify.com), so the agent can check when a page first appeared or how it changed.

FAQ

Why are some captures marked with status null? The Wayback index has no status for some records (redirect captures, warc revisits).

Does it get the archived HTML? No, it returns the links to the archived copies. Open them, or feed them to a scraper.

Questions? Open an issue in the Issues tab.