Website Screenshot Generator avatar

Website Screenshot Generator

Pricing

from $0.24 / 1,000 capture extracteds

Go to Apify Store
Website Screenshot Generator

Website Screenshot Generator

Capture screenshots and PDFs from public web pages in bulk.

Pricing

from $0.24 / 1,000 capture extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

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.

Ready-to-run examples

Open an example, review the input, and run it as-is or adjust the URLs:

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.

FieldDescription
urlRequested public URL
finalUrlFinal browser URL after redirects
statusCodeHTTP response status code when available
titleBrowser page title
screenshotKeyKey-value store key for PNG/JPEG captures
screenshotUrlAPI URL for the saved screenshot record
pdfKeyKey-value store key for PDF captures
widthCapture width in pixels
heightCapture height in pixels
formatOutput format: png, jpeg, or pdf
capturedAtISO timestamp for the capture attempt
errorError message when capture failed

Pricing

The actor uses pay-per-event pricing, so cost is tied to the run and successful captures.

EventPriceCharged when
start$0.005 per runOnce when the actor starts.
captureBRONZE $0.00040765 per successful captureEach successful screenshot or PDF capture saved to storage. This is about $0.41 per 1,000 captures on BRONZE, with lower per-capture prices on higher Apify plans.

Failed URLs are saved as error rows for debugging, but the capture event is charged only after a screenshot or PDF is saved successfully.

Use a small URL list for your first run, review the dataset and key-value store records, and then scale up. Exact live pricing is shown on the Apify actor page before you start a run.

Input configuration

SettingJSON keyUse it forExample
Page URLsstartUrlsRequired public HTTP/HTTPS pages to capture.[{"url":"https://example.com"}]
Screenshot typescreenshotTypeCapture viewport or fullPage images. Ignored for PDF output.fullPage
Output formatoutputFormatChoose png, jpeg, or pdf.png
ViewportviewportSet browser width, height, device scale, and mobile mode.{"width":1366,"height":768,"isMobile":false}
Wait untilwaitUntilChoose page load milestone before capture.load
Extra delay in millisecondsdelayMsWait after load for animations or late-rendered widgets.1000
Element selectorselectorCapture only the first matching visible element for image output.main
Maximum concurrent pagesmaxConcurrencyControl browser pages captured in parallel.2
Proxy configurationproxyConfigurationOptional Apify Proxy settings for sites that need them.{"useApifyProxy":false}

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.

Explore related actors from the same Apify account:

Changelog

  • 0.1 - Initial version for bulk public page screenshots, selector captures, and PDF snapshots.

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.