✨ Free 500 screenshots/month — no credit card required

Screenshots & PDFs
from any URL

One API call. Pixel-perfect results. Built for developers who ship fast.

curl
curl "https://api.getscreenshot.dev/v1/screenshot?url=https://example.com" \
  -H "X-API-Key: YOUR_KEY" \
  -o screenshot.png
<3sAvg render time
99.9%Uptime
500Free/month

Everything you need to capture the web

Full-featured screenshot and PDF API. No hidden limits, no gotchas.

📸

Screenshots

PNG, JPEG, or WebP. Full-page or viewport. Custom dimensions, device emulation, dark mode support.

📄

PDF Generation

Included in all plans. A4, Letter, landscape, custom margins. Perfect for invoices, reports, and archiving.

Blazing Fast

Average render under 3 seconds. Smart caching returns instant results for repeated requests.

🎯

Element Capture

Target any CSS selector. Capture just a chart, a tweet, a product card — not the whole page.

🌙

Dark Mode

Emulate dark color scheme with a single parameter. Perfect for generating themed previews.

🔒

Reliable & Secure

Built on Playwright with isolated browser contexts. Your requests never interfere with each other.

💾

Smart Caching

24-hour cache by default. Customize TTL or bypass with fresh=true. Save credits, get faster responses.

📊

Usage Dashboard

Track your usage in real time. Daily and monthly breakdowns. Know exactly where you stand.

Simple, honest pricing

All features on every plan. No per-feature upsells. Just pick your volume.

Free
$0/mo
Perfect for side projects and prototyping
  • ✓ 500 screenshots/month
  • ✓ PDF generation
  • ✓ All capture features
  • ✓ 24-hour cache
  • ✓ Community support
Start Free →
Starter
$9/mo
For growing apps and small teams
  • ✓ 3,000 screenshots/month
  • ✓ PDF generation
  • ✓ All capture features
  • ✓ No watermark
  • ✓ Email support
Business
$79/mo
For high-volume applications
  • ✓ 60,000 screenshots/month
  • ✓ PDF generation
  • ✓ Dedicated render queue
  • ✓ Webhooks
  • ✓ Slack support
Scale
$199/mo
Enterprise-grade volume
  • ✓ 200,000 screenshots/month
  • ✓ PDF generation
  • ✓ Custom domain
  • ✓ SLA guarantee
  • ✓ Dedicated support

Dead-simple API

Two endpoints. That's it. Screenshots and PDFs in seconds.

GET POST /v1/screenshot

Capture a screenshot of any URL.

Parameters

url required
The URL to capture (must be http or https)
width
Viewport width in pixels (default: 1280, range: 320–3840)
height
Viewport height in pixels (default: 800, range: 200–2160)
fullPage
Capture the full scrollable page (default: false)
format
Output format: png, jpeg, or webp (default: png)
quality
Image quality 1–100 for jpeg/webp (default: 80)
delay
Wait ms after page load before capture (max: 10000)
selector
CSS selector to capture a specific element
darkMode
Emulate dark color scheme (default: false)
deviceScale
Device pixel ratio 0.5–3 for retina captures (default: 1)
cache
Cache TTL in seconds (default: 86400 = 24h)
fresh
Bypass cache and force a new render (default: false)
userAgent
Custom User-Agent string
GET POST /v1/pdf

Generate a PDF from any URL.

Parameters

url required
The URL to render as PDF
format
Page size: A4, Letter, Legal (default: A4)
landscape
Landscape orientation (default: false)
printBackground
Include background graphics (default: true)
margin
Page margin (e.g. "20px" or {"top":"10mm","bottom":"10mm"})
scale
Scale factor 0.1–2 (default: 1)

Code Examples

Screenshot
# Take a screenshot
curl "https://api.getscreenshot.dev/v1/screenshot?url=https://github.com&width=1280&format=png" \
  -H "X-API-Key: YOUR_API_KEY" \
  -o screenshot.png

# Full-page screenshot in dark mode
curl "https://api.getscreenshot.dev/v1/screenshot?url=https://example.com&fullPage=true&darkMode=true" \
  -H "X-API-Key: YOUR_API_KEY" \
  -o dark-fullpage.png

# Generate a PDF
curl "https://api.getscreenshot.dev/v1/pdf?url=https://example.com&format=A4&landscape=true" \
  -H "X-API-Key: YOUR_API_KEY" \
  -o document.pdf
Python (requests)
import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.getscreenshot.dev"

# Screenshot
response = requests.get(f"{BASE_URL}/v1/screenshot", params={
    "url": "https://github.com",
    "width": 1280,
    "format": "png",
    "fullPage": True,
}, headers={"X-API-Key": API_KEY})

with open("screenshot.png", "wb") as f:
    f.write(response.content)

# PDF
response = requests.get(f"{BASE_URL}/v1/pdf", params={
    "url": "https://example.com",
    "format": "A4",
}, headers={"X-API-Key": API_KEY})

with open("document.pdf", "wb") as f:
    f.write(response.content)

# Check usage
usage = requests.get(f"{BASE_URL}/v1/usage",
    headers={"X-API-Key": API_KEY}).json()
print(f"Used: {usage['monthly']['used']}/{usage['monthly']['limit']}")
Node.js (fetch)
const API_KEY = "YOUR_API_KEY";
const BASE = "https://api.getscreenshot.dev";

// Screenshot
const screenshot = await fetch(
  `${BASE}/v1/screenshot?url=https://github.com&width=1280&format=png`,
  { headers: { "X-API-Key": API_KEY } }
);
const fs = await import("fs");
fs.writeFileSync("screenshot.png", Buffer.from(await screenshot.arrayBuffer()));

// PDF via POST (JSON body)
const pdf = await fetch(`${BASE}/v1/pdf`, {
  method: "POST",
  headers: {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    url: "https://example.com",
    format: "A4",
    landscape: true,
  }),
});
fs.writeFileSync("document.pdf", Buffer.from(await pdf.arrayBuffer()));

// Usage
const usage = await fetch(`${BASE}/v1/usage`, {
  headers: { "X-API-Key": API_KEY },
}).then(r => r.json());
console.log(`Used: ${usage.monthly.used}/${usage.monthly.limit}`);
PHP (cURL)
<?php
$apiKey = "YOUR_API_KEY";
$baseUrl = "https://api.getscreenshot.dev";

// Screenshot
$params = http_build_query([
    'url' => 'https://github.com',
    'width' => 1280,
    'format' => 'png',
]);

$ch = curl_init("$baseUrl/v1/screenshot?$params");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
$image = curl_exec($ch);
curl_close($ch);

file_put_contents('screenshot.png', $image);

// PDF
$ch = curl_init("$baseUrl/v1/pdf");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode([
        'url' => 'https://example.com',
        'format' => 'A4',
    ]),
    CURLOPT_HTTPHEADER => [
        "X-API-Key: $apiKey",
        "Content-Type: application/json",
    ],
]);
$pdf = curl_exec($ch);
curl_close($ch);

file_put_contents('document.pdf', $pdf);
?>

Response Headers

X-Cache-Hit
"true" if served from cache, "false" if freshly rendered
X-Render-Time
Time taken to render, e.g. "1523ms"
X-Credits-Remaining
Remaining monthly credits after this request

Authentication

Pass your API key via header or query parameter:

# Via header (recommended)
curl -H "X-API-Key: YOUR_API_KEY" "https://api.getscreenshot.dev/v1/screenshot?url=..."

# Via query parameter
curl "https://api.getscreenshot.dev/v1/screenshot?url=...&api_key=YOUR_API_KEY"

Try it right now

Enter a URL below. Uses the demo key (10 requests/day).

🖼️

Your screenshot will appear here

Ready to capture the web?

Get your free API key in 30 seconds. No credit card. 500 screenshots/month free forever.

Or use the demo key demo to start testing immediately.