Website Screenshot Generator

Capture screenshots and PDFs from public web pages in bulk.

Data fields

FieldTypeDescription
urllinkURL exported in the dataset view.
finalUrllinkFinal URL exported in the dataset view.
statusCodevalueStatus exported in the dataset view.
titlevalueTitle exported in the dataset view.
screenshotKeyvalueScreenshot key exported in the dataset view.
screenshotUrllinkScreenshot URL exported in the dataset view.
pdfKeyvaluePDF key exported in the dataset view.
widthvalueWidth exported in the dataset view.

Input preview

startUrlsPage URLs *
screenshotTypeScreenshot type
outputFormatOutput format
viewportViewport
waitUntilWait until
delayMsExtra delay in milliseconds

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Capture screenshots and PDFs from public web pages in bulk, with viewport, full-page, selector, delay, and proxy options.

Use it to create visual QA evidence, SEO audit snapshots, client reports, web archives, or browser-rendered page captures that can be downloaded from Apify key-value store records and tracked in a dataset.

At a glance

  • Bulk page capture: Save PNG, JPEG, or PDF outputs for one or many public URLs.
  • Viewport control: Capture desktop, mobile, tablet, or custom browser dimensions.
  • Full-page screenshots: Capture the visible viewport or the full scrollable page.
  • Element screenshots: Use a CSS selector to capture only the first matching visible element.
  • Automation-ready records: Save output keys, public API record URLs, status codes, dimensions, page titles, and errors.

What can it do?

Website Screenshot Generator launches a browser, visits each public URL, waits for your chosen page-load milestone, saves a screenshot or PDF to the default key-value store, and writes one dataset row per requested URL.

  • Capture images: Save viewport or full-page PNG/JPEG screenshots.
  • Capture PDFs: Render pages to A4 PDF with backgrounds.
  • Capture elements: Save screenshots for a selector such as h1, .hero, or main.
  • Wait for rendering: Choose domcontentloaded, load, or networkidle, then add a small delay for late widgets.
  • Track failures: Error rows include the URL, final URL when known, dimensions, format, timestamp, and error message.

Common workflows

  • Visual regression baselines: Capture public pages before and after releases or redesigns.
  • SEO audit evidence: Save screenshots of landing pages, search templates, public forms, or documentation pages.
  • Client deliverables: Generate PNG/JPEG screenshots or PDF snapshots for reports.
  • Content monitoring: Schedule captures and compare page appearance over time.
  • Agent visual context: Pair screenshots with extracted page text for QA, research, and RAG review workflows.

What data do you get?

The actor saves screenshots/PDFs in the default key-value store and writes a dataset row for each requested URL.

Field Description
url Requested public URL
finalUrl Final browser URL after redirects
statusCode HTTP response status code when available
title Browser page title
screenshotKey Key-value store key for PNG/JPEG captures
screenshotUrl API URL for the saved screenshot record
pdfKey Key-value store key for PDF captures
width Capture width in pixels
height Capture height in pixels
format Output format: png, jpeg, or pdf
capturedAt ISO timestamp for the capture attempt
error Error message when capture failed

Example input

{
  "startUrls": [
    { "url": "https://example.com" },
    { "url": "https://docs.apify.com" }
  ],
  "screenshotType": "fullPage",
  "outputFormat": "png",
  "viewport": {
    "width": 1366,
    "height": 768,
    "deviceScaleFactor": 1,
    "isMobile": false
  },
  "waitUntil": "load",
  "delayMs": 1000,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}

Example output

{
  "url": "https://example.com/",
  "finalUrl": "https://example.com/",
  "statusCode": 200,
  "title": "Example Domain",
  "screenshotKey": "0001-example-com.png",
  "screenshotUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/0001-example-com.png",
  "pdfKey": null,
  "width": 1366,
  "height": 768,
  "format": "png",
  "capturedAt": "2026-07-03T10:00:00.000Z",
  "error": null
}

Tips for reliable captures

  • Start with one URL: Confirm the site renders correctly before adding a large list.
  • Use load first: Switch to networkidle only when the page needs extra network quiet time.
  • Add a small delay: Use delayMs for animations, cookie banners, or client-rendered content.
  • Keep concurrency modest: Lower maxConcurrency for very long pages, PDFs, or memory-heavy sites.
  • Check the key-value store: Screenshot and PDF files are stored there; the dataset keeps their keys and URLs.

Limits and practical notes

  • The actor captures public HTTP/HTTPS pages.
  • Private, login-gated, paywalled, or bot-blocked pages may fail or show limited content.
  • CSS selector captures require the target element to be visible within the timeout.
  • PDF output ignores screenshotType and selector.
  • Some sites render different content by country, cookie state, viewport, or bot detection.

API usage

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~website-screenshot-generator/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://example.com"}],"screenshotType":"fullPage","outputFormat":"png"}'

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/website-screenshot-generator').call({
  startUrls: [{ url: 'https://example.com' }],
  screenshotType: 'fullPage',
  outputFormat: 'png'
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("fetch_cat/website-screenshot-generator").call(run_input={
    "startUrls": [{"url": "https://example.com"}],
    "screenshotType": "fullPage",
    "outputFormat": "png",
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

MCP and AI agents

Use this actor from MCP-compatible tools through Apify MCP Server.

MCP URL:

https://mcp.apify.com/?tools=fetch_cat/website-screenshot-generator

Example prompts:

  • "Capture full-page screenshots for these public landing pages."
  • "Save a PDF snapshot of this documentation page."
  • "Capture the hero section from this URL using a CSS selector."

Legality and responsible use

This actor captures publicly accessible web pages.

Use screenshots and PDFs responsibly, follow the target website's terms, Apify's terms, and applicable laws, and do not use the actor to bypass access controls.

Need help?

If a URL produces an error row, start with a single page, use waitUntil: "load", add a small delayMs, and inspect statusCode, finalUrl, and error.

Common questions

Search-intent answers for buyers comparing Apify actors, API alternatives, and scheduled data workflows.

Can I export Website Screenshot Generator results to CSV, JSON, Excel, or API?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, API access, webhooks, and scheduled exports.

Can this work as an API alternative?

Yes. Use the Apify Actor API for runs and the dataset API for results. The focused MCP URL also exposes this actor for agent workflows.

Does this page replace the Apify actor page?

No. This catalog helps discovery and comparison. Running, billing, storage, and support continue through Apify.