How to Monitor Multiple Websites with Batch Screenshots

2026-04-23 | Tags: [screenshot, api, monitoring, batch, automation]

How to Monitor Multiple Websites with Batch Screenshots

If you're monitoring dashboards, tracking competitors, or running visual regression tests, you probably need screenshots of multiple pages. Making 10 separate API calls is slow and wastes your rate limit. The batch screenshot endpoint solves this.

One Request, Multiple Screenshots

curl -X POST "https://hermesforge.dev/api/screenshot/batch" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_KEY" \
  -d '{
    "urls": [
      "https://example.com",
      "https://news.ycombinator.com",
      "https://github.com"
    ],
    "format": "webp",
    "width": 1280,
    "height": 720
  }'

The response includes base64-encoded images for each URL, along with success/failure status:

{
  "batch_id": "batch_1742035200",
  "total": 3,
  "succeeded": 3,
  "failed": 0,
  "results": [
    {
      "url": "https://example.com",
      "status": "success",
      "content_type": "image/webp",
      "size_bytes": 9612,
      "data_base64": "UklGR..."
    }
  ]
}

Python: Save All Screenshots to Disk

import requests
import base64
import json

API_KEY = "your_api_key_here"
URLS = [
    "https://your-dashboard.example.com/sales",
    "https://your-dashboard.example.com/traffic",
    "https://your-dashboard.example.com/errors",
    "https://competitor1.com",
    "https://competitor2.com",
]

response = requests.post(
    "https://hermesforge.dev/api/screenshot/batch",
    headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
    json={"urls": URLS, "format": "webp", "block_ads": True}
)

data = response.json()
print(f"Captured {data['succeeded']}/{data['total']} screenshots")

for result in data["results"]:
    if result["status"] == "success":
        filename = result["url"].split("//")[1].replace("/", "_") + ".webp"
        with open(filename, "wb") as f:
            f.write(base64.b64decode(result["data_base64"]))
        print(f"  Saved: {filename} ({result['size_bytes']} bytes)")
    else:
        print(f"  Failed: {result['url']} - {result['error']}")

Use Cases

Dashboard Monitoring: Screenshot your Grafana, Power BI, or Tableau dashboards every hour and archive them. When something goes wrong, you have a visual history.

Competitive Analysis: Track how competitor landing pages change over time. Capture 10 competitor homepages in one call, save to timestamped folders.

Visual Regression Testing: Before deploying, capture screenshots of your key pages and compare against baselines. The batch endpoint makes this fast enough for CI/CD.

Automated Reporting: Generate a daily email with screenshots of your analytics dashboards. No need to log in to five different tools.

Parameters

Parameter Default Description
urls required Array of 1-10 URLs
format webp png, jpeg, or webp
width 1280 Viewport width (max 3840)
height 720 Viewport height (max 2160)
full_page false Capture entire scrollable page
delay 0 Wait ms before capture (max 30000 with key)
block_ads true Block ads and trackers

Getting Started

  1. Get a free API key (instant, no signup):
curl -X POST "https://hermesforge.dev/api/keys" \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com"}'
  1. Use the key in your batch request. Free tier: 50 requests/day, 2 batch calls/minute.

Need higher limits? Pro ($9 / 30 days) and Ultra ($29 / 30 days) tiers available via RapidAPI.