Need to capture screenshots or generate PDFs from URLs in your app? There's no shortage of APIs to choose from — but they vary wildly in pricing, feature set, and reliability. This guide breaks down the top options so you can pick the right one for your use case.
Heads-up: We built URLSnap, so take our perspective with appropriate salt. We've tried to be fair — and we link to competitors where they genuinely win.
| API | Free Tier | Entry Paid | Screenshots | Setup | |
|---|---|---|---|---|---|
| URLSnap Our pick | 20 req/day | $9/mo (500/day) | ✅ | ✅ | REST API key |
| ApiFlash | 100 req/mo | ~$19/mo | ✅ | ❌ | REST API key |
| ScreenshotAPI.net | 100 req/mo | ~$19/mo | ✅ | ✅ | REST API key |
| Browserless.io | Trial only | $50+/mo | ✅ (via Puppeteer) | ✅ (via Puppeteer) | WebSocket + Puppeteer code |
| Self-hosted Puppeteer | Free (infra cost) | Server costs | ✅ | ✅ | High — manage Chromium, queues, scaling |
URLSnap is a simple REST API for screenshots and PDFs. You call one endpoint, pass a URL (or raw HTML), and get back an image or PDF. No SDKs, no WebSocket connections, no Chromium binary to keep updated.
# Screenshot in one line of curl
curl "https://urlsnap.dev/api/screenshot?url=https://example.com" \
-H "x-api-key: YOUR_KEY" \
--output screenshot.png
# PDF in one line
curl "https://urlsnap.dev/api/pdf?url=https://example.com&format=A4" \
-H "x-api-key: YOUR_KEY" \
--output page.pdf
ApiFlash has been around for a while and has a solid reputation. It's screenshot-only (no PDF), but the screenshot quality and options (full-page, custom viewport, delay, CSS injection) are excellent. Their free tier is 100 requests per month total — fine for testing but limiting for production.
Best for: Projects that only need screenshots and want a well-established provider.
ScreenshotAPI.net supports both screenshots and PDFs and has many rendering options. Pricing is comparable to ApiFlash.
Best for: Teams that need a lot of rendering customisation and are willing to pay for it.
Browserless lets you run arbitrary Puppeteer/Playwright scripts against a managed Chromium instance. This is much more powerful — you can click, fill forms, wait for SPAs to render, and run custom JS. But that power comes at a cost: you need to write Puppeteer code, and pricing starts at $50+/month.
Best for: Advanced scraping, e2e testing infrastructure, or capturing pages that require JS interaction before screenshotting.
Rolling your own screenshot service with Puppeteer and a VPS is free in API-call terms, but you'll spend hours on:
# What looks simple...
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
await page.screenshot({ path: 'out.png' });
await browser.close();
// ...turns into managing pools, queues, health checks, restarts,
// Chromium version pinning, Linux library mismatches, and memory limits.
Best for: Teams with a dedicated DevOps resource who need full control and have complex requirements beyond what any hosted API offers.
| Use case | Recommendation |
|---|---|
| Quick integration, simple URL→PNG or URL→PDF | URLSnap |
| Screenshots only, established provider | ApiFlash |
| Full browser automation / complex SPAs | Browserless.io |
| Complete control, large scale, DevOps capacity | Self-hosted Puppeteer |
Register for a free key, then call the API:
# 1. Get a free API key
curl -X POST https://urlsnap.dev/api/register \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'
# → { "key": "us_abc123..." }
# 2. Screenshot
curl "https://urlsnap.dev/api/screenshot?url=https://news.ycombinator.com&width=1280&height=800" \
-H "x-api-key: us_abc123..." \
--output hn.png
# 3. PDF
curl "https://urlsnap.dev/api/pdf?url=https://news.ycombinator.com&format=A4" \
-H "x-api-key: us_abc123..." \
--output hn.pdf
20 requests/day on the free tier. Upgrade to Starter ($9/mo) for 500/day.
Get your free API key →