Bulk Website Screenshots + PDF + Visual Change Detection
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Features
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:
changePercentandisChangedper 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
| Field | What it does |
|---|---|
urls | Pages to capture, one per line (https:// added if missing) |
devices | desktop, laptop, tablet, mobile, custom (one screenshot per URL per device) |
fullPage | Whole scrollable page (default) or only the visible viewport |
format, quality | png, jpeg or webp; quality 1-100 for JPEG/WebP |
savePdf, pdfFormat, pdfLandscape, pdfMedia | Also print each URL to PDF (one PDF per URL) |
waitUntil, delayMs, waitForSelector | When to capture: load / DOM ready / network idle, extra delay, wait for an element |
scrollToBottom | Scroll first so lazy images load (full page) |
hideCookieBanners, hideChatWidgets | Hide known consent popups and chat widgets (best effort) |
hideSelectors, customCss | Your own CSS selectors to hide and CSS to inject |
blockAds | Block ~45 common ad and analytics hosts |
compareWithPrevious, changeThreshold, onlyChanged, stateKey | Monitoring mode (see below) |
customWidth, customHeight, customDeviceScaleFactor, customIsMobile | The custom device |
maxFullPageHeight | Cut very long pages (default 15,000 px) |
concurrency, maxRetries, navigationTimeoutSecs | Speed and robustness |
maxUrls | Cost cap per run |
proxyConfiguration | Optional 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"}
screenshotUrlandpdfUrlopen 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 arenull(baseline). - Failed pages produce a row with
errorset (not charged). Pages that answer with HTTP 4xx/5xx are captured for inspection, flagged witherror: "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 differentstateKeynames 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
hideSelectorsor 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
previousScreenshotUrllinks can expire.
Legal
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.