What to Look for in a Free Screenshot API (and What to Skip)
Evaluating a free screenshot API? Here's what matters for production use, including rate limits, formats, rendering quality, and real code examples.
Search for "free screenshot API" and you'll find a dozen services promising unlimited captures, zero cost, and pixel-perfect rendering. Most fall apart the moment you point them at a real-world page with lazy-loaded images, custom fonts, or a cookie banner blocking the hero section.
This post breaks down what actually matters when picking a free screenshot API, what the common gotchas are, and how to integrate one without rewriting your code six months later when you hit a paywall.
Why developers reach for a screenshot API
Running headless Chrome yourself sounds simple until you've done it. You end up maintaining a Puppeteer cluster, patching font rendering on Alpine Linux, dealing with memory leaks, and explaining to your team why the OG image generator costs $200/month in compute.
A hosted screenshot API removes that overhead. Common use cases:
- Open Graph images generated on demand for blog posts, profiles, or share links
- Link previews in chat apps, dashboards, or bookmarking tools
- Visual regression monitoring for marketing sites and landing pages
- PDF exports of invoices, reports, or rendered HTML templates
- Archival snapshots for compliance or audit logs
What "free" actually means in this market
Free tiers vary wildly. Before you commit, check these specifics:
1. Monthly request volume
Some APIs offer 50 requests/month — useful only for a demo. Others give 100–500 captures/month free, which is enough for a small SaaS generating OG images for new blog posts or user profiles. PxShot, for instance, includes a free tier you can use indefinitely without a credit card.
2. Output formats
A bare-minimum service returns only PNG. A useful one supports:
PNGfor transparency and crisp UI capturesJPEGfor smaller file sizes on photo-heavy pagesWebPfor modern delivery pipelinesPDFfor documents, invoices, and printable reports
3. Viewport and device emulation
If you can't set viewport width, device pixel ratio, or mobile user-agent, the service is a toy. Real OG images need 1200×630. Retina previews need deviceScaleFactor: 2. Mobile testing needs an iPhone user-agent.
4. Rendering controls
- Wait for a CSS selector before capturing
- Custom delay (for animations or JS-heavy SPAs)
- Block cookie banners and ads
- Inject custom CSS or JavaScript
- Full-page vs. viewport-only capture
5. Rate limits and concurrency
A 60-requests-per-minute cap is fine for OG generation. It's painful for batch jobs. Check whether the free tier throttles concurrency separately from total volume.
A realistic integration example
Here's what calling a screenshot API looks like in practice. Using PxShot's HTTP endpoint to generate a 1200×630 OG image:
GET https://api.pxshot.dev/v1/screenshot
?url=https://example.com/blog/my-post
&width=1200
&height=630
&format=png
&full_page=false
&wait_for=.hero-loadedIn Node.js:
const res = await fetch(
`https://api.pxshot.dev/v1/screenshot?url=${encodeURIComponent(pageUrl)}&width=1200&height=630&format=png`,
{ headers: { Authorization: `Bearer ${process.env.PXSHOT_KEY}` } }
);
const buffer = Buffer.from(await res.arrayBuffer());
await s3.putObject({ Bucket: 'og-images', Key: `${slug}.png`, Body: buffer });That's the whole integration. Store the result in S3 or R2, cache it by URL hash, and serve it from your CDN. Re-generate only when content changes.
Common mistakes when adopting a free screenshot API
- Calling the API on every page load. Cache the result. Screenshots rarely change between requests — generate once, serve forever (or until the content updates).
- Ignoring timeouts. A slow target site can hang your request for 30+ seconds. Set an explicit timeout and fall back to a default image.
- Not setting a wait condition. If you screenshot a React app before hydration finishes, you'll capture a blank shell. Use
wait_forselectors or a small delay. - Forgetting the user-agent. Some sites serve different content to bots. Set a real Chrome user-agent if you want what users actually see.
- Skipping error handling for 4xx URLs. If the target returns 404, you'll get a screenshot of an error page. Validate the URL or check status before capturing.
When to upgrade off the free tier
Free tiers are great for prototypes, side projects, and low-traffic SaaS. You should consider a paid plan when:
- You're generating more than a few hundred unique screenshots per month
- You need SLA guarantees or priority rendering
- You require private IP rotation or proxy support for protected sites
- Your captures need to run within a specific latency budget
A useful heuristic: if screenshot generation is on a hot path (user-facing, blocking) rather than a background job, you've outgrown free.
Quick comparison checklist
Before picking a service, score it against these criteria:
- Free monthly volume — is it enough for your traffic?
- Formats supported — at minimum PNG, JPEG, and PDF
- Viewport and device controls
- Wait-for-selector and custom delay options
- Reasonable API design (REST, sensible parameters, predictable responses)
- Documented rate limits
- Reliability — does it actually return within a few seconds?
- Pricing transparency when you outgrow free
Most services fail on at least two of these. The good ones — including PxShot — make the free tier genuinely usable so you can build, ship, and only pay when you've validated the use case.
Start capturing
If you want to skip the comparison and just try one, PxShot offers a free tier with PNG, JPEG, WebP, and PDF output, full viewport control, and wait-for-selector support. Grab an API key at pxshot.dev and your first screenshot is one HTTP request away.