
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

List Internet Archive Wayback Machine snapshots of any URL or domain, extract every archived URL of a site, find the capture closest to a date, and get archived pages as clean Markdown or text for LLMs. No login needed.
Look up any URL or domain in the Internet Archive's Wayback Machine and get its full capture history as clean, structured rows: capture date, archived HTTP status, content type, size, content digest and direct snapshot links. List every URL ever archived on a domain, find the snapshot closest to a date, and optionally get each archived page as clean Markdown or plain text, ready for LLMs, RAG pipelines and AI agents. No login, no API key.
python.org, https://example.com/pricing or *.example.com).| Field | What it does |
|---|---|
urls | URLs or domains. *.example.com = all subdomains, example.com/blog/* = everything under a path. |
mode | snapshots (capture history), urls (each archived URL of a domain once) or closest (one capture nearest targetDate). |
maxResults | Max rows per URL or domain (0 = no limit). Default 20. |
includeContent | Add the archived page text. contentFormat: markdown, text or html. |
matchType | auto, exact, prefix, host or domain. |
dateFrom, dateTo | Date range such as 2015, 2015-06 or 2015-06-15. |
statusCodes, mimeTypes | Filters such as 200, 3xx, !404, text/html, pdf. |
urlPattern | Regular expression the archived URL must match, e.g. .*\.pdf$. |
collapse | none, digest (changed content only), hour, day, month, year. |
sortOrder | oldest or newest first. |
{
"urls": ["python.org"],
"mode": "snapshots",
"collapse": "year",
"statusCodes": "200",
"maxResults": 20,
"includeContent": true,
"contentFormat": "markdown"
}
| Field | Description |
|---|---|
input | The URL or domain you asked for |
originalUrl | The URL as it was archived |
timestamp, archivedAt | Capture time (14-digit Wayback timestamp and ISO 8601 UTC) |
archiveUrl | Link to view the snapshot in the Wayback Machine |
rawArchiveUrl | Link to the original archived file without the Wayback toolbar |
statusCode, isOk, isRedirect | Archived HTTP status |
mimeType, contentLength, digest | Content type, archived size in bytes and content hash |
isRevisit, changed | Whether the capture repeats earlier content, and whether content changed since the previous capture |
urlKey, matchType | Normalized archive key and how the input was matched |
targetDate, distanceDays | Closest mode: the requested date and how far the capture is from it |
title, markdown / text / html | Page title and content (with includeContent) |
wordCount, contentChars, contentTruncated, extraction, contentError | Content details, or why content was not loaded |
{
"input": "python.org",
"matchType": "exact",
"originalUrl": "http://www.python.org:80/",
"timestamp": "19970501011626",
"archivedAt": "1997-05-01T01:16:26Z",
"archiveUrl": "https://web.archive.org/web/19970501011626/http://www.python.org:80/",
"rawArchiveUrl": "https://web.archive.org/web/19970501011626id_/http://www.python.org:80/",
"mimeType": "text/html",
"statusCode": 200,
"isOk": true,
"isRedirect": false,
"isRevisit": false,
"digest": "6NXXB545DYQEJSYQFULNPIVRRHBMOWZC",
"contentLength": 3366,
"urlKey": "org,python)/",
"changed": true,
"title": "Python Language Home Page",
"markdown": "Come to the Sixth Int'l Python Conference PythonWin 1.0 is out! (Python for Win 95, NT) The final version of Grail 0.3 is out Prior news. News and Announcements\n\nPython is an *interpreted, interactive, object-oriented, extensible* programming language. It provides an extraordinary combination of clarity and versatility...",
"contentChars": 2424,
"wordCount": 373,
"contentTruncated": false,
"extraction": "main",
"contentError": null
}
You pay $3.00 per 1,000 rows ($0.003 per snapshot or archived URL), plus a small amount of platform usage (compute and proxy traffic). Page content is included in the row price. Example: 1,000 snapshots cost about $3.00 in row fees; 100 snapshots with Markdown content cost about $0.30 plus a few cents of usage. There is no start fee, and inputs with no captures cost nothing.
Is it legal? The tool reads public data from the Internet Archive's public CDX and playback services, the same data anyone can see on web.archive.org. Respect the Internet Archive's terms and the copyright of the archived sites when you reuse content.
Do I need an account, API key or proxy? No. Requests go through datacenter proxies by default and are spread out politely.
How many results can I get? As many as the archive holds. Large domains can have millions of captures; set maxResults to 0 for no limit. Newest-first mode returns up to 10,000 captures per URL.
Why is a field empty? Repeat captures ("revisits") have no status of their own in the archive; the tool fills it from the earlier identical capture when that capture is in the same result set. Content is only loaded for successful text pages; contentError says why it was skipped.
Can I use it from an AI agent, the API or a schedule? Yes. Inputs are plain JSON with clear field names, outputs are flat rows with Markdown text, and the tool works through MCP, the REST API, webhooks and schedules.
Is it fast? Metadata queries take a few seconds to about a minute depending on the archive's load. Page content adds roughly one download per snapshot, run in parallel.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
urlsarrayRequiredURLs or domains
Pages or sites to look up in the Wayback Machine, one per line. Examples: example.com, https://example.com/pricing, *.example.com (all subdomains), example.com/blog/* (everything under a path).
modeenumOptionaldefault "snapshots"What to get
'Snapshots' lists every archived capture of the URL (or of a whole site with a wider match type). 'Archived URLs' lists each distinct URL ever archived on a domain, once, with its first capture. 'Closest snapshot' returns the one capture nearest to the target date, for example to see what a page said on a given day.
maxResultsintegerOptionaldefault 20Max results per URL
Stop after this many rows for each URL or domain. 0 means no limit (large domains can have millions of captures).
includeContentbooleanOptionaldefault falseInclude page content
Download each archived page in its original form and add its text as Markdown (or plain text / HTML). Ready for LLMs and RAG. Slower, because each snapshot is a separate download. Only successful (2xx) text pages are loaded.
Narrow down which captures are returned.
matchTypeenumOptionaldefault "auto"Match type
How the input is matched. Auto: exact URL for snapshots and closest, whole domain for archived URLs. Exact: only this URL. Prefix: every URL that starts with it. Host: every page on this host. Domain: the host and all its subdomains.
dateFromstringOptionalDate from
Only captures on or after this date. Formats: 2020, 2020-06, 2020-06-15 or 20200615.
dateTostringOptionalDate to
Only captures on or before this date (2020 means up to the end of 2020).
targetDatestringOptionalTarget date (closest mode)
For 'Closest snapshot': the date you want to see the page on, e.g. 2015-06-15. Combine with status code 200 to skip redirects and errors.
statusCodesstringOptionalHTTP status codes
Keep only captures with these archived HTTP statuses, comma-separated. Use 3xx for a whole class and !404 to exclude. Example: 200 or 200,301 or !404,!5xx.
mimeTypesstringOptionalContent types
Keep only these MIME types, comma-separated. A word without a slash matches anywhere: pdf finds application/pdf. Prefix with ! to exclude. Example: text/html or pdf or !image.
urlPatternstringOptionalURL pattern (regex)
Optional regular expression the archived URL must match, e.g. .*/blog/.* or .*\.pdf$ to list archived PDFs.
collapseenumOptionaldefault "none"Collapse captures
Remove near-duplicate captures in snapshot mode. Changed content keeps one capture each time the page content changed. Day, month and year keep the first capture per period.
sortOrderenumOptionaldefault "oldest"Order
Oldest first walks the whole history. Newest first returns the most recent captures (up to 10,000 per URL).
Used when 'Include page content' is on.
contentFormatenumOptionaldefault "markdown"Content format
Markdown keeps headings, lists and tables (best for LLMs). Text is plain text. HTML is the original archived markup.
mainContentOnlybooleanOptionaldefault trueMain content only
Keep only the main text and drop menus, footers and sidebars. Pages with little main text (home pages, link lists) are converted in full.
maxContentCharsintegerOptionaldefault 100000Max characters per page
Cut each page's content after this many characters (0 = no cut, up to 2,000,000).
maxConcurrencyintegerOptionaldefault 4Parallel page downloads
How many snapshots to download at once. The Wayback Machine rate-limits heavy users, so keep this low.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Requests go through datacenter proxies by default, which spreads load and avoids rate limits.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| input | any | Input |
| archivedAt | any | Captured |
| originalUrl | any | Archived URL |
| statusCode | any | Status |
| mimeType | any | Type |
| contentLength | any | Size (bytes) |
| changed | any | Changed |
| archiveUrl | any | Snapshot |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Snapshot or archived URL | Charged for each row saved: one archived snapshot, one archived URL or one closest capture. Page content is included. Inputs with no captures and failed lookups are free. | $0.003 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/wayback-machine-scraper').call({
"urls": [
"python.org"
],
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/wayback-machine-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/wayback-machine-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Archived snapshots of a site, oldest first.
Newest archived snapshots, one per day.
One snapshot per year with the archived content.
Unique archived URLs under a domain.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.