Use Case

Website Monitoring
Visual Change Detection via Screenshots

Monitor any website for visual changes. Take scheduled screenshots, compare them automatically, and get alerts when something changes — competitor pricing, site outages, UI regressions, or content updates. Simple cron + API setup.

Use cases

What can you monitor?

Competitor pricing

Get alerted when competitors change their pricing pages. Track feature changes, plan restructuring, and promotional offers.

Visual regression testing

Catch UI bugs before your users do. Compare screenshots across deployments to detect unintended layout changes, broken images, or CSS issues.

Uptime monitoring

Go beyond HTTP status codes. Verify that pages render correctly — a 200 status doesn't mean the content loaded properly.

Content change tracking

Monitor news sites, job boards, government filings, or any page for content updates. Get notified when new information appears.

Code examples

Build a monitoring script in minutes

Python + cron
import requests
import hashlib
import os

TARGETS = [
    'https://competitor.com/pricing',
    'https://yoursite.com/landing',
    'https://partner.com/status',
]

def take_screenshot(url):
    resp = requests.post('https://api.snaprender.dev/v1/screenshot',
        headers={'Authorization': 'Bearer YOUR_KEY'},
        json={'url': url, 'full_page': True, 'width': 1280})
    return resp.content

def check_for_changes(url, screenshot):
    slug = url.replace('https://', '').replace('/', '_')
    hash_file = f'/tmp/monitor_{slug}.hash'
    current_hash = hashlib.sha256(screenshot).hexdigest()

    if os.path.exists(hash_file):
        with open(hash_file) as f:
            old_hash = f.read().strip()
        if old_hash != current_hash:
            send_alert(url, screenshot)  # Your alert function

    with open(hash_file, 'w') as f:
        f.write(current_hash)

for url in TARGETS:
    img = take_screenshot(url)
    check_for_changes(url, img)
Node.js + cron
import crypto from 'crypto';
import fs from 'fs';

const TARGETS = [
  'https://competitor.com/pricing',
  'https://yoursite.com/landing',
  'https://partner.com/status',
];

async function takeScreenshot(url) {
  const res = await fetch('https://api.snaprender.dev/v1/screenshot', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ url, full_page: true, width: 1280 }),
  });
  return Buffer.from(await res.arrayBuffer());
}

async function monitor() {
  for (const url of TARGETS) {
    const screenshot = await takeScreenshot(url);
    const hash = crypto.createHash('sha256').update(screenshot).digest('hex');
    const slug = url.replace('https://', '').replace(/\//g, '_');
    const hashFile = `/tmp/monitor_${slug}.hash`;

    if (fs.existsSync(hashFile)) {
      const oldHash = fs.readFileSync(hashFile, 'utf8').trim();
      if (oldHash !== hash) {
        console.log(`Change detected: ${url}`);
        // Send alert via Slack, email, webhook, etc.
      }
    }
    fs.writeFileSync(hashFile, hash);
  }
}

monitor();
// Run with: cron "*/30 * * * * node monitor.js"
How it works

Three steps to visual monitoring

1

Schedule screenshot captures

Set up a cron job or scheduled task to call SnapRender's /screenshot endpoint at your desired interval — every 30 minutes, hourly, or daily.

2

Compare screenshots

Hash each screenshot and compare against the previous version. For more granular detection, use pixel-diff libraries to calculate visual similarity scores.

3

Alert on changes

When a change is detected, send a notification via Slack, email, or webhook. Include the before/after screenshots for quick visual review.

Monitoring at scale

Each screenshot counts as one request. Monitor more pages or more frequently as you scale.

$0
~3 checks/day
$9
~50 checks/day
$29
~160 checks/day
Start Free

Frequently asked questions

Take periodic screenshots of your target pages using cron jobs or scheduled tasks. Compare each new screenshot against the previous one — either visually (pixel diff) or by comparing file hashes. When changes are detected, trigger an alert via email, Slack, or webhook.

As often as your plan allows. The free tier gives you 100 requests/month (~3 per day). The $9/mo plan gives you 1,500 (~50 per day). The $29/mo plan gives you 5,000 (~160 per day). For more frequent monitoring, the $79/mo plan includes 15,000 requests.

SnapRender captures screenshots — change detection is done on your end. You can use simple file hash comparison, pixel-diff libraries (like pixelmatch for Node.js or Pillow for Python), or dedicated visual regression tools.

Yes. Add use_flaresolverr: true to bypass Cloudflare protection. This is essential for monitoring competitor sites or third-party pages that use Cloudflare, DataDome, or similar anti-bot services.

Yes. Use the selector parameter to capture screenshots of specific CSS selectors. For example, monitor only a pricing table, hero section, or product listing without capturing the entire page.

SnapRender uses a full headless browser, so React, Vue, Angular, and other JavaScript frameworks are fully rendered before the screenshot is taken. The wait_for parameter lets you wait for specific elements to appear.

Never miss a change.

Visual monitoring in minutes. Start free with 100 screenshots/month.

Start Free — 100 requests/month