Website Screenshot API – Full Page & PDF avatar

Website Screenshot API – Full Page & PDF

Pricing

from $3.00 / 1,000 screenshots

Go to Apify Store
Website Screenshot API – Full Page & PDF

Website Screenshot API – Full Page & PDF

Full-page website screenshots and PDFs for many URLs on desktop, tablet and mobile. Lazy images loaded, cookie banners hidden. Optional visual change alerts. $3 per 1,000 screenshots; failed pages free.

Pricing

from $3.00 / 1,000 screenshots

Rating

0.0

(0)

Developer

Tidyrun

Tidyrun

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Capture full-page screenshots and PDFs of many URLs on desktop, tablet and mobile in one run. Lazy images are loaded, cookie banners are hidden and sticky headers don't repeat down the page. Turn on change detection and every run tells you which pages changed visually since the last one, with a highlighted diff image.

$3 per 1,000 screenshots. Failed pages are free.

Quick start

  1. Add your URLs (bare domains like example.com work).
  2. Pick Devices: desktop, laptop, wide, tablet, mobile.
  3. Optional: tick Also save a PDF or Detect visual changes.
  4. Click Start. The Output tab shows every screenshot as a preview with a link to the full image.

Input example:

{
"urls": [{ "url": "https://stripe.com" }, { "url": "https://www.python.org" }],
"devices": ["desktop", "mobile"],
"pdf": true
}

One output row per URL and device:

{
"url": "https://www.python.org/",
"device": "desktop",
"statusCode": 200,
"title": "Welcome to Python.org",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/.../records/www-python-org-3f1c2a9b7e-desktop.png",
"imageWidth": 1366,
"imageHeight": 2546,
"truncatedAtMaxHeight": false,
"pdfUrl": "https://api.apify.com/v2/key-value-stores/.../records/www-python-org-3f1c2a9b7e-print.pdf",
"error": null
}

Why this one

Common problemWhat happens here
One screenshot per run, one devicePaste a list of URLs and pick several devices; you get one row per URL × device.
Grey boxes where images should beThe page is scrolled first so lazy-loaded images render.
Cookie pop-ups covering the pageCommon consent banners are hidden (OneTrust, Cookiebot, Didomi, Usercentrics and more). Nothing is clicked or accepted.
Sticky header repeated or covering contentFixed and sticky elements are pinned so the full-page image reads naturally.
Emoji and non-Latin text show as boxesEmoji, Thai, Chinese, Japanese and Korean fonts are installed.
Paying for pages that failedFailed pages are never charged. Errors say what to fix.
Need to know when a page changesDetect visual changes compares with the previous run and returns changed, changedPercent and a diff image.

Monitor pages for visual changes

Turn on Detect visual changes and put the Actor on a Schedule (for example daily). The first run saves a baseline; every later run compares against the previous screenshot of the same URL and device:

"change": { "status": "compared", "changed": true, "changedPercent": 3.42, "previousCapturedAt": "2026-10-08T09:00:00.000Z", "diffUrl": "https://api.apify.com/v2/key-value-stores/.../records/example-com-1a2b3c4d5e-desktop-diff.png" }

Connect a Slack, email or webhook integration to get alerted when changed is true. Baselines live in a named key-value store in your own account (screenshot-baselines by default); use a different Baseline store name to keep separate monitors.

Pricing

EventPrice
Screenshot (captures taller than 15,000 px count as 2)$0.003
PDF$0.003
Change check (comparison with the previous run)$0.001

So 1,000 full-page screenshots cost $3; only very long pages (over 15,000 px captured) count twice. Set Maximum height to 15,000 to never pay double. Pages that fail to load are free, and the run stops cleanly at your maximum charge limit.

Call it from your code

curl -X POST "https://api.apify.com/v2/acts/tidyrun~web-screenshot/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls":[{"url":"https://example.com"}]}'

Tips

  • Full-page shots stop at Maximum height (20,000 px by default); truncatedAtMaxHeight tells you when that happened.
  • Use JPEG for much smaller files when you don't need pixel-perfect images.
  • If a page keeps loading forever (chat widgets, live tickers), set Wait until to "DOM ready" and add an Extra delay.

Responsible use

This Actor opens public pages in a normal browser, like a visitor would. It does not log in, solve CAPTCHAs or get around bot protection; pages that block automated browsers are reported as errors and not charged. Make sure you have the right to capture and store the pages you list, and respect each site's terms.