# Wayback Machine Snapshots & Archived Text

> Wayback Machine scraper: list captures of a URL or domain with date, link, status and digest. Get archived title and text. No login.

URL: https://cliqtomedia.com/actors/wayback-machine-snapshots/

Category: Search, SEO & ads · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto

Add a URL, a URL prefix or a domain. Get one row per capture with date, snapshot link, HTTP status and digest. You can also get the archived title and text.

## How to use it: 3 steps

1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `apify.com` in URLs or domains. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Add a URL, a URL prefix or a whole domain. The Actor reads the Internet Archive [Wayback Machine](https://web.archive.org/) index and returns one row for each capture: date, snapshot link, HTTP status, MIME type and content digest. It can also return the archived page title and visible text.



### Good for

- SEO page history: see when a page was first captured, how its HTTP status changed (200 → 301 → 404), and what the old title and text said.
- Recover deleted content: get the visible text of an old version of a page by date.
- OSINT and site mapping: list the archived URLs of a site or all its subdomains with `collapse: urlkey`.
- Change detection: keep only captures where content changed with `collapse: digest`.

### Not a good fit

- It does not take screenshots and does not save images, scripts or PDFs. Text is extracted only from successful (2xx) HTML or plain-text captures.
- It does not search archive.org collections, books or media items. It works with the Wayback Machine web capture index only.
- The archive does not have every page or every day. Missing captures mean the archive has none, not that the page did not exist.
- E-mail addresses and phone numbers in archived text are replaced with `[email removed]` and `[phone removed]`. Phone masking covers international numbers (`+44 20 7946 0958`) and common national formats (`(555) 123-4567`, `555-123-4567`, `020 7946 0958`); unusual formats can stay.

## Price

Prices will be shown after release.

## Questions

### Do I need a Wayback Machine account or key?

No. It uses the public index and archived pages. No login, key or cookies.

### Why do I get fewer captures than I asked for?

maxSnapshots is a maximum. The archive may have fewer captures for your filters.

### Does it take screenshots?

No. It does not save images, scripts or PDFs.

### Is the archived content mine to reuse?

Pages belong to their publishers. You are responsible for how you use the results.

### How fresh is the data?

Rows show what the Wayback Machine index has at run time. New captures can take hours or days to appear in the index.

### I come from another Wayback Actor. How do the fields map?

`queryUrl` → `inputUrl`, `archiveDate` → `capturedAt`, `archiveUrl` → `snapshotUrl`, `contentLength` → `length`, `contentDigest` → `digest`, `content` → `text`. `statusCode` here is a number or `null`, not a string. A URL with no captures returns a `not_found` row instead of nothing.

## Data fields

- `inputUrl` (string): Your URL or domain as given.
- `matchType` (string): How the input was matched: exact, prefix, host or domain.
- `status` (string): Row result: complete, partial (index data complete but archived text missing), not_found (no captures) or error. See statusReason.
- `statusReason` (string): Plain-English reason for partial, not_found, error or skipped-text rows; null otherwise.
- `errorCode` (string): Machine code for errors, e.g. RATE_LIMITED, SOURCE_UNAVAILABLE, SOURCE_TIMEOUT, SOURCE_EXCLUDED (site excluded from the archive, free row); null otherwise.
- `originalUrl` (string): The exact URL the archive captured (scheme, www and port as crawled).
- `urlKey` (string): Archive index key (SURT form) of the URL.
- `timestamp` (string): Capture time as the 14-digit Wayback timestamp yyyyMMddhhmmss (UTC).
- `capturedAt` (string): Capture time as ISO 8601 UTC.
- `snapshotUrl` (string): Link to open this capture in the Wayback Machine.
- `statusCode` (integer): HTTP status the archived server returned; null for revisit records without a status.
- `mimeType` (string): MIME type of the capture, e.g. text/html; warc/revisit marks a duplicate of an earlier capture.
- `digest` (string): SHA-1 content digest (base32). Same digest = same archived content.
- `length` (integer): Size of the compressed archive record in bytes (not the page size).
- `title` (string): Archived page title (only with page text).
- `text` (string): Visible text of the archived page, cut to Max text characters (only with page text).
- `textLength` (integer): Full length of the extracted text in characters before cutting.
- `textTruncated` (boolean): true when text was cut to Max text characters.
- `contentStatus` (string): Page text result: not_requested, ok, empty (no visible text, not charged), skipped_not_text, skipped_not_2xx, skipped_limit, unavailable or error.
- `sourceUrl` (string): Wayback CDX index request that returned this row.
- `fetchedAt` (string): When this row was fetched from the archive (ISO 8601 UTC).

## Input settings

- `urls` (array, required): Up to 100 pages or sites, e.g. apify.com, https://example.com/pricing. Use example.com/blog/* for every page under a path, or *.example.com for the whole domain with subdomains. Duplicates (http/https, www) are listed once.
- `matchType` (string): exact: only that URL. prefix: every URL starting with it. host: every page on that host. domain: every page on the domain and its subdomains. A * in the URL (example.com/blog/* or *.example.com) overrides this for that entry.
- `from` (string): Only captures on or after this date (UTC). Formats: 2015, 2015-06, 2015-06-01 or 20150601. Empty: from the first capture.
- `to` (string): Only captures on or before this date (UTC), inclusive: 2020 means up to the end of 2020. Same formats as From date. Empty: up to the latest capture.
- `collapse` (string): Keep one capture per hour, day, month or year, or skip captures whose content did not change (digest). urlkey keeps one capture per distinct URL, which is handy for listing the pages of a site. none returns every capture.
- `statusFilter` (string): Only captures whose archived HTTP status is in this class, e.g. 2xx for successful pages or 3xx for redirects. any keeps all, including revisit records without a status.
- `onlyHtml` (boolean): Skip images, scripts, PDFs and other files; keep text/html captures only.
- `sortOrder` (string): oldest: from the first capture forward. newest: the most recent captures first (exact URLs only; prefix and domain matches are listed by URL by the archive).
- `maxSnapshots` (integer): Stop after this many captures for each URL or domain. Each saved capture is one paid result. Up to 10,000.
- `includeContent` (boolean): Also download each successful HTML or plain-text capture and return its title and visible text. One extra request per capture (slower) and one extra paid event per page with text. At most 300 pages per run (about 2 seconds each).
- `maxContentChars` (integer): Cut the extracted text to this many characters per capture; textLength still reports the full length.

## Step by step on Apify

1. Open the Input tab.
2. Keep the prefilled URLs value `apify.com`, or add your own site, for example `example.com`.
3. Keep Max captures per URL at the prefill `20` (the default without prefill is `100`).
4. Click Start.
5. Open the Output tab and check the Snapshots view: `capturedAt`, `snapshotUrl` and `statusCode`.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Page history by month | `urls`, `collapse: month` | capture row | `capturedAt`, `statusCode`, `snapshotUrl` | spreadsheet export |
| Old title and text | `urls`, `includeContent: true`, `statusFilter: 2xx` | capture row with text | `title`, `text`, `textLength` | content diff, LLM |
| All archived URLs of a site | `urls: ["*.example.com"]`, `collapse: urlkey` | one row per URL | `originalUrl`, `capturedAt` | crawl list, link audit |
| Content changes only | `urls`, `collapse: digest` | changed captures | `digest`, `capturedAt` | change log |

## Tips

- Use collapse digest to keep only captures where content changed.
- Use collapse urlkey to list the archived URLs of a site.
- Set a date range to keep the run small.

## Limits



- Page text for up to 300 captures per run, at most one archived page every 2 seconds; only the first 3 MB of a page are read (then `textTruncated: true`).
- The Actor is polite to the archive: at most 1 request per second. The first "too many requests" answer stops all lookups; saved rows stay.
- URLs with no captures are slow to confirm: the archive can take 10–40 seconds per such URL.
- A `partial` row means the capture is real but the archive did not return its page text. You pay for the row, not for the text.
- A run with 100 URLs takes about 15–20 minutes (default timeout 30 minutes). 100 URLs × 3 captures with text (283 texts) took about 17 minutes.
- If one URL fails (for example a very large site the archive cannot list in time), it gets a free `error` row and the other URLs go on. The run still SUCCEEDS with `reason: SOME_URLS_FAILED` when fewer than half of the URLs failed.
- If the archive keeps failing, the run stops after two failed URLs in a row. Inputs not looked up get a free `error` row with `statusReason: Not looked up`, and the run ends as FAILED with the saved rows kept.

## Sample result

```json
{
  "inputUrl": "apify.com",
  "matchType": "exact",
  "originalUrl": "https://www.apify.com/",
  "urlKey": "com,apify)/",
  "timestamp": "20190102020849",
  "capturedAt": "2019-01-02T02:08:49Z",
  "snapshotUrl": "https://web.archive.org/web/20190102020849/https://www.apify.com/",
  "statusCode": 200,
  "mimeType": "text/html",
  "digest": "27TX5UTLMOMOW6O2BSAYXOR4RR73LSCN",
  "length": 10491,
  "title": "Web Scraping, Data Extraction and Automation - Apify",
  "text": "Library Docs Pricing Case studies About Contact Log in Sign up Go to app The web…",
  "textLength": 6840,
  "textTruncated": true,
  "contentStatus": "ok",
  "status": "complete",
  "statusReason": null,
  "errorCode": null,
  "sourceUrl": "https://web.archive.org/cdx/search/cdx?url=apify.com&output=json&fl=urlkey%2Ctimestamp%2Coriginal%2Cmimetype%2Cstatuscode%2Cdigest%2Clength&from=2019&to=2024&collapse=timestamp%3A4&filter=statuscode%3A2..&limit=10&showResumeKey=true",
  "fetchedAt": "2026-10-17T10:33:45Z"
}
```

## Similar tools

- [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/)
- [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/)
- [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/)
- [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/)
- [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/)
- [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/)
