# Wayback Machine Snapshots (`cyber1nj3ct0r/wayback-machine-snapshots`) Actor

List every Wayback Machine capture of a page, a section or a whole website: date, HTTP status, content type and the address to open each capture. One per day, month or year, or only when the content changed. Find a site's age and past versions.

- **URL**: https://apify.com/cyber1nj3ct0r/wayback-machine-snapshots.md
- **Developed by:** [Sanira Botheju](https://apify.com/cyber1nj3ct0r) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 snapshots

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Wayback Machine Snapshots do?

Wayback Machine Snapshots lists the captures the Internet Archive's **Wayback Machine** holds of a page, a section or a whole website. For each capture you get the **date**, the **HTTP status** the page answered with, the **content type**, a **fingerprint of the content**, and the **address to open the capture** in the Wayback Machine. Export the list to Excel, CSV or JSON, or use it in your own tools.

- Look up one page, everything under an address (such as `/blog/`), a whole host, or a domain with all its subdomains
- Every capture, or one per day, month or year, or only the captures where the content changed
- Limit to a period, to working pages (status 200) and to web pages only
- Oldest first, or the newest captures first
- Many addresses in one run

### What data do you get?

| Field | Example |
|---|---|
| Captured | `2022-08-04T21:57:09Z` |
| Address | `https://crawlee.dev/` |
| Status | `200` |
| Type | `text/html` |
| Open in Wayback Machine | `https://web.archive.org/web/20220804215709/https://crawlee.dev/` |
| Digest | a fingerprint: the same digest means the same content |
| Size | `9419` bytes (as stored, compressed) |

### How to find old versions of a website

1. Under **Websites or pages**, enter the site or page, for example `example.com`.
2. Under **What to look up**, choose a single address, a section, the whole host or the whole domain.
3. Under **Which captures**, choose *One per year* for an overview, *Only when the content changed* to see each version once, or *Every capture*.
4. Press **Start**, then open any capture with its Wayback Machine address.

### How much does it cost?

You pay for results, not for time: **$1.00 per 1,000 snapshots**. Apify subscribers on the Silver plan pay $0.85 and on the Gold plan $0.70 per 1,000 snapshots. Each run also has a start fee of $0.00005.

| Snapshots returned | Cost |
|---|---|
| 100 | $0.10 |
| 1,000 | $1.00 |
| 10,000 | $10.00 |
| 100,000 | $100.00 |

Apify's free plan includes $5 of credit each month, which covers about 5,000 snapshots. Set **Maximum snapshots per address**, or a maximum cost for the run in Apify Console, and the tool stops there and keeps what it has found.

### Input

The only required field is **Websites or pages**. The other options:

- **What to look up**: this address only; this address and everything under it; every page of this host; this domain and its subdomains.
- **Which captures**: every capture; one per day, month or year; only when the content changed.
- **From** and **To**: a year (`2019`), a month (`2019-06`) or a day (`2019-06-30`).
- **Maximum snapshots per address** and **Newest first**.
- **Only working captures** (on by default) and **Only web pages** under Filters.

### Output example

```json
{
    "url": "https://crawlee.dev/",
    "capturedAt": "2022-08-04T21:57:09Z",
    "timestamp": "20220804215709",
    "waybackUrl": "https://web.archive.org/web/20220804215709/https://crawlee.dev/",
    "statusCode": 200,
    "mimeType": "text/html",
    "digest": "QFA2FSCB5FSJWSQAVAU227TULSXFA6QC",
    "length": 9419,
    "source": "https://crawlee.dev/",
    "error": null
}
```

When nothing matches, the table has one row for the address with the error `NOT_ARCHIVED`. If the Internet Archive cannot be reached, the row says `ARCHIVE_ERROR` or the network error.

### What can you use it for?

- Find out how old a website is: its first capture
- See how a competitor's pricing page, home page or terms changed over time
- Recover the addresses of pages that no longer exist, for redirects after a site move
- Check what a domain was used for before you buy it
- Collect evidence of what a page said on a given date
- Build lists of a site's historic pages for research

### Use it from the API

```bash
curl -X POST "https://api.apify.com/v2/acts/cyber1nj3ct0r~wayback-machine-snapshots/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urls": [{"url": "example.com"}], "matchType": "host", "collapse": "year"}'
```

The same works from Python, JavaScript, Make, Zapier and n8n through Apify's integrations.

### FAQ

#### Why is it slower than other tools?

The Internet Archive is a free public library. The tool asks its public capture index one request at a time, at least a second apart, and waits patiently when the index is busy, so that it never adds to the Archive's load. Large sites with many captures can take a few minutes.

#### Does it download the pages themselves?

No. It returns the list of captures and the address to open each one in the Wayback Machine. Open any of them in your browser to see the page as it was.

#### Why are some sizes or statuses empty?

Some entries in the index are "revisits": the Archive saw the same content again and did not store it twice. They carry no status or size of their own.

#### Why did a site I know return nothing?

The Archive may not have captured it, or the site asked the Archive to remove or hide its captures. Try *Every page of this host* and turn off *Only working captures*: the home page is sometimes stored under a slightly different address.

#### Is it allowed?

The tool uses the Internet Archive's public capture index, the way the Wayback Machine's own pages do, and at a gentle pace. The captured pages belong to their owners: you are responsible for how you use them.

#### Something does not work

Open an issue on the **Issues** tab with the address you tried. Every report is read and answered.

# Actor input Schema

## `urls` (type: `array`):

Website or page addresses, for example <code>example.com</code> or <code>https://www.example.com/pricing</code>. Add them one by one, paste many with <b>Bulk edit</b>, or link a text file.

## `matchType` (type: `string`):

<b>This address only</b>: captures of exactly this page. <b>This address and everything under it</b>: for example every page under <code>/blog/</code>. <b>Every page of this host</b>: the whole site on this host name. <b>This domain and its subdomains</b>: also <code>shop.</code>, <code>blog.</code> and the others.

## `collapse` (type: `string`):

<b>Every capture</b>, or only the first capture of each <b>day</b>, <b>month</b> or <b>year</b>, or only the captures where the page <b>changed</b> since the capture before.

## `from` (type: `string`):

Only captures from this date on: a year such as <code>2019</code>, a month <code>2019-06</code> or a day <code>2019-06-30</code>.

## `to` (type: `string`):

Only captures up to this date, in the same form.

## `maxSnapshotsPerUrl` (type: `integer`):

Stop after this many captures for each address. You pay per capture returned, so this also caps the cost. Busy sites have hundreds of thousands of captures.

## `newestFirst` (type: `boolean`):

Return the most recent captures first (up to 10,000 per address). Otherwise captures come oldest first.

## `onlySuccessful` (type: `boolean`):

Leave out captures of redirects and error pages (keep only status 200).

## `onlyPages` (type: `boolean`):

Leave out images, scripts, PDFs and other files; useful with the whole-site options.

## `userAgent` (type: `string`):

The name the tool sends with each request to the Internet Archive. Leave empty to use the tool's own name.

## Actor input object example

```json
{
  "urls": [
    {
      "url": "https://crawlee.dev"
    }
  ],
  "matchType": "exact",
  "collapse": "year",
  "maxSnapshotsPerUrl": 10,
  "newestFirst": false,
  "onlySuccessful": true,
  "onlyPages": false
}
```

# Actor output Schema

## `snapshots` (type: `string`):

One record per capture: when it was made, its status and content type, and the address to open it.

## `summary` (type: `string`):

For each address: what was looked up, how many captures were returned, and whether the limit was reached.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        {
            "url": "https://crawlee.dev"
        }
    ],
    "collapse": "year",
    "maxSnapshotsPerUrl": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("cyber1nj3ct0r/wayback-machine-snapshots").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": [{ "url": "https://crawlee.dev" }],
    "collapse": "year",
    "maxSnapshotsPerUrl": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("cyber1nj3ct0r/wayback-machine-snapshots").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    {
      "url": "https://crawlee.dev"
    }
  ],
  "collapse": "year",
  "maxSnapshotsPerUrl": 10
}' |
apify call cyber1nj3ct0r/wayback-machine-snapshots --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cyber1nj3ct0r/wayback-machine-snapshots"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bCKAZmbdzdMN1uW9X/builds/zDhp5l7b9UPWLu743/openapi.json
