Pay only for what you render.
Screenshots & PDFs from any URL.

One API for screenshots and PDFs. Buy credits once, use them whenever — credits never expire. Or pick a monthly plan. No subscription required.

Start free → Read the docs

100 free renders / month  ·  no credit card  ·  cancel anytime

Live render of posthog.com via ScreenshotAPIs
↑ live render of posthog.com · paste a URL above to try yours
100
Free renders/month
$0
Card required
Operational status
PNG/PDF
+ JPEG · WebP

One API call. Any language.

Add screenshots and PDFs to any app in minutes.

# Screenshot a URL → PNG
curl -X POST https://screenshotapis.org/v1/screenshot \
  -H "X-Api-Key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "format": "png"}' \
  --output screenshot.png

# Render HTML → PDF
curl -X POST https://screenshotapis.org/v1/pdf \
  -H "X-Api-Key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"html": "<h1>Hello</h1>", "format": "A4"}' \
  --output document.pdf
# pip install screenshotapis
from screenshotapis import Client

client = Client("sk_live_your_key")

# Screenshot
png = client.screenshot("https://example.com")
with open("screenshot.png", "wb") as f:
    f.write(png)

# PDF
pdf = client.pdf(html="<h1>Invoice #42</h1>")
with open("invoice.pdf", "wb") as f:
    f.write(pdf)
// npm install screenshotapis
import Client from "screenshotapis";
import fs from "fs";

const client = new Client("sk_live_your_key");

// Screenshot
const png = await client.screenshot({ url: "https://example.com" });
fs.writeFileSync("screenshot.png", Buffer.from(png));

// PDF
const pdf = await client.pdf({ html: "<h1>Invoice #42</h1>" });
fs.writeFileSync("invoice.pdf", Buffer.from(pdf));
package main

import (
    "bytes"; "io"; "net/http"; "os"
)

func main() {
    body := []byte(`{"url":"https://example.com","format":"png"}`)
    req, _ := http.NewRequest("POST",
        "https://screenshotapis.org/v1/screenshot",
        bytes.NewReader(body))
    req.Header.Set("X-Api-Key", "sk_live_your_key")
    req.Header.Set("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    data, _ := io.ReadAll(resp.Body)
    os.WriteFile("screenshot.png", data, 0644)
}

Everything you need to render the web

Production-ready from day one.

🖼

Screenshots

PNG, JPEG, or WebP. Full-page or viewport. Retina-quality. Perfect for link thumbnails and visual regression.

📄

PDF rendering

A4, Letter, Legal, Tabloid. Custom margins and headers. Great for invoices and report generation.

🎯

OG image generation

Pass a CSS selector to capture just one element. Render dynamic social cards from your own HTML.

🌐

URL or raw HTML

Render any public URL or inject your own HTML directly — no hosting required.

🛡

Ad & cookie blocking

Block ads, trackers, and cookie banners for clean captures. One flag, 40+ ad networks blocked.

💉

CSS & JS injection

Inject custom CSS or JavaScript before capture. Hide elements, change styles, run setup code.

Fast & reliable

Powered by Playwright + Chromium. Sub-second renders. Custom wait strategies and user agents.

🔔

Webhook callbacks

Get results async. Add a webhook_url and we POST the render result when it's ready. HMAC-signed.

Pay only for what you render

1 credit = 1 render. Pick a monthly plan, or buy credits one-time and use them whenever.

Free
$0
100 renders/mo
No card needed
Start free
Starter
$19/mo
2,000 renders/mo
30 req/min
Choose Starter
Business
$149/mo
25,000 renders/mo
120 req/min
Choose Business
Scale
$299/mo
75,000 renders/mo
300 req/min
Choose Scale
Or skip the subscription.

Buy credits one-time and use them whenever — credits never expire. Great for agencies, side projects, and one-off batches.

Buy credits

Need more? Contact us for volume pricing.

Render your first screenshot in 30 seconds

100 free renders every month. No credit card. Cancel anytime.

Start free →