Wayback Page Change Tracker: Archived Versions & Timeline avatar

Wayback Page Change Tracker: Archived Versions & Timeline

Pricing

from $0.50 / 1,000 snapshot returneds

Go to Apify Store
Wayback Page Change Tracker: Archived Versions & Timeline

Wayback Page Change Tracker: Archived Versions & Timeline

See when any web page changed, from the Internet Archive Wayback Machine. One row per content version with date, days since the previous version, size change and archive links, or every archived URL of a domain. Summaries and new-only change alerts. No API key.

Pricing

from $0.50 / 1,000 snapshot returneds

Rating

0.0

(0)

Developer

Detroit Web Agent - Open Data

Detroit Web Agent - Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Wayback Page Change Tracker

Find out when a web page changed and see every version of it, straight from the Internet Archive Wayback Machine. Give it page URLs (a pricing page, terms of service, a competitor's homepage, a job board, a policy page) and it returns one row per content version: the capture date, the days since the previous version, how much the archived size changed, the content digest and direct Wayback links to view the page as it looked then.

It can also list every archived URL of a domain (an inventory of old and deleted pages), add a summary row per URL (first and latest version, median days between changes, longest quiet gap, versions per year), and run on a schedule to return only new versions since the last run, so you get change alerts without re-paying for history you already have.

No API key, no login, no proxy. The data comes from the public Wayback CDX index of the Internet Archive.

What does Wayback Page Change Tracker do?

  • Page versions (default mode). Identical captures are collapsed, so a page captured 900 times but changed 40 times gives you 40 rows, not 900. Each row is diffed against the version before it (time gap, size change in bytes and percent).
  • Latest or earliest. Get the most recent N versions (default) or start from the beginning of a date window.
  • Size-change threshold. Pages with dynamic tokens change on every capture. Set minLengthChangePercent (for example 2) to keep only versions whose archived size moved by at least that much. Skipped versions are not charged.
  • Change alerts. Turn on onlyNewSinceLastRun and schedule the actor daily or weekly. It remembers the latest version per URL in a named key-value store and returns only newer versions, each still diffed against the last one you received.
  • Summary rows. One extra row per URL with first and latest version dates, span, median days between changes, the longest gap and versions per year.
  • Archived URL inventory. One row per unique URL the Wayback Machine holds for a domain (with subdomains), an exact host, or a path prefix such as example.com/blog/.
  • HTTP status filter. 200-only for clean content versions, or all captures to see redirects and outages (301, 404, 5xx) over time.

How it works

  1. Each URL is cleaned (scheme, www. and fragments do not matter; pasted web.archive.org/web/... links are unwrapped).
  2. The actor queries the Wayback CDX index with collapse=digest (versions) or collapse=urlkey (inventory), your date window and status filter, paging with resume keys.
  3. Every row is validated before it is pushed. URLs that carry an email address, token, session id, password or API key in the URL are dropped and never charged.
  4. You are charged only for rows that reach your dataset.

Requests are spaced about one second apart to respect the Internet Archive, with retries on 429 and 5xx answers.

Input

FieldWhat it doesDefault
urlsPage URLs or domains (up to 100).["apify.com/pricing"]
modeversions (content changes) or urlInventory (every archived URL of a site).versions
matchTypeInventory scope: domain (with subdomains), host, or prefix.domain
dateFrom, dateToOptional window: YYYY, YYYY-MM or YYYY-MM-DD.none
ordernewest = the most recent versions, oldest = from the start of the window.newest
statusFilterok = 200 captures only, all = include redirects and errors.ok
minLengthChangePercentSkip versions whose size changed less than this percent.0
maxRowsPerUrlCap per URL.100
maxResultsCap across all URLs (charged rows).25
includeSummaryAdd one summary row per URL.false
onlyNewSinceLastRunReturn only versions newer than the last run.false
stateStoreNameKey-value store that remembers the last version per URL.wayback-page-change-tracker-state

Input example

{
"urls": ["apify.com/pricing", "stripe.com/pricing"],
"order": "newest",
"maxRowsPerUrl": 15,
"maxResults": 30,
"includeSummary": true
}

Monitoring example (schedule it weekly):

{
"urls": ["competitor.com/pricing", "competitor.com/terms"],
"onlyNewSinceLastRun": true,
"minLengthChangePercent": 2,
"stateStoreName": "competitor-watch"
}

Output

One JSON object per row. Download as JSON, CSV, Excel or XML, or read it through the Apify API. The dataset has three views: Page versions, Archived URLs and Target summaries.

Sample output (page version)

{
"type": "page_version",
"target": "apify.com/pricing",
"url": "https://apify.com/pricing",
"versionNumber": 2,
"capturedAt": "2026-10-18T08:04:19Z",
"waybackTimestamp": "20261018080419",
"archiveUrl": "https://web.archive.org/web/20261018080419/https://apify.com/pricing",
"rawArchiveUrl": "https://web.archive.org/web/20261018080419id_/https://apify.com/pricing",
"statusCode": 200,
"mimeType": "text/html",
"contentDigest": "…",
"lengthBytes": 66650,
"previousCapturedAt": "2026-10-17T22:43:48Z",
"daysSincePreviousVersion": 0.4,
"lengthChangeBytes": 128,
"lengthChangePercent": 0.2,
"changeScore": 0,
"isFirstVersionInWindow": false,
"scrapedAt": "2026-11-06T06:02:47.494Z"
}

Sample output table

targetversionNumbercapturedAtstatusCodelengthByteslengthChangePercentdaysSincePreviousVersionarchiveUrl
apify.com/pricing12026-10-17T22:43:48Z200665220.70.7web.archive.org/web/20261017224348/...
apify.com/pricing22026-10-18T08:04:19Z200666500.20.4web.archive.org/web/20261018080419/...

Output fields

FieldMeaning
typepage_version, archived_url or target_summary
targetThe URL or domain you asked for
urlThe exact URL that was captured
versionNumberOrder of the version within this run's window (1 = earliest returned)
capturedAt, waybackTimestampCapture time (ISO 8601 UTC and the 14-digit Wayback form)
archiveUrl, rawArchiveUrlView the capture in the Wayback Machine, or the raw captured bytes (id_)
statusCode, mimeTypeHTTP status and content type at capture time
contentDigestSHA-1 digest of the captured content; a new digest means the bytes changed
lengthBytesArchived record size (compressed)
previousCapturedAt, daysSincePreviousVersionThe version before this one and the gap in days
lengthChangeBytes, lengthChangePercentSize change vs the previous version
changeScore0-100 change size (absolute size change %, capped at 100), handy for ranking or alerting on big edits
isFirstVersionInWindowTrue when there was no earlier version to compare against
Summary fieldsversionsFound, firstVersionAt, latestVersionAt, spanDays, medianDaysBetweenChanges, longestGapDays, longestGapFrom, longestGapTo, versionsPerYear, latestArchiveUrl, truncated

Missing values are null, never empty strings.

Pricing

Pay per event: you pay only for rows delivered to your dataset.

EventPrice
Actor start$0.00005 per run
Snapshot returned (one page version or one archived URL)$0.0005 ($0.50 per 1,000)
Target summary returned (optional)$0.002 per URL

Worked cost example: a weekly watch of 20 competitor pages with includeSummary on, where each page has 10 new versions in the window: 200 versions x $0.0005 = $0.10, plus 20 summaries x $0.002 = $0.04, plus $0.00005 start = about $0.14 per run. With onlyNewSinceLastRun, later runs charge only for versions you have not received yet, so a quiet week costs close to nothing.

Identical captures, versions below your size-change threshold, invalid rows and versions already delivered in a monitoring run are never charged. Set Maximum cost per run in the run options to cap spend; the actor stops cleanly when it is reached.

Use cases

  • Competitor pricing and plan tracking: see every date a rival's pricing page changed, then open the archive links side by side to see what moved.
  • Terms of service and privacy policy audits: list each version of a policy page with dates for compliance files, disputes or research.
  • SEO and site migrations: inventory every archived URL of a domain to rebuild redirect maps and recover deleted pages that still have backlinks.
  • Expired domain due diligence: check how often a domain's homepage changed and when it went quiet before you buy it.
  • Journalism and OSINT: document when a statement, product page or job posting was edited or removed, with a citable Wayback link per version.
  • Scheduled change alerts: run weekly with onlyNewSinceLastRun and send new rows to Slack, email, Google Sheets or an n8n/Make/Zapier workflow.

Use with the API, n8n, Make, Zapier or AI agents

API (one call, returns the rows as JSON):

curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~wayback-page-change-tracker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls":["apify.com/pricing","stripe.com/pricing"],"order":"newest","maxRowsPerUrl":13,"maxResults":25,"includeSummary":true}'

The call waits up to 5 minutes. For bigger inputs, start the run with /runs instead and read the dataset when it finishes.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("transparent_meteorite/wayback-page-change-tracker").call(run_input={"urls": ["apify.com/pricing", "stripe.com/pricing"], "order": "newest", "maxRowsPerUrl": 13, "maxResults": 25, "includeSummary": True})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)
  • n8n, Make, Zapier: use the Apify app's "Run Actor" step with actor transparent_meteorite/wayback-page-change-tracker, paste the input JSON, then map the dataset items to your sheet or CRM.
  • Clay: add an HTTP API column that calls the run-sync endpoint above.
  • Schedules: in Apify Console, Schedules, run it daily or weekly with the same input for a steady feed.
  • AI agents (MCP): connect the Apify MCP server at https://mcp.apify.com?tools=transparent_meteorite/wayback-page-change-tracker to Claude, Cursor or any MCP client, and your agent can run Wayback Page Change Tracker on request.

FAQ

Does it download the archived pages? No. It reads the Wayback CDX index (capture metadata). Every row includes archiveUrl and rawArchiveUrl so you can open or fetch any version yourself. This keeps runs fast and cheap.

What counts as a change? A capture whose content digest differs from the capture right before it. Pages with rotating tokens, timestamps or ads can change on every capture; use minLengthChangePercent to keep only meaningful size changes.

Do http/https and www matter? No. The Wayback index normalizes them, so example.com/pricing covers all variants. The url field shows exactly what was captured.

Can I monitor pages over time? Yes. Turn on onlyNewSinceLastRun, pick a stateStoreName per watch list and schedule the actor. Each run returns only versions newer than the last one delivered.

Why did a URL return nothing? Either the Wayback Machine has no 200 captures for it in your window (try statusFilter: all or remove the dates), or the site owner has excluded it from the archive. The run log and the OUTPUT record list these URLs.

Do I need an API key or a proxy? No. The CDX index is public and is called directly.

Limitations

  • Coverage is whatever the Internet Archive captured. Small or new sites may have few captures; crawl frequency varies by site and over time.
  • Changes between two captures are invisible; the capture dates bound when a change happened, they do not pinpoint it.
  • lengthBytes is the compressed archive record size, a rough signal of how much changed, not a text diff.
  • Archived URL inventory queries on large domains are heavy for the CDX server and can take 30 to 90 seconds per page or time out; the actor retries and then reports the error without charging. Use host or prefix scope to narrow large sites.
  • Sites excluded from the Wayback Machine return no rows.
  • URLs carrying emails, tokens, session ids or passwords in the URL are dropped on purpose.

Data source and terms

Capture metadata comes from the Internet Archive's public Wayback CDX server. The Internet Archive is a non-profit; please use reasonable volumes. This actor is independent and is not affiliated with or endorsed by the Internet Archive.