Wayback Machine Search
Pricing
from $0.80 / 1,000 archive outputs
Wayback Machine Search
Search Wayback Machine snapshots for URLs, hosts, and domains. Export archive dates, status codes, MIME types, digests, page text, version timelines, reports, and monitoring alerts.
Pricing
from $0.80 / 1,000 archive outputs
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
🕰️ Trace a website's archived history
Wayback Machine Search helps SEO teams, researchers, site owners, and developers review the history of public URLs and domains in the Internet Archive Wayback Machine. It returns dated archive captures with original URLs, playback links, HTTP status, MIME type, content digests, sizes, optional page text, change evidence, timelines, summaries, and monitoring alerts. This gives you source-backed rows for archive research, audits, and change checks.
- Compare archive tools with Wayback Machine Alternative before choosing a history search workflow.
- Open a dated archive view with Web Archive Viewer when you need to inspect a saved page.
- Find older captures of deleted posts with Twitter Archive Deleted Tweets.
- Search saved web pages by URL with Internet Archive Search Engine.
- Review URL and domain history with Wayback Machine Search.
📦 Explore capture and change history
Returned data
The dataset uses recordType to identify snapshot, version, summary, or alert rows. Snapshot rows keep the submitted target, original archived URL, openable Wayback playback URL, source timestamp, ISO archive date, HTTP status, MIME type, content digest, and content length. They can also include readable archived text, text status, distance from a target date, and mechanical change evidence.
Version rows group successive captures into timeline intervals. Summary rows collect target counts, date ranges, coverage details, discovered paths, subdomains, emails, and the source filters used for the run. Alert rows keep the selected trigger, earlier archive state, and a short message. Fields that do not apply to a row are returned as null.
Changes are based on archive status, content digest, content length, or available fetched text. They are source-backed and deterministic. The Internet Archive may not have a capture for every page or date, so the returned history may be partial. This Actor does not crawl the current live web, create new Wayback captures, make visual screenshot diffs, or write AI summaries.
🚀 Run a focused Wayback search
Run steps
- Add one or more URLs or domains in URLs or domains. You can submit up to 50 targets, and they share one scope and filter set.
- Choose Archive scope: exact URL, URL prefix, same host, or same domain and subdomains.
- Set optional archive dates, HTTP status, and MIME filters.
- Choose an output view: raw snapshots, changed snapshots, a version timeline, the closest snapshot to a date, a Markdown report, or monitoring alerts.
- Turn on Fetch archived page text when you need readable text. Add a phrase in History search phrase to focus on fetched archive text.
- Run the Actor and open the dataset or the optional Markdown report.
Set maxResults to a positive number when you want fewer rows. Leave it empty to return all available results until the source is exhausted. When text fetching is on, leave maxContentFetch empty to fetch all available results until the source is exhausted. A metadata-only run leaves Fetch archived page text off.
⚙️ Input
The public input requires outputMode and targets. All targets in one run use the same archive scope and filters. Settings that do not apply to the chosen view are ignored.
Input fields
| Field | Type | What it does |
|---|---|---|
outputMode | string | Required. Choose snapshots, changes, timeline, closestDate, report, or monitoring. |
targetDate | string | Date for the closest archived capture. Use YYYY, YYYYMM, YYYYMMDD, YYYY-MM, or YYYY-MM-DD. Other views ignore it. |
alertOn | string | Select none, anyNewArchiveRow, statusChange, contentChange, statusOrContent, or pageRemovedOrRestored for monitoring alerts. Other views ignore it. |
targets | array of strings | Required. Add 1 to 50 URLs or domains to search. |
maxResults | integer | Optional positive row limit for each target. Report and monitoring views also use it for snapshot details. Leave it empty to return all available results until the source is exhausted. |
matchType | string | Choose exact, prefix, host, or domain to set how broadly each target matches archived URLs. |
dateFrom | string | First archive date to include. Use YYYY, YYYYMM, YYYYMMDD, YYYY-MM, or YYYY-MM-DD. |
dateTo | string | Last archive date to include. Use YYYY, YYYYMM, YYYYMMDD, YYYY-MM, or YYYY-MM-DD. |
statusFilter | string | Include only captures with a three-digit HTTP status such as 200 or 404. Leave it empty for any status. |
mimeFilter | string | Include only captures with a MIME type such as text/html. Leave it empty for any type. |
historyQuery | string | Optional phrase to find in fetched archived text. Leave it empty to keep all returned captures. |
includeContent | boolean | Add readable text from eligible archived HTML or text captures. Leave it off for metadata-only results. |
maxContentFetch | integer | When text fetching is on, this optional positive number limits fetched archived pages. Leave it empty to fetch all available results until the source is exhausted. It has no effect when text fetching is off. |
Example input
This small example is copied from a successful current-beta run:
{"outputMode": "snapshots","alertOn": "statusOrContent","targets": ["http://example.com:80/"],"maxResults": 2,"matchType": "exact","statusFilter": "200","mimeFilter": "text/html","includeContent": false,"maxContentFetch": 1}
🧾 Output
The Actor writes dataset rows and can also create a Markdown report. The recordType value marks each row as snapshot, version, summary, or alert. Fields that do not apply are returned as null.
Output links
| Field | Type | What it does |
|---|---|---|
results | string | Link to the dataset view with saved archive rows. |
report | string | Link to the Markdown report when outputMode is report. |
Shared dataset fields
| Field | Type | What it does |
|---|---|---|
recordType | string | Identifies the row as a snapshot, version, summary, or alert. |
target | string or null | Submitted URL or domain that produced the row. |
originalUrl | string or null | Original URL from the archived capture. |
archiveUrl | string or null | Openable Wayback playback link for the capture. |
waybackTimestamp | string or null | Source Wayback timestamp in YYYYMMDDhhmmss format. |
archiveDate | string or null | Capture time in ISO 8601 format. |
statusCode | integer or null | HTTP status recorded by Wayback. |
mimeType | string or null | MIME type recorded by Wayback. |
contentDigest | string or null | Wayback digest used to identify duplicate or changed captures. |
contentLength | integer or null | Archived content length when available. |
contentStatus | string or null | Whether archived text was not requested, fetched, capped, unavailable, or skipped. |
content | string or null | Readable archived text when fetching was requested and succeeded. |
distanceFromTargetDays | number or null | Absolute distance from the requested date for closestDate rows. |
change | object or null | Deterministic change evidence compared with an earlier capture or version. |
version | object or null | Timeline interval represented by a version row. |
diff | object or null | Readable-content differences when text comparison is available. |
summary | object or null | Counts, date ranges, coverage, discoveries, and source evidence for a summary. |
alert | object or null | Monitoring details for a detected archive change. |
All four dataset shapes include the shared fields above. Nested fields appear when their object is present.
Snapshot rows
Snapshot rows describe individual archived captures. The nested change and diff fields use these additional paths:
| Field | Type | What it does |
|---|---|---|
change.changed | boolean | Says whether source-backed evidence changed. |
change.magnitude | string or null | Gives the measured change size: none, small, medium, or large. |
change.category | string or null | Groups the change as status, content, availability, or mixed. |
change.cue | string or null | Short source-backed cue for the change. |
change.type | string | Names the mechanical change type, such as digestChange or statusChange. |
change.previousArchiveDate | string or null | Date of the earlier capture used for comparison. |
change.previousWaybackTimestamp | string or null | Wayback timestamp of the earlier capture. |
change.evidence | array of strings | Source-backed facts that explain the change. |
diff.added | array of strings | Representative text excerpts that were added. |
diff.removed | array of strings | Representative text excerpts that were removed. |
This row is copied from a successful current-beta snapshots run:
{"recordType": "snapshot","target": "http://example.com:80/","originalUrl": "http://www.example.com:80/","archiveUrl": "https://web.archive.org/web/20020328012821id_/http://www.example.com:80/","waybackTimestamp": "20020328012821","archiveDate": "2002-03-28T01:28:21.000Z","statusCode": 200,"mimeType": "text/html","contentDigest": "UY3I2DT2AMWAY6DECFCFYMT5ZOTFHUCH","contentLength": 481,"contentStatus": "notRequested","content": null,"distanceFromTargetDays": null,"change": {"changed": true,"magnitude": "large","category": "content","cue": "Archived content digest changed","type": "digestChange","previousArchiveDate": "2002-01-20T14:25:10.000Z","previousWaybackTimestamp": "20020120142510","evidence": ["Digest changed from HT2DYGA5UKZCPBSFVCV3JOBXGW2G5UUA to UY3I2DT2AMWAY6DECFCFYMT5ZOTFHUCH"]},"version": null,"diff": null,"summary": null,"alert": null}
Version rows
Version rows group successive captures into timeline intervals. A version row has every field in the shared dataset fields table. Its change and diff objects use the nested paths listed above, and its non-null version object adds:
| Field | Type | What it does |
|---|---|---|
version.number | integer | Sequential version number within the target timeline. |
version.startDate | string | First capture date in the version interval. |
version.endDate | string | Last capture date in the version interval. |
version.snapshotCount | integer | Number of captures in the version interval. |
version.firstWaybackTimestamp | string | Wayback timestamp for the first capture in the interval. |
version.lastWaybackTimestamp | string | Wayback timestamp for the last capture in the interval. |
This row is copied from a successful current-beta timeline run:
{"recordType": "version","target": "example.com","originalUrl": "http://www.example.com:80/","archiveUrl": "https://web.archive.org/web/20020528114741id_/http://www.example.com:80/","waybackTimestamp": "20020528114741","archiveDate": "2002-05-28T11:47:41.000Z","statusCode": 200,"mimeType": "text/html","contentDigest": "UY3I2DT2AMWAY6DECFCFYMT5ZOTFHUCH","contentLength": 481,"contentStatus": "notRequested","content": null,"distanceFromTargetDays": null,"change": {"changed": true,"magnitude": "large","category": "content","cue": "Archived content digest changed","type": "digestChange","previousArchiveDate": "2002-01-20T14:25:10.000Z","previousWaybackTimestamp": "20020120142510","evidence": ["Digest changed from HT2DYGA5UKZCPBSFVCV3JOBXGW2G5UUA to UY3I2DT2AMWAY6DECFCFYMT5ZOTFHUCH"]},"version": {"number": 2,"startDate": "2002-03-28T01:28:21.000Z","endDate": "2002-05-28T11:47:41.000Z","snapshotCount": 3,"firstWaybackTimestamp": "20020328012821","lastWaybackTimestamp": "20020528114741"},"diff": null,"summary": null,"alert": null}
Summary rows
Summary rows collect run-level counts and source context. A summary row has every field in the shared dataset fields table. Its non-null summary object uses:
| Field | Type | What it does |
|---|---|---|
summary.targets | array of strings | Targets covered by the summary. |
summary.snapshotCount | integer | Total snapshot rows represented by the summary. |
summary.versionCount | integer | Total version rows represented by the summary. |
summary.alertCount | integer | Total alert rows represented by the summary. |
summary.dateRange | object | Oldest and newest archive dates in the summary. |
summary.dateRange.firstArchiveDate | string or null | Oldest archive date represented. |
summary.dateRange.lastArchiveDate | string or null | Newest archive date represented. |
summary.coverage | array of objects | Per-target archive coverage details. |
summary.coverage[].target | string | Target covered by the entry. |
summary.coverage[].snapshotCount | integer | Successful snapshots for the target. |
summary.coverage[].firstArchiveDate | string or null | Oldest capture for the target. |
summary.coverage[].lastArchiveDate | string or null | Newest capture for the target. |
summary.coverage[].completeness | string | Whether returned coverage is complete, partial, or unknown. |
summary.coverage[].reliability | string | Coverage reliability: high, medium, low, or unknown. |
summary.coverage[].observedGaps | array of strings | Known gaps or source limits in the returned history. |
summary.discovery | object | Discovered paths, subdomains, and emails. |
summary.discovery.paths | array of strings | Distinct archived paths found. |
summary.discovery.subdomains | array of strings | Distinct archived subdomains found. |
summary.discovery.emails | array of strings | Email addresses found in fetched archived content. |
summary.evidence | object | Reproducible source context for the summary. |
summary.evidence.source | string | Source used for archive data. |
summary.evidence.filters | array of strings | User-visible filters applied to the summary. |
This row is copied from a successful current-beta Markdown report run:
{"recordType": "summary","target": null,"originalUrl": null,"archiveUrl": null,"waybackTimestamp": null,"archiveDate": null,"statusCode": null,"mimeType": null,"contentDigest": null,"contentLength": null,"contentStatus": null,"content": null,"distanceFromTargetDays": null,"change": null,"version": null,"diff": null,"summary": {"targets": ["example.com"],"snapshotCount": 10,"versionCount": 8,"alertCount": 0,"dateRange": {"firstArchiveDate": "2002-01-20T14:25:10.000Z","lastArchiveDate": "2002-08-03T08:05:44.000Z"},"coverage": [{"target": "example.com","snapshotCount": 10,"firstArchiveDate": "2002-01-20T14:25:10.000Z","lastArchiveDate": "2002-08-03T08:05:44.000Z","completeness": "partial","reliability": "medium","observedGaps": ["Results stopped at the requested row limit"]}],"discovery": {"paths": [],"subdomains": ["www.example.com"],"emails": []},"evidence": {"source": "Internet Archive Wayback Machine","filters": ["match:domain","status:200","mime:text/html"]}},"alert": null}
Alert rows
Alert rows show a monitoring change in archive data. An alert row has every field in the shared dataset fields table. Its non-null alert object adds:
| Field | Type | What it does |
|---|---|---|
alert.trigger | string | Monitoring condition that created the row. |
alert.previousArchiveDate | string or null | Earlier capture date used for comparison. |
alert.previousWaybackTimestamp | string or null | Wayback timestamp of the earlier capture. |
alert.previousStatusCode | integer or null | Earlier capture HTTP status when relevant. |
alert.previousContentDigest | string or null | Earlier capture content digest when relevant. |
alert.message | string | Short source-backed alert message. |
This row is copied from a successful current-beta monitoring run:
{"recordType": "alert","target": "github.com","originalUrl": "http://github.com:80/?","archiveUrl": "https://web.archive.org/web/20080618201317id_/http://github.com:80/?","waybackTimestamp": "20080618201317","archiveDate": "2008-06-18T20:13:17.000Z","statusCode": 200,"mimeType": "text/html","contentDigest": "7HRNG6K4OGFHZZU4KVQO4ZMO7M7LYMLQ","contentLength": 3474,"contentStatus": "notRequested","content": null,"distanceFromTargetDays": null,"change": {"changed": true,"magnitude": "small","category": "content","cue": "Archived content digest changed","type": "digestChange","previousArchiveDate": "2008-05-14T21:01:48.000Z","previousWaybackTimestamp": "20080514210148","evidence": ["Digest changed from L4YKKNIYL4FNB5SJWPQ4YII5FJTLWHRF to 7HRNG6K4OGFHZZU4KVQO4ZMO7M7LYMLQ"]},"version": null,"diff": null,"summary": null,"alert": {"trigger": "anyNewArchiveRow","previousArchiveDate": "2008-05-14T21:01:48.000Z","previousWaybackTimestamp": "20080514210148","previousStatusCode": 200,"previousContentDigest": "L4YKKNIYL4FNB5SJWPQ4YII5FJTLWHRF","message": "New Wayback capture found for http://github.com:80/? at 2008-06-18."}}
💳 Pricing
This Actor uses pay-per-event pricing. The charged event is Archive output, and it applies when a successful snapshot, version, summary, or monitoring alert is saved. Check the Actor Pricing tab for current tier rates.
🔌 Integrations
Export dataset rows as JSON, CSV, Excel, XML, RSS, or HTML, or use the dataset and Markdown report with the Apify API, schedules, and webhooks.
❓ FAQ
What happens when no snapshots match my targets?
A run can save no rows when the source has no matching captures. Check the target scope, date range, status, and MIME filters.
What does closestDate return?
It returns the capture closest to the date you enter and reports the absolute distance in distanceFromTargetDays.
Why is content sometimes null?
Text is null when fetching is off or the source text is unavailable, capped, or skipped. Use contentStatus to see the text state.
How are changes and timeline different?
changes focuses on captures with source-backed changes. timeline groups successive captures into version rows with date spans and capture counts.
How does monitoring compare archive history?
Monitoring compares the latest saved archive state for the same target and filters. alertOn chooses the conditions that create alert rows.
Can I search the archived pages by keyword?
No. Search targets are URLs or domains. historyQuery can focus on a phrase in text fetched from returned captures, but it is not a full archive text index.
Does this crawl the live website or create a new capture?
No. It reads existing Internet Archive data. It does not crawl the current site or create a Wayback capture.
Do I need a Wayback Machine API key or login?
No. The Actor reads public archive data and does not ask for a buyer-supplied API secret or login.
📝 Changelog
1.0: Expanded archive history workflows
- Added focused snapshot, change, timeline, closest-date, report, and monitoring views.
- Added readable archive text, source-backed change evidence, coverage summaries, and monitoring alerts.
0.1: Initial release
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Website URL Crawler & Link Extractor - Build a URL list from links and sitemaps before searching its archive history.
- Website Change Monitor & Diff Checker - Monitor current public pages when you need repeat checks outside archived history.
- Wayback Machine Search - Query another Wayback search Actor for archive snapshots of URLs and domains.
- Wayback Machine Snapshot Lookup - Look up exact-URL capture history and per-URL archive summaries.
- Wayback Machine Scraper - Track Website Changes Over Time - Review historical captures with website change tracking features.
Made with ❤️ by Maxime Dupré