Website Screenshot Generator avatar

Website Screenshot Generator

Pricing

from $1.36 / 1,000 item extracteds

Go to Apify Store
Website Screenshot Generator

Website Screenshot Generator

Capture public webpages in batches as PNG or JPEG with viewport, full-page, image, timing, and navigation metadata for visual QA and archiving.

Pricing

from $1.36 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

10 days ago

Last modified

Share

Capture website screenshots from one or many public HTTP(S) URLs as PNG or JPEG files. Each run stores the images in its Apify key-value store and returns typed metadata—including the final URL, HTTP status, page title, dimensions, byte size, navigation time, and capture time—in the default dataset.

Use it for recurring visual QA, release evidence, page previews, design reviews, and timestamped webpage archives. It renders JavaScript in maintained Chromium, supports full-page or viewport-only captures, and keeps a failed URL from discarding successful images elsewhere in the same batch.

What does Website Screenshot Generator do?

The Actor opens every supplied public URL in an isolated browser context, waits for your selected navigation milestone, optionally pauses for delayed UI, hides configured CSS elements, and captures the rendered page.

It can:

  • process up to 100 URLs per run;
  • create lossless PNG or compact JPEG images;
  • capture the full scrollable page or only the visible viewport;
  • emulate desktop or mobile-size viewports;
  • produce high-resolution images with a device scale factor up to 3;
  • hide cookie banners, chat widgets, or other known selectors;
  • record successful and failed requests in one consistent dataset;
  • reject localhost, private-network, credential-bearing, and non-HTTP(S) URLs.

Who is it for?

QA and engineering teams capture pages before or after releases and attach durable image evidence to CI or issue workflows.

Agencies and designers review landing pages at consistent viewport sizes across client sites.

Content and compliance teams create timestamped snapshots of public pages for authorized archiving.

Developers and data teams generate preview images and pass capture metadata into webhooks, spreadsheets, databases, or reporting pipelines.

Why use this Actor?

Unlike a single-image utility, this Actor treats screenshots as structured batch output. Every requested URL gets a typed result row, images use deterministic per-run keys, and partial failures remain diagnosable.

Browser options are explicit rather than hidden: you control viewport, scale, format, JPEG quality, full-page mode, readiness condition, delay, timeout, user agent, and selectors to hide. Images and metadata are separated so downstream systems can query lightweight rows before downloading large files.

Quick start

  1. Open the Actor in Apify Console.
  2. Add one or more public webpage URLs under Webpage URLs.
  3. Keep Capture full page enabled for an entire-page archive, or disable it for a viewport screenshot.
  4. Choose PNG or JPEG and set the viewport.
  5. Click Start.
  6. Open Screenshot metadata for result rows and Screenshot files for the images.

Minimal input:

{
"startUrls": [{ "url": "https://apify.com" }],
"fullPage": true,
"format": "png",
"maxItems": 1
}

Input parameters

FieldTypeDefaultDescription
startUrlsarrayrequiredPublic HTTP(S) webpages to capture.
viewportWidthinteger1440Viewport width from 320 to 3840 CSS pixels.
viewportHeightinteger900Viewport height from 240 to 2160 CSS pixels.
deviceScaleFactornumber1Pixel density from 1 to 3.
fullPagebooleantrueCapture the scrollable page rather than the visible viewport.
formatstringpngpng or jpeg.
qualityinteger85JPEG quality from 1 to 100; ignored for PNG.
waitUntilstringdomcontentloadedload, domcontentloaded, networkidle, or commit.
delayMsinteger0Additional post-navigation wait, up to 30 seconds.
navigationTimeoutSecsinteger45Per-page navigation timeout from 5 to 120 seconds.
userAgentstringbrowser defaultOptional custom browser User-Agent.
hideSelectorsstring[][]Up to 50 CSS selectors made invisible before capture.
maxItemsinteger20Maximum supplied URLs processed, up to 100.

Capture a mobile JPEG

This example creates a compact viewport-only JPEG with a two-times device scale factor:

{
"startUrls": [{ "url": "https://github.com/apify" }],
"viewportWidth": 390,
"viewportHeight": 844,
"deviceScaleFactor": 2,
"fullPage": false,
"format": "jpeg",
"quality": 80,
"maxItems": 1
}

Hide banners and delayed widgets

If you know stable selectors for overlays, provide them in hideSelectors. Elements are made invisible without changing the surrounding layout.

{
"startUrls": [{ "url": "https://docs.apify.com/platform" }],
"waitUntil": "domcontentloaded",
"delayMs": 1000,
"hideSelectors": [".cookie-banner", "[aria-label='Open chat']"],
"fullPage": true
}

Invalid selectors or selectors absent from a page do not create images by themselves. Test your exact target because website markup changes.

Output data

The default dataset contains one row per processed URL. Successful rows link to the binary image in the run key-value store. Failed rows keep the requested URL, settings, timestamp, and a bounded error message.

FieldMeaning
sourceUrl, finalUrlRequested URL and final browser URL after redirects.
status, statusCodeCapture result and main navigation HTTP status.
title, contentTypeRendered document title and response content type.
screenshotKey, screenshotUrlImage key and Apify API download URL.
format, width, heightImage format and capture dimensions in CSS pixels.
viewportWidth, viewportHeight, deviceScaleFactorBrowser settings used.
fullPage, imageBytesCapture mode and stored file size.
navigationDurationMs, captureDurationMsBrowser navigation and image generation timings.
errorError detail for failed rows; otherwise null.
capturedAtISO 8601 processing timestamp.

Example output

A real local full-page capture produced this shape (the store ID below is illustrative):

{
"sourceUrl": "https://apify.com/",
"finalUrl": "https://apify.com/",
"status": "succeeded",
"statusCode": 200,
"title": "Apify: The largest marketplace of trusted tools for AI",
"screenshotKey": "screenshot-001-59c5c2b19965.png",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/screenshot-001-59c5c2b19965.png",
"format": "png",
"width": 1440,
"height": 9618,
"viewportWidth": 1440,
"viewportHeight": 900,
"deviceScaleFactor": 1,
"fullPage": true,
"imageBytes": 905696,
"navigationDurationMs": 933,
"captureDurationMs": 1300,
"contentType": "text/html; charset=utf-8",
"error": null,
"capturedAt": "2026-08-25T06:15:00.000Z"
}

How much does it cost to capture website screenshots?

Pay-per-event pricing has a $0.005 run start and one item event for each dataset record produced. The BRONZE item price is $0.002268 per requested URL; volume tiers reduce the item price on higher Apify plans. Failed URL records are also dataset items because they preserve actionable diagnostics.

At the BRONZE rate:

  • 1 URL: about $0.007268 total;
  • 10 URLs: about $0.02768 total;
  • 100 URLs: about $0.2318 total.

These examples describe Actor charges. Final live prices appear in Apify Console before a run, and the Actor's measured browser infrastructure cost is included rather than billed as a separate event.

Recurring visual QA and archives

Save the input as an Apify Task, then attach a schedule to capture the same pages daily, weekly, or after a deployment. Each run has separate dataset and key-value-store resources, creating timestamped capture history.

The Actor does not compare pixels, detect changes, annotate screenshots, or send alerts. Connect its output to your own comparison step or use Website HTML & Text Change Monitor when text and HTML diffs are the actual requirement.

Integrations and workflows

  • CI/CD: start a Task after deployment and retain the run URL as release evidence.
  • Webhooks: trigger processing when a run succeeds and send dataset rows to another service.
  • Google Sheets: export metadata rows while keeping large images in Apify storage.
  • Python or Node.js: download only screenshots whose status is succeeded.
  • Zapier or Make: route failed rows for inspection and successful image URLs into reports.
  • Apify schedules: maintain an authorized series of public-page snapshots.

Run with the Apify API

Replace YOUR_TOKEN with an Apify API token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~website-screenshot-generator/runs?token=YOUR_TOKEN&waitForFinish=120" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://apify.com"}],"fullPage":true,"format":"png","maxItems":1}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/website-screenshot-generator').call({
startUrls: [{ url: 'https://apify.com' }],
fullPage: true,
format: 'png',
maxItems: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation-lab/website-screenshot-generator").call(run_input={
"startUrls": [{"url": "https://apify.com"}],
"fullPage": True,
"format": "png",
"maxItems": 1,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with MCP and AI agents

Claude Code

Add the Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/website-screenshot-generator"

Claude Desktop, Cursor, and VS Code

Use this equivalent MCP configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/website-screenshot-generator"
}
}
}

Example prompts:

  • “Capture full-page PNG screenshots of these three public release pages at 1440×900.”
  • “Create a mobile JPEG of this landing page and return the image URL and navigation timing.”
  • “Run my saved screenshot Task and list any failed capture rows.”

Reliability, limits, and failure behavior

The Actor processes URLs sequentially to keep browser memory predictable. JavaScript-heavy pages, very tall pages, large device scale factors, and PNG output increase runtime, memory, and file size.

A page may render cookie dialogs, regional variants, personalized experiments, or anti-bot challenges. The image records what Chromium received. This Actor does not bypass authentication or CAPTCHA and does not expose an automatic residential-proxy fallback.

One failed URL produces a failed row while later URLs continue. If every URL fails, the run exits with an error after saving diagnostic rows. Redirects to private or local infrastructure are outside the supported public-web workflow.

Troubleshooting

The page times out with networkidle. Use domcontentloaded or load; many analytics-heavy pages keep network connections open indefinitely.

A dynamic component is missing. Add a bounded delayMs, preferably 500–3000 ms, and verify the result. Long arbitrary delays increase cost.

The screenshot includes a cookie banner. Add its stable CSS selector to hideSelectors. The Actor cannot infer consent behavior safely.

The image is too large. Use JPEG, lower quality, reduce deviceScaleFactor, or disable fullPage.

The run rejects my URL. Only anonymous public HTTP(S) pages are supported. Localhost, private/reserved network addresses, embedded URL credentials, and other protocols are rejected.

Legality and responsible use

Capture only pages you are authorized to access and store. Respect website terms, copyright, privacy rights, robots guidance where applicable, and applicable laws. Do not use screenshots to collect private account content, evade access controls, impersonate users, or archive sensitive personal information without a lawful basis.

The user controls submitted URLs and retention. Review Apify storage retention settings when images are used for compliance or archival workflows.

FAQ

Does this Actor create screenshot history?

Each scheduled run creates a timestamped set of images and metadata, so you can retain authorized historical captures. It does not discover old screenshots from third-party archives or compare captures automatically.

Can it capture logged-in pages?

No. The input intentionally supports anonymous public URLs and does not accept account credentials or cookies.

Are failed captures charged?

Each emitted dataset record uses the item event, including a failed row that contains diagnostics. The run fails when no URL succeeds.

Why are image dimensions expressed in CSS pixels?

width and height describe the captured page or viewport before deviceScaleFactor. A scale factor of 2 creates approximately twice as many output pixels in each dimension.

Can I capture PDFs or video?

The Actor is designed for rendered public webpages. It does not download original PDF/video assets or record motion. Use a dedicated downloader for those formats.