Compare website screenshot APIs side-by-side. Capture any web page as PNG, JPEG, or PDF via a simple HTTP request. No Puppeteer, no headless Chrome setup.
Screenshot APIs replace self-hosted Puppeteer/Playwright with a single HTTP call. Here are the most common use cases:
Feature matrix across all 6 screenshot APIs. Scroll horizontally on mobile.
| Provider | Free Tier | Paid From | Output Formats | Full-Page | Custom Viewport | Dark Mode | Ad Blocking |
|---|---|---|---|---|---|---|---|
| ScreenshotOne | 100/mo Free | $20/mo | PNG, JPEG, WebP, PDF, MP4 | Yes | Yes | Yes | Yes |
| Urlbox | 7-day trial Trial | $19/mo | PNG, JPEG, WebP, AVIF, PDF, SVG, MP4 | Yes | Yes | Yes | Yes |
| ApiFlash | 100/mo Free | $7/mo | PNG, JPEG, WebP | Yes | Yes | No | Yes |
| ScreenshotAPI.net | 100 (7-day) Trial | $9/mo | PNG, JPEG, WebP, PDF | Yes | Yes | Yes | Yes |
| Screenshotlayer | 100/mo Free | $19.99/mo | PNG, JPEG, GIF | Yes | Yes | No | No |
| Frostbyte Best Value | 50 free requests/day Free | $1 = 500 | PNG, JPEG | Yes | 5 presets | Yes | No |
Detailed pros/cons for each screenshot API. Click provider names for their documentation.
Capture a screenshot of any website right now. Uses Frostbyte Screenshot API (no auth required for demo).
# 1. Get a free API key (no signup)
curl -X POST https://api-catalog-tau.vercel.app/api/keys/create
# 2. Capture a screenshot
curl "https://api-catalog-tau.vercel.app/v1/agent-screenshot/api/screenshot?url=https://github.com&viewport=desktop" \
-H "Authorization: Bearer YOUR_KEY" \
--output screenshot.png
# 3. Full-page capture
curl "https://api-catalog-tau.vercel.app/v1/agent-screenshot/api/screenshot?url=https://github.com&fullPage=true" \
-H "Authorization: Bearer YOUR_KEY" \
--output fullpage.png
# 4. Mobile viewport
curl "https://api-catalog-tau.vercel.app/v1/agent-screenshot/api/screenshot?url=https://github.com&viewport=mobile" \
-H "Authorization: Bearer YOUR_KEY" \
--output mobile.png// Get API key
const { key } = await fetch('https://api-catalog-tau.vercel.app/api/keys/create', {
method: 'POST'
}).then(r => r.json());
// Capture screenshot
const url = 'https://github.com';
const res = await fetch(
`https://api-catalog-tau.vercel.app/v1/agent-screenshot/api/screenshot?url=${encodeURIComponent(url)}&viewport=desktop`,
{ headers: { Authorization: `Bearer ${key}` } }
);
const buffer = Buffer.from(await res.arrayBuffer());
fs.writeFileSync('screenshot.png', buffer);
console.log('Saved screenshot.png', buffer.length, 'bytes');import requests
# Get API key
key = requests.post("https://api-catalog-tau.vercel.app/api/keys/create").json()["key"]
# Capture screenshot
url = "https://github.com"
resp = requests.get(
f"https://api-catalog-tau.vercel.app/v1/agent-screenshot/api/screenshot",
params={"url": url, "viewport": "desktop"},
headers={"Authorization": f"Bearer {key}"}
)
with open("screenshot.png", "wb") as f:
f.write(resp.content)
print(f"Saved screenshot.png ({len(resp.content)} bytes)")package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
// Capture screenshot
apiURL := "https://api-catalog-tau.vercel.app/v1/agent-screenshot/api/screenshot?url=https://github.com&viewport=desktop"
req, _ := http.NewRequest("GET", apiURL, nil)
req.Header.Set("Authorization", "Bearer YOUR_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
f, _ := os.Create("screenshot.png")
defer f.Close()
n, _ := io.Copy(f, resp.Body)
fmt.Printf("Saved screenshot.png (%d bytes)\n", n)
}What you pay at each tier. Frostbyte is the only provider with true pay-as-you-go (no monthly subscription).
| Provider | 1K screenshots | 10K screenshots | 100K screenshots |
|---|---|---|---|
| ScreenshotOne | $0.020 | ~$0.010 | Contact |
| Urlbox | $0.010 | $0.007 | $0.003 |
| ApiFlash | $0.007 | $0.004 | $0.002 |
| ScreenshotAPI.net | $0.009 | $0.003 | $0.002 |
| Screenshotlayer | $0.002 | $0.002 | $0.002 |
| Frostbyte | $0.002 | $0.002 | $0.002 |
The main alternative to a screenshot API is running Puppeteer/Playwright yourself. Here's how they compare:
| Self-Hosted Puppeteer | Screenshot API | |
|---|---|---|
| Setup time | Hours (Chrome, deps, memory tuning) | Minutes (one HTTP call) |
| Infrastructure | Your servers (200MB+ Chrome) | Managed for you |
| Scaling | Manual (pool management, queuing) | Automatic |
| Memory usage | ~300MB per browser instance | Zero (HTTP request) |
| Serverless | Difficult (binary size limits) | Works everywhere |
| Maintenance | Chrome updates, security patches | None |
| Cost at 1K/mo | ~$5-20/mo (server costs) | $0-7/mo |
| Customization | Unlimited | API parameters only |
Bottom line: Use Puppeteer if you need deep browser control (complex interactions, auth flows, dynamic content manipulation). Use a screenshot API if you need simple page captures at any scale without infrastructure overhead.
Choose based on your specific requirements:
Use Frostbyte. No signup form required. Get an API key with one POST request, capture your first screenshot in under 30 seconds.
Use ApiFlash ($7/mo for 1K) or Frostbyte ($0.002/screenshot pay-as-you-go). Screenshotlayer also competitive at $0.002/screenshot for 10K+.
Use Urlbox for the widest format support (AVIF, SVG, MP4 video), AI analysis, certified archives, and enterprise SLAs. Or ScreenshotOne for CSS/JS injection and geolocation.
Use Frostbyte with its native GitHub Action. Captures screenshots at 5 viewport sizes and uploads as build artifacts. No other provider offers this out of the box.
Use Urlbox for certified archives, 99.95% SLA, on-premises deployment options, and regional clusters. Best for legal/compliance screenshot requirements.
Use Frostbyte if you also need IP geolocation, DNS lookups, crypto prices, web scraping, or code execution. One key for 40+ APIs. No other screenshot provider bundles these.