Build an automated website screenshot pipeline (no headless Chrome)
You need fresh screenshots of a list of URLs — daily, or on a webhook. The tempting path is "just run Puppeteer." The cheaper path is one HTTP call to a screenshot API.
What "owning the browser" really costs
A self-hosted capture service means: a container with Chromium, memory tuned so it doesn't OOM under load, a queue so concurrent jobs don't crash it, retries for flaky pages, and an on-call rotation when it falls over at 2am. That's real infrastructure for what is, ultimately, a side feature.
One call instead
curl 'https://screenshot-e-pdf-render.p.rapidapi.com/v1/screenshot?url=https://example.com&type=webp&fullPage=true&blockAds=true&blockCookieBanners=true' \ -H 'X-RapidAPI-Key: YOUR_KEY' \ -H 'X-RapidAPI-Host: screenshot-e-pdf-render.p.rapidapi.com' \ --output shot.webp
Add device=iphone_15 for mobile, darkMode=true for dark theme, waitForSelector=.chart to wait for content, or response=json for base64 output.
Schedule it (Node)
import { writeFile } from 'node:fs/promises';
const URLS = ['https://example.com', 'https://example.com/pricing'];
const H = { 'X-RapidAPI-Key': process.env.RAPIDAPI_KEY,
'X-RapidAPI-Host': 'screenshot-e-pdf-render.p.rapidapi.com' };
for (const url of URLS) {
const q = new URLSearchParams({ url, type: 'webp', fullPage: 'true' });
const r = await fetch(`https://screenshot-e-pdf-render.p.rapidapi.com/v1/screenshot?${q}`, { headers: H });
await writeFile(`shots/${encodeURIComponent(url)}.webp`, Buffer.from(await r.arrayBuffer()));
}
Run it from cron, a GitHub Actions schedule, or a serverless function. Push the files to S3/Drive and you have an archive.
No code? Use n8n / Make / Zapier
Add an HTTP Request node pointing at /v1/screenshot with the two RapidAPI headers, set the response to file, and wire it into a storage or Slack node. URL in, image out — no server.
Detect changes automatically
Capturing is half the job; knowing when a page changed is the other half. Instead of eyeballing screenshots, run a visual diff between today's capture and yesterday's, and only alert when difference_percentage crosses a threshold. See visual regression in CI.
Keep it clean and safe
blockAds+blockCookieBannersfor consistent captures.- SSRF protection is on by default — the API won't reach internal or metadata addresses even if a URL tries.
- Built-in response caching means repeat captures of the same URL come back instantly.
Try it
RenderShot is a screenshot + PDF API with device emulation, WebP, dark mode and ad/cookie blocking. Free tier, no card; one key via RapidAPI.