Notes from the screenshot trenches.
Engineering deep-dives, product updates, and practical guides from the Snapopa team.
What's new: render raw HTML and choose a capture region
Two new request options - send HTML instead of a URL, and pin captures to a geographic region for localized content.
Blocking cookie banners, ads and trackers without breaking the page
How the block option works under the hood, why cookie banners are hidden with CSS instead of network rules, and when you should turn blocking off.
Permalinks: screenshot URLs that stay put
Store a capture with no expiry, optionally refresh it on a schedule, and revoke it when you are done. A tour of the persistence option.
PNG, JPEG, WebP or PDF: picking the right capture format
Each format wins somewhere. A practical guide to file size, fidelity and compatibility, and how the quality setting changes the trade-off.
Response caching: pay for a capture once
Turn on responseCache and identical requests return the stored result instead of rendering again. Here is how the TTL and nonce work, and when to use them.
Capture screenshots from Node.js with nothing but fetch
No SDK required. A copy-paste helper for Node 18+, with typed options, error handling and downloading the file.
Monitors: scheduled captures without writing a cron job
Set up a recurring screenshot of any URL from the dashboard, then browse the history to see how a page changed over time.
Full-page screenshots that don't cut off lazy-loaded content
Blank sections, missing images and half-rendered carousels are almost always a timing problem. Here are the four settings that fix them.
Reading about screenshots? Try the API.
100 free tokens on signup. No credit card. One request is all it takes.
$ curl https://api.snapopa.com/capture \
-H "Authorization: Bearer sk_•••" \
-d '{"url":"https://stripe.com"}'
✓ 200 OK
{ "data": { "fileUrl": "https://cdn.snapopa.com/…" } }