Website Visual Monitor
Pricing
Pay per usage
Website Visual Monitor
takes screenshots and compare them visually to baselines, and generating diff images with change statistics.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Kareem Amr
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
What does Website Visual Monitor do?
Website Visual Monitor is an Apify Actor that automatically monitors websites for visual changes. It takes screenshots of your target URLs, compares them against previously stored baselines, generates visual diff images highlighting exactly what changed, and returns detailed change statistics.
Simply provide a list of URLs and run the Actor. On the first run it creates baselines. On every subsequent run it detects visual differences, calculates the percentage change, and flags pages that exceed your configured threshold. Perfect for regression testing, website monitoring, competitor change tracking, and automated visual QA.
Why use Website Visual Monitor?
- Visual regression testing — Automatically detect unwanted UI changes before they reach production
- Competitor monitoring — Track when competitors make visual changes to their landing pages, pricing pages, or product catalog
- Content freshness — Verify that your own website content is rendering correctly across environments
- SLA compliance — Monitor third-party integrations and embedded content for unexpected visual changes
- Apify platform advantages — Schedule runs via cron, access results via REST API, integrate with Zapier/Make/GitHub, and store screenshots in the built-in key-value store
How to use Website Visual Monitor
- Install dependencies — Run
pip install -r requirements.txtandplaywright install chromium - Run locally — Execute
apify runorpython -m my_actorto test with sample input - Configure input — Edit the default input in
.actor/input_schema.jsonor provide input via the Apify Console - Deploy to Apify — Run
apify pushto deploy and build the Actor on the Apify platform - Schedule monitoring — Use Apify Console to schedule periodic runs (daily, hourly, etc.)
- Review results — Check the Output tab for change statistics and the key-value store for diff images
Input
The Actor accepts the following input fields:
| Field | Type | Default | Description |
|---|---|---|---|
urls | array of strings | — | List of website URLs to monitor (required) |
fullPage | boolean | true | Capture full-page or viewport-only screenshots |
mobile | boolean | false | Emulate mobile viewport (390x844) or desktop (1366x768) |
delay | integer | 0 | Extra wait time in milliseconds after page load |
threshold | number | 1.0 | Minimum pixel difference percentage to flag as changed |
Sample input JSON
{"urls": ["https://example.com","https://apify.com"],"fullPage": true,"mobile": false,"delay": 2000,"threshold": 2.0}
Output
The Actor pushes one dataset item per URL with the following structure:
{"url": "https://example.com","changed": true,"differencePercent": 12.45,"threshold": 1.0,"timestamp": "2026-06-17T12:00:00+00:00","baselineCreated": false,"status": "changed","screenshotKey": "d41d8cd98f00b204e9800998ecf8427e-current.png","diffKey": "d41d8cd98f00b204e9800998ecf8427e-diff.png"}
Field descriptions
| Field | Description |
|---|---|
url | The monitored URL |
changed | Boolean indicating if the page changed beyond the threshold |
differencePercent | Percentage of pixels that differ between baseline and current screenshot |
threshold | The threshold used for this comparison |
timestamp | ISO 8601 timestamp of the comparison |
baselineCreated | true on first run when no previous baseline existed |
status | One of baseline_created, changed, unchanged, or error |
screenshotKey | Key in the key-value store to access the current screenshot |
diffKey | Key in the key-value store to access the diff image (null if baseline was just created) |
error | Error message if processing failed for this URL |
Screenshots and diff images
All images are stored in the Actor's default key-value store:
{md5(url)}-current.png— Most recent screenshot{md5(url)}-previous.png— Previous screenshot (used as comparison baseline){md5(url)}-diff.png— Visual diff highlighting changed pixels in red
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel from the Apify Console.
Pricing / Cost estimation
Website Visual Monitor uses Playwright (full browser) for each URL, so each URL consumes compute time proportional to page load and screenshot processing. For most static websites, each URL takes 5-15 seconds. The Actor runs within the Apify free tier for light usage. Monitor up to 10 URLs on a daily schedule and stay well within the free tier's monthly compute grant.
Tips and advanced options
- Set an appropriate threshold — Start with
1.0and adjust. Dynamic content (ads, live counters, dynamic backgrounds) may need a higher threshold. Static pages can use a lower one. - Use delay for dynamic pages — Pages with animations or lazy-loaded images may need a 2-3 second delay to render fully.
- Full page vs viewport — Full-page captures are more thorough but produce larger images. Use viewport-only for faster runs if you only care about the above-the-fold area.
- Baseline auto-update — After each comparison, the current screenshot replaces the previous baseline automatically. This means the Actor tracks incremental changes, not changes since the very first run.
- Concurrent monitoring — For large numbers of URLs, consider splitting across multiple Actor runs or using the Apify scheduling feature.
Local development
Prerequisites
- Python 3.12+
- Apify CLI
Setup
# Clone the repositorygit clone <repo-url>cd website-visual-monitor# Install dependenciespip install -r requirements.txt# Install Playwright browserplaywright install chromium# Run locallyapify run
Testing with custom input
# Create or edit .actor/input_schema.json with your URLs# Then run:apify run --purge
The --purge flag clears previous storage (datasets, key-value stores) for a clean run.
Deployment
Deploy to Apify platform
# Login to Apify (one-time)apify login# Push and build the Actorapify push
Your Actor will be available at https://console.apify.com/actors under "My Actors".
FAQ and support
Is web scraping legal? Web scraping and monitoring are legal when you comply with the target website's Terms of Service and robots.txt. This Actor is a tool — you are responsible for using it responsibly.
Known limitations:
- Very large pages (10000+ px tall) may produce large images that take longer to compare
- Pages requiring login or cookies need session handling (not included in this version)
- The diff algorithm is pixel-based and does not detect semantic changes (e.g., text content that shifts position)
Need help? reach out via the Apify platform.
Custom solutions? Contact us for tailored monitoring solutions, multi-step flows, or integration with your CI/CD pipeline.