Website Change Detection, Visual Diff & Webpage to PDF
Pricing
from $3.00 / 1,000 screenshots
Website Change Detection, Visual Diff & Webpage to PDF
Watch pages and see what actually changed: a diff image, the percent of pixels that moved, and the before/after screenshots. Also takes full-page screenshots and webpage-to-PDF at any device size. Failed pages are free.
Pricing
from $3.00 / 1,000 screenshots
Rating
0.0
(0)
Developer
Tidyrun
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Watch pages and see what actually changed. Turn on Detect visual changes and each run compares every page with its previous capture, returning changed, the percent of pixels that moved, and a diff image with the changes highlighted — so you review one picture instead of two. Put it on a daily schedule and you have a monitor.
It is also a straightforward capture tool: full-page screenshots and webpage-to-PDF for many URLs across desktop, tablet and mobile in one run. Lazy images are loaded, cookie banners are hidden and sticky headers don't repeat down the page.
$3 per 1,000 pages captured, $1 per 1,000 change checks. Failed pages are free.
Quick start
- Add your URLs (bare domains like
example.comwork). - Pick Devices: desktop, laptop, wide, tablet, mobile.
- Optional: tick Also save a PDF or Detect visual changes.
- 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}
Watch 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.
Why this one
| Common problem | What happens here |
|---|---|
| One screenshot per run, one device | Paste a list of URLs and pick several devices; you get one row per URL × device. |
| Grey boxes where images should be | The page is scrolled first so lazy-loaded images render. |
| Cookie pop-ups covering the page | Common consent banners are hidden (OneTrust, Cookiebot, Didomi, Usercentrics and more). Nothing is clicked or accepted. |
| Sticky header repeated or covering content | Fixed and sticky elements are pinned so the full-page image reads naturally. |
| Emoji and non-Latin text show as boxes | Emoji, Thai, Chinese, Japanese and Korean fonts are installed. |
| Paying for pages that failed | Failed pages are never charged. Errors say what to fix. |
| Need to know when a page changes | Detect visual changes compares with the previous run and returns changed, changedPercent and a diff image. |
Use it from n8n
Install the Apify community node @apify/n8n-nodes-apify (it is already built into n8n Cloud), add an Apify node and point it at tidyrun/website-screenshot-api. A flow people build with it:
A Slack alert when a page changes
Schedule (every morning) → Apify: tidyrun/website-screenshot-api → Keep only changed pages → Post to Slack
Each run compares the new capture with the previous one, so the Slack step only fires when something actually moved. Send a message on a failed run too, or a broken monitor stays silent.
Pricing
| Event | Price |
|---|---|
| Screenshot (captures taller than 15,000 px count as 2) | $0.003 |
| $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~website-screenshot-api/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);
truncatedAtMaxHeighttells 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.