Skip to content

Screenshot API

Pixel-perfect screenshots of any webpage

Render pages in real Chromium and get PNG, JPEG, WebP or PDF back in about a second. Full page, element capture, 18 devices, dark mode and clean output without banners.

No credit card required · 100 free credits every month

How it works

From URL to result in four steps

  1. 1

    Send a URL

    Call GET /v1/capture with the page URL and your x-api-key header.

  2. 2

    We render it

    A fresh Chromium loads the page, waits for your condition and cleans up banners and ads.

  3. 3

    Capture

    Viewport, full page, a CSS selector or a device profile — in the format you asked for.

  4. 4

    Get the file

    Receive the binary directly, a cached copy, a URL in your S3 bucket, or a webhook.

Features

Every capture option you need

PNG, JPEG, WebP & PDF

Choose the format and tune image_quality for JPEG and WebP. PDFs are print-ready.

Full-page capture

Capture the whole document. full_page_scroll triggers lazy-loaded images first.

CSS selector capture

Capture just one element — a chart, a pricing table or a tweet embed — with selector.

18 devices

iPhone, iPad, Galaxy, Pixel, Redmi and Huawei profiles with real DPR and user agents.

No cookie banners

remove_cookie_banners and remove_ads hide consent popups and ads automatically.

Block anything

Block resource types (fonts, media, scripts…) or URL patterns such as analytics.

Dark mode & retina

Emulate prefers-color-scheme: dark and render at scale_factor 2 or 3.

Smart waiting

wait_until (load, domcontentloaded, networkidle0/2), wait_for_selector and delay.

Stealth & proxies

Stealth mode and your own HTTP/SOCKS5 proxies for geo-specific or protected pages.

S3 / R2 upload

Upload directly to your bucket and get back JSON with the object URL.

Edge cache up to 30 days

cache=true with a custom cache_ttl. Responses carry x-cache: HIT or MISS.

Async + webhooks

is_async=true returns a job id instantly; get a signed webhook when it's done.

Capture in a few lines

The response is the image itself, so you can stream it to disk, a CDN or a user.

import { writeFile } from "node:fs/promises";

const params = new URLSearchParams({
  url: "https://example.com",
  full_page: "true",
  format: "webp",
  remove_cookie_banners: "true",
});

const res = await fetch(`https://api.screenshotdude.com/v1/capture?${params}`, {
  headers: { "x-api-key": process.env.SCREENSHOTDUDE_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error);

await writeFile("page.webp", Buffer.from(await res.arrayBuffer()));

Response with s3_url=true

{
  "success": true,
  "data": {
    "url": "https://my-bucket.s3.eu-west-1.amazonaws.com/screens/acme-home.png",
    "key": "screens/acme-home.png",
    "bucket": "my-bucket"
  }
}

Frequently asked questions

Start capturing in minutes

Create a free account and get 100 free screenshots every month. No credit card required.