# Wayback Machine Snapshot Finder: Archive Dates & URLs (`pandadad0214/wayback-snapshot-finder`) Actor

Use this to find Internet Archive Wayback Machine snapshots for pages or whole domains via the official CDX API: capture dates, archive URLs, status, MIME type, first and last seen. Dead links, dated evidence, site history. Excel and CSV.

- **URL**: https://apify.com/pandadad0214/wayback-snapshot-finder.md
- **Developed by:** [Panda Federation](https://apify.com/pandadad0214) (community)
- **Categories:** SEO tools, Developer tools, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 snapshot returneds

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

## Wayback Machine Snapshot Finder: Archive Dates, URLs & First/Last Seen

**Use this to find Internet Archive Wayback Machine snapshots for any list of URLs or domains through the public CDX API (no login).** For each snapshot you get **timestamp, human-readable date, original URL, archive URL, HTTP status, MIME type, content digest, length, and first/last-seen flags**. Optional **closest-to-date**, **status filter**, and **collapse-by-digest** uniqueness. **$0.001 per snapshot.**

- 📅 **First and last seen:** earliest and latest capture dates per URL, with `isFirst` / `isLast` flags
- 🎯 **Closest to a date:** ask for the snapshots nearest a timestamp (great for "what did this page look like around …")
- 🔁 **Unique content:** collapse by digest so you only pay for distinct page versions
- 🌐 **Bulk URLs or whole domains:** exact, prefix or domain match via the official CDX API
- 💸 **$0.001 per snapshot**; empty and failed lookups are free

### Who it's for

- **Researchers and journalists:** when a page first appeared, how it changed over time
- **SEO and marketers:** competitor landing-page history and redirect archaeology
- **Legal / compliance / brand protection:** inventory of archived URLs for a hold or takedown
- **OSINT and security teams:** historical hosts, paths and status codes
- **AI agents:** one-line `agentSummary` per snapshot plus a SUMMARY `takeaway`

### How to use it

1. Click **Try for free**.
2. Paste **URLs** and/or **Domains**.
3. Optionally set **from/to**, **status filter**, **closest to**, or turn off digest collapse.
4. Click **Start**. Download **SNAPSHOTS_XLSX** or **SNAPSHOTS_CSV** from **Storage → Key-value store**, or read the dataset via API.

#### Input example

```json
{
  "urls": ["example.com", "https://example.com/about"],
  "matchType": "domain",
  "from": "2015",
  "filterStatus": "200",
  "collapseDigest": true,
  "includeFirstLast": true,
  "maxResults": 50
}
```

### Task examples

- **When did this landing page first appear?** `{"urls": ["competitor.com/pricing"], "matchType": "exact", "includeFirstLast": true, "maxResults": 20}`
- **Closest snapshot to a date:** `{"urls": ["example.com"], "closestTo": "2020-01-01", "filterStatus": "200", "maxResults": 5}`
- **Unique page versions since 2018:** `{"domains": ["example.com"], "from": "2018", "collapseDigest": true, "filterStatus": "200"}`
- **Legal hold URL inventory:** `{"urls": [...list...], "matchType": "exact", "includeFirstLast": true}`
- **Whole-domain history sample:** `{"domains": ["example.com"], "matchType": "domain", "maxResultsPerUrl": 100, "maxResults": 200}`

### Output example

```json
{
  "url": "example.com",
  "timestamp": "20020120142510",
  "timestampReadable": "2002-01-20 14:25",
  "originalUrl": "http://example.com:80/",
  "archiveUrl": "https://web.archive.org/web/20020120142510/http://example.com:80/",
  "statusCode": 200,
  "mimeType": "text/html",
  "digest": "HT2DYGA5UKZCPBSFVCV3JOBXGW2G5UUA",
  "length": 1792,
  "isFirst": true,
  "isLast": false,
  "firstSeen": "2002-01-20 14:25",
  "lastSeen": "2026-10-01",
  "agentSummary": "example.com snapshot 2002-01-20 14:25; HTTP 200; text/html; FIRST seen; archive https://web.archive.org/web/20020120142510/http://example.com:80/."
}
```

### For AI agents

Use this Actor to answer "when was this URL archived, what are the archive links, and what are the first and last captures?" for one or many URLs. Minimal input: `{"urls": ["example.com"]}`. Read `agentSummary` per snapshot or the SUMMARY `takeaway` (counts, first/last per URL). Empty CDX results and failed lookups are not charged.

- **MCP:** add this Actor to Claude, Cursor, Copilot or any MCP client through the [Apify MCP server](https://mcp.apify.com): `https://mcp.apify.com/?actors=pandadad0214/wayback-snapshot-finder`, then ask in plain English.
- **API:** `POST https://api.apify.com/v2/acts/pandadad0214~wayback-snapshot-finder/run-sync-get-dataset-items?token=YOUR_TOKEN` with the input JSON.
- Every row has an **`agentSummary`** line, and the **SUMMARY** record has a one-line **`takeaway`** plus `nextSteps`, so an agent can answer without parsing every field.
- Schedule it in Apify and connect Zapier, Make, n8n, Slack, Google Sheets or a webhook to the dataset.

### Pricing

**$0.001 per snapshot returned** (pay per event) plus Apify's tiny Actor-start fee of $0.00005. 1,000 snapshots cost $1. Runs that return nothing cost nothing, and failed CDX calls are never charged. Set **Maximum results** or Apify's *maximum charge per run* to cap any run; the Actor stops at your limit.

**Apify paid-plan discounts:** Bronze members pay 10% less, Silver 20% less and Gold 30% less per snapshot; the discount applies automatically. Apify's free plan includes monthly credit to try it.

### FAQ

**Do I need an Internet Archive account?** No. The Actor uses the public CDX search API.

**What is collapse by digest?** Wayback stores many captures of the same bytes. Collapsing by digest keeps one row per unique content so you do not pay for duplicates.

**Why are some statuses missing or odd?** CDX records whatever the crawler stored (200, 301, 404, warc/revisit, etc.). Use **HTTP status filter** = `200` for successful HTML pages.

**Does this download the archived page body?** No. It returns snapshot metadata and archive URLs. Open `archiveUrl` to view the capture.

**Do empty results cost money?** No. Nothing matched = nothing charged.

### More Panda Federation tools

- [Website Change Monitor](https://apify.com/pandadad0214/website-change-monitor): get told when a live page changes
- [Bulk Domain WHOIS & Expiry Checker](https://apify.com/pandadad0214/bulk-domain-whois-expiry): registrar and expiry for the same domains
- [Company Website Enricher](https://apify.com/pandadad0214/company-website-enricher): domain to company profile with contacts and tech
- Full catalog and MCP server: [Panda Federation Tools on GitHub](https://github.com/pandadad0214/panda-federation-tools)

*Built by Panda Federation. Questions or a custom version? Open an issue on the Actor's Issues tab.*

### Changelog

- **2026-11-06:** First release: Internet Archive CDX snapshot search for URLs/domains, exact/domain/prefix match, from/to and status filters, collapse-by-digest, closest-to-date, first/last seen flags, Excel and CSV, `agentSummary` and SUMMARY `takeaway`, pay-per-event pricing with Bronze/Silver/Gold discounts.

# Actor input Schema

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

Pages or hosts to look up (https:// and www. are fine). Duplicates are dropped.

## `domains` (type: `array`):

Whole domains to search (always uses domain match). Combine with URLs if you want.

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

exact = that URL only; domain = any URL on the host; prefix = that path and below.

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

Earliest snapshot: YYYY or YYYYMMDD (e.g. 2015 or 20150101).

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

Latest snapshot: YYYY or YYYYMMDD.

## `filterStatus` (type: `string`):

Only keep this status code (e.g. 200). Leave empty for all.

## `collapseDigest` (type: `boolean`):

One row per unique page content. On by default.

## `closestTo` (type: `string`):

Optional. Return snapshots nearest this date/time (YYYYMMDD or YYYY-MM-DD). Sorted by closeness.

## `includeFirstLast` (type: `boolean`):

Probe CDX for the earliest and latest capture of each URL and set isFirst / isLast (and firstSeen / lastSeen).

## `maxResultsPerUrl` (type: `integer`):

Cap per URL/domain before the global max. Default 100.

## `maxResults` (type: `integer`):

You pay per snapshot returned, so this also caps the cost. Default 100 (hard max 5000).

## Actor input object example

```json
{
  "urls": [
    "example.com",
    "https://example.com/about"
  ],
  "matchType": "domain",
  "from": "2015",
  "to": "2024",
  "filterStatus": "200",
  "collapseDigest": true,
  "closestTo": "2020-01-01",
  "includeFirstLast": true,
  "maxResultsPerUrl": 100,
  "maxResults": 100
}
```

# Actor output Schema

## `table` (type: `string`):

No description

## `xlsx` (type: `string`):

No description

## `csv` (type: `string`):

No description

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

Agent-friendly keys: `takeaway` (one-line result), per-URL counts, `nextStep` and `nextSteps`.

# 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": [
        "example.com",
        "https://example.com/about"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pandadad0214/wayback-snapshot-finder").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": [
        "example.com",
        "https://example.com/about",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pandadad0214/wayback-snapshot-finder").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": [
    "example.com",
    "https://example.com/about"
  ]
}' |
apify call pandadad0214/wayback-snapshot-finder --silent --output-dataset

```

## MCP server setup

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

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/ii2a2DRzo9HeGHrcM/builds/sJlOhffHrSlrzWIvK/openapi.json
