Bulk Website Screenshots + PDF + Visual Change Alerts · Apify
Bulk Website Screenshots + PDF + Visual Change Detection avatar

Bulk Website Screenshots + PDF + Visual Change Detection

Pricing

Pay per event

Go to Apify Store
Bulk Website Screenshots + PDF + Visual Change Detection

Bulk Website Screenshots + PDF + Visual Change Detection

Screenshot hundreds of URLs per run: full page or viewport, desktop/laptop/tablet/mobile, PNG/JPEG/WebP, optional PDF. Hides cookie banners and chat widgets. Schedule it to detect visual changes since the last run.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Lindenbyte Studio

Lindenbyte Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Features

Limited permissions

Share

Take screenshots of hundreds of websites in one run: full page or above the fold, on desktop, laptop, tablet and mobile, as PNG, JPEG or WebP, with an optional PDF of each page. Cookie banners and chat bubbles are hidden automatically. Schedule it and it becomes a visual website monitor: each screenshot is compared with the previous run and flagged when the page changed.

Why this one

  • Many URLs per run: paste a list of 10 or 10,000 URLs. No need to start one run per URL.
  • Every device in one go: Desktop 1920x1080, Laptop 1366x768, Tablet 820x1180 @2x (iPad-like), Mobile 390x844 @2x (iPhone-like user agent and touch), or any custom size and pixel ratio.
  • Clean screenshots: hides common cookie/consent popups (OneTrust, Cookiebot, Usercentrics, Didomi, Quantcast, Google consent, Sourcepoint, CookieYes, Complianz and others) and chat widgets (Intercom, HubSpot, Drift, Crisp, Zendesk, Tidio and others). Add your own CSS selectors or custom CSS. Optional ad and tracker blocking.
  • Lazy images load: the page is scrolled to the bottom before a full-page capture, so lazy-loaded images and sections are actually there.
  • Full page or viewport, PNG (lossless), JPEG or WebP with a quality setting.
  • PDF export: A4, Letter, Legal, A3 or Tabloid, portrait or landscape, screen or print styles.
  • Visual change detection: changePercent and isChanged per URL and device versus the previous run, with a threshold. Turn on "only changed pages" and a scheduled run outputs (and charges) only the pages that changed.
  • Fair billing: failed pages and HTTP error pages (404, 403, 5xx) are not charged.

Use cases

  • Website monitoring: see when a competitor changes pricing, homepage, landing pages or terms. Get a screenshot of the new version and of the previous one.
  • Visual QA and regression checks: capture every page of your site on every device after a deploy.
  • Agencies and SEO: client reports, before/after redesign snapshots, mobile-friendliness checks.
  • Archiving and compliance: dated full-page screenshots and PDFs of pages, ads and policies.
  • Thumbnails and previews for directories, link previews and dashboards.
  • AI and data pipelines: page images for vision models, alongside the title, final URL and HTTP status.

Input

FieldWhat it does
urlsPages to capture, one per line (https:// added if missing)
devicesdesktop, laptop, tablet, mobile, custom (one screenshot per URL per device)
fullPageWhole scrollable page (default) or only the visible viewport
format, qualitypng, jpeg or webp; quality 1-100 for JPEG/WebP
savePdf, pdfFormat, pdfLandscape, pdfMediaAlso print each URL to PDF (one PDF per URL)
waitUntil, delayMs, waitForSelectorWhen to capture: load / DOM ready / network idle, extra delay, wait for an element
scrollToBottomScroll first so lazy images load (full page)
hideCookieBanners, hideChatWidgetsHide known consent popups and chat widgets (best effort)
hideSelectors, customCssYour own CSS selectors to hide and CSS to inject
blockAdsBlock ~45 common ad and analytics hosts
compareWithPrevious, changeThreshold, onlyChanged, stateKeyMonitoring mode (see below)
customWidth, customHeight, customDeviceScaleFactor, customIsMobileThe custom device
maxFullPageHeightCut very long pages (default 15,000 px)
concurrency, maxRetries, navigationTimeoutSecsSpeed and robustness
maxUrlsCost cap per run
proxyConfigurationOptional Apify Proxy (off by default)

Example: desktop + mobile screenshots and PDFs

{
"urls": ["https://example.com", "https://crawlee.dev", "https://www.theguardian.com/international"],
"devices": ["desktop", "mobile"],
"format": "png",
"savePdf": true
}

Example: daily visual change monitor

{
"urls": ["https://competitor.com/pricing", "https://competitor.com/"],
"devices": ["desktop"],
"onlyChanged": true,
"changeThreshold": 1,
"hideSelectors": [".rotating-banner", "#live-clock"]
}

Create a schedule (Console > Schedules) and add an integration (email, Slack, webhook) to be notified with the changed pages.

Output

One row per URL and device (real example from a test run; on Apify the URLs contain your run's key-value store ID):

{
"url": "https://example.com/",
"device": "desktop",
"finalUrl": "https://example.com/",
"statusCode": 200,
"title": "Example Domain",
"width": 1920,
"height": 1080,
"viewportWidth": 1920,
"viewportHeight": 1080,
"deviceScaleFactor": 1,
"pageHeight": 1080,
"truncated": false,
"format": "png",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/example-com-desktop-b559c7ed.png",
"screenshotKey": "example-com-desktop-b559c7ed.png",
"bytes": 90088,
"pdfUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/example-com-print-b559c7ed.pdf",
"pdfKey": "example-com-print-b559c7ed.pdf",
"pdfBytes": 91727,
"changePercent": 0,
"isChanged": false,
"previousCapturedAt": "2026-11-13T10:36:30.781Z",
"previousScreenshotUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/example-com-desktop-b559c7ed.png",
"warnings": [],
"error": null,
"capturedAt": "2026-11-13T10:41:16.940Z"
}
  • screenshotUrl and pdfUrl open the files directly. The images are also in the run's key-value store, and the dataset table shows a preview.
  • The PDF is attached to the first device's row of each URL. Its print layout depends on the paper size, not the device.
  • The monitoring fields (changePercent, isChanged, previousCapturedAt, previousScreenshotUrl) appear only in monitoring mode. On the first capture of a URL they are null (baseline).
  • Failed pages produce a row with error set (not charged). Pages that answer with HTTP 4xx/5xx are captured for inspection, flagged with error: "HTTP 404" and not charged.
  • A run summary (counts, failures) is saved to the key-value store record SUMMARY.

Monitoring mode (visual change detection)

With compareWithPrevious (or onlyChanged) on, each screenshot is reduced to a small grayscale thumbnail and compared with the previous run's thumbnail for the same URL, device and capture mode. changePercent is the share of thumbnail pixels that changed. Extra or missing page length counts as changed. isChanged is true when it reaches changeThreshold (default 1%).

  • History is kept in your account's named key-value store bulk-screenshots-state. Use different stateKey names for independent monitors. Change the name to start a fresh baseline.
  • With onlyChanged, unchanged pages are compared but not saved or output.
  • Animations are frozen and the caret is hidden for stable captures. Pages with rotating carousels, live tickers, ads or clocks still change between runs. Hide those parts with hideSelectors or raise the threshold.

Pricing

Pay per result: $0.003 per screenshot saved, $0.0015 per PDF, $0.0025 per GB of run memory at start ($0.005 at the default 2 GB). Failed pages and HTTP error pages are free. In "only changed" mode an unchanged page costs $0.001 (it was still captured and compared). Set a maximum charge per run in the run options to cap your cost.

Limits (honest)

  • Cookie banner hiding is best effort. It covers the major consent platforms and common patterns, but custom banners on some sites remain. Add their selectors to hideSelectors. Banners are hidden, never accepted or rejected.
  • Bot protection: sites behind aggressive bot walls (some news, ticketing and retail sites) can return 401/403 or a challenge page. Those rows are flagged and not charged. Apify Proxy (residential) helps for some sites. CAPTCHAs are not solved.
  • Very long pages are cut at maxFullPageHeight (default 15,000 px). Retina devices are also limited to 16,384 image pixels, which is 8,192 CSS px at @2x. Endless-scroll feeds are always cut.
  • Login-only pages are not supported (no cookies or credentials input in this version).
  • Full-page screenshots of heavy sites are large: a 15,000 px PNG can be 5-10 MB. Use JPEG or WebP to save storage.
  • Screenshots are rendered by headless Chromium. Fonts, video frames and WebGL can differ slightly from a desktop browser.
  • Each run's files live in that run's key-value store and follow your account's data retention. Old previousScreenshotUrl links can expire.

You choose the URLs. Capture only pages you are allowed to access, and respect the websites' terms and copyright when you reuse the images. This Actor does not bypass logins or paywalls and does not solve CAPTCHAs. Not affiliated with any website it captures.