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 bulk website screenshots and downloadable PDFs with full-page, element, mobile, dark-mode, and overlay-hiding controls.

Pricing

from $0.24 / 1,000 capture extracteds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

4

Monthly active users

11 days ago

Last modified

Share

Capture downloadable screenshots and PDFs from public web pages in bulk, with full-page, element, mobile, dark-mode, overlay-hiding, timing, and proxy controls.

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.
  • Cleaner captures: Hide cookie banners, ads, sticky headers, and other matching elements before capture.
  • Rendering controls: Wait for client-rendered elements, choose light or dark mode, and tune JPEG quality.
  • Automation-ready records: Save output keys, public API record URLs, status codes, dimensions, page titles, and errors.
  • Failure-safe batches: Preserve completed captures and write a RUN_SUMMARY before the run time budget expires.

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.
  • Wait for content: Require a CSS selector to become visible before taking the capture.
  • Remove overlays: Hide selected cookie banners, ads, or sticky elements without modifying the source website.
  • 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
pdfUrlDirect API URL for the saved PDF record
widthCapture width in pixels
heightCapture height in pixels
fullPageHeightMeasured document height for full-page image requests
truncatedWhether a full-page image exceeded maxFullPageHeight and was safely clipped
formatOutput format: png, jpeg, or pdf
capturedAtISO timestamp for the capture attempt
errorError message when capture failed

Pricing

This Actor uses pay-per-event pricing. A run is charged once for startup and once for each screenshot or PDF that is successfully saved. Failed capture attempts are not charged as successful captures.

ChargeFreeBronzeSilverGoldPlatinumDiamond
Run start, once per run$0.005$0.005$0.005$0.005$0.005$0.005
1 successful capture$0.0004688$0.00040765$0.00031797$0.00024459$0.00016306$0.00011414
1,000 successful captures$0.4688$0.40765$0.31797$0.24459$0.16306$0.11414

Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.

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
Wait for selectorwaitForSelectorWait until client-rendered content becomes visible..results
Hide elementshideSelectorsHide matching overlays before capture.[".cookie-banner",".sticky-ad"]
JPEG qualityjpegQualitySet JPEG quality from 1 to 100.85
Color schemecolorSchemeEmulate light, dark, or no-preference.dark
Maximum full-page heightmaxFullPageHeightCap tall screenshots and report truncation instead of risking oversized-image failures.20000
Timeout per pagecaptureTimeoutSecsBound each navigation and capture attempt.60
Retries per pagemaxRetriesRetry transient proxy, navigation, and rendering failures.2
Capture time budgetrunTimeSecsStop starting new work early enough to save partial results and a summary.570
Maximum concurrent pagesmaxConcurrencyControl browser pages captured in parallel.2
Proxy configurationproxyConfigurationApify Proxy settings. Datacenter proxy is used by default because direct browser egress is unavailable in the cloud runtime.{"useApifyProxy":true}

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,
"hideSelectors": [".cookie-banner"],
"maxFullPageHeight": 20000,
"captureTimeoutSecs": 60,
"maxRetries": 2,
"maxConcurrency": 2,
"proxyConfiguration": {
"useApifyProxy": true
}
}

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,
"pdfUrl": null,
"width": 1366,
"height": 768,
"fullPageHeight": 768,
"truncated": false,
"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.
  • Prefer a selector for app content: waitForSelector is more predictable than a long fixed delay.
  • Hide known overlays: Add their CSS selectors to hideSelectors; the Actor does not try to guess consent choices.
  • Keep concurrency modest: Lower maxConcurrency for very long pages, PDFs, or memory-heavy sites.
  • Use the default proxy: Cloud captures use Apify Proxy because direct browser egress can be rejected by the runtime. Country and proxy-group choices remain configurable.
  • Check the key-value store: Screenshot and PDF files are stored there; the dataset keeps their keys and URLs.
  • Check RUN_SUMMARY: It reports requested, successful, failed, and time-budget-stopped counts for automation.

Limits and practical notes

  • The actor captures public HTTP/HTTPS pages.
  • Private, loopback, link-local, and reserved network destinations are rejected, including redirects and browser subrequests.
  • 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.
  • Full-page image captures taller than maxFullPageHeight are clipped and return truncated: true; this prevents browser failures on effectively unbounded pages.
  • A batch can finish with partial results when individual pages fail or the capture time budget is reached. The Actor fails only when no page was captured successfully.
  • 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

Claude CLI:

$claude mcp add --transport http apify 'https://mcp.apify.com/?tools=fetch_cat/website-screenshot-generator'

MCP client configuration:

{
"mcpServers": {
"apify": {
"type": "http",
"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."

FAQ

Are the image and PDF files downloadable?

Yes. Each successful row includes screenshotUrl or pdfUrl, and the file also appears in the run's key-value store.

Can it capture mobile and dark-mode pages?

Yes. Set a mobile viewport and isMobile: true; use colorScheme: "dark" for sites that honor the preferred color scheme.

Are failed pages charged as successful captures?

No. The capture event is charged only when the output file and its dataset row are saved successfully. The one-time run-start charge still applies.

Why was a full-page image truncated?

The page exceeded maxFullPageHeight. The row reports the measured fullPageHeight and returns truncated: true so automation can identify the clipped image.

No universal method can reliably remove every consent interface. Add the site's known CSS selectors to hideSelectors for a deterministic capture.

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:

Support

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.

For a reproducible support report, include the run ID or run URL, the exact input JSON, the expected output, the actual output the Actor returned, and one reproducible public URL when it is safe to share. Do not include passwords, session cookies, private URLs, or other secrets.

Privacy and data handling

This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses the inputs you provide and the public records needed to produce the documented dataset to produce the output dataset and sends requests to the website URLs you provide; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.