Features Full Page Screenshot Wait for Selector & Delay Block Cookie Banners Custom Viewport & Device Website to PDF HTML to Image Markdown to Image Dark Mode Image Format & Quality MCP Server Webhook Screenshot to Base64 Transparent Background Email to Image Certified Screenshot Geo Screenshot Stealth Mode CSS & JS Injection Block Ads & Chat Widgets Pricing Docs Blog Log In Sign Up

Screenshot API Features

Explore all ScreenshotRun API features: full page screenshots, custom viewports, PDF export, dark mode, cookie blocking, and more.

Full Page Screenshot

Capture the entire scrollable page from top to bottom — not just the visible viewport. Every section, every element.

Learn more

Wait for Selector & Delay

Wait for specific elements to appear before capturing. Handle SPAs, lazy-loaded content, and dynamic pages reliably.

Learn more

Block Cookie Banners

Automatically hide cookie consent popups, GDPR banners, and chat widgets for clean, unobstructed screenshots.

Learn more

Custom Viewport & Device

Set any resolution, emulate mobile or tablet devices, and enable Retina rendering for pixel-perfect captures.

Learn more

Website to PDF

Convert any webpage to a PDF document with customizable page format, margins, and landscape orientation.

Learn more

HTML to Image

Render raw HTML, CSS, and JavaScript into a screenshot — no live URL required. Great for templates and reports.

Learn more

Markdown to Image

Send raw markdown text, get back a clean image. Headings, tables, code blocks, lists — all rendered with good typography.

Learn more

Dark Mode

Capture websites in dark mode by emulating the prefers-color-scheme: dark media feature automatically.

Learn more

Image Format & Quality

Choose between PNG, JPEG, WebP, AVIF, and TIFF. Control compression quality for the perfect size-to-quality ratio.

Learn more

MCP Server

Connect ScreenshotRun to AI agents via the Model Context Protocol. Let your AI capture screenshots autonomously.

Learn more

Webhook

Add webhook_url to any request and get screenshots delivered to your endpoint when ready. Non-blocking, with retries and signature verification.

Learn more

Screenshot to Base64

Get screenshots as base64-encoded strings in JSON. No file downloads or storage setup needed. Ideal for serverless and email embedding.

Learn more

Transparent Background

Remove the page background and get screenshots with a full alpha channel. Works with PNG, WebP, and AVIF. Combine with selector for element-level captures.

Learn more

Email to Image

Convert email HTML to PNG, WebP, or PDF. Pass table-based email markup, set width to 600px, and get a clean image of what subscribers see.

Learn more

Certified Screenshot

Add certified=true and get a SHA-256 hash, ISO 8601 timestamp, and options fingerprint with every screenshot. Tamper-proof verification built in.

Learn more

Geo Screenshot

Capture websites from any country with GPS coordinates, timezone emulation, and proxy routing in a single API call. See exactly what local visitors see.

Learn more

Stealth Mode

Bypass Cloudflare, DataDome, and bot detection with one parameter. Randomized fingerprints, automation signal removal, and challenge page handling built in.

Learn more

CSS & JS Injection

Inject custom CSS and JavaScript into any page before the screenshot. Hide elements, change fonts, expand accordions, fill forms, and reshape the page with a single API call.

Learn more

Block Ads & Chat Widgets

Remove ads, chat widgets, and cookie banners automatically. Three boolean parameters for common distractions, plus hide_selectors for custom elements.

Learn more

Why a simple screenshot isn't simple at all

A webpage looks static in your browser, but capturing it programmatically is a different problem. Modern sites load fonts asynchronously, render content through JavaScript frameworks, trigger animations on scroll, and display consent banners that cover half the viewport. A raw Chromium launch with page.screenshot() often produces blank sections, missing images, or cookie popups blocking the content you actually need.

ScreenshotRun handles this rendering complexity through a single GET endpoint at https://api.screenshotrun.com/v1/screenshots/capture. You send parameters, we return the rendered result. Every request runs in an isolated browser context with full control over viewport size, device emulation, timing, and output format. The API accepts a live URL, raw HTML, or even Markdown as input — so you're not limited to public pages.

Some captures require patience. SPAs that hydrate client-side won't have content ready on DOMContentLoaded. Our wait_for_selector and delay parameters let you pause the capture until a specific DOM element appears or a fixed number of milliseconds pass. This is the difference between a blank page and a usable screenshot, and most rendering failures we debug for users come down to timing.

Rendering controls, blocking, and output options

Every screenshot starts with a viewport. You set width, height, and pick a device profile — desktop, mobile, or tablet. Our custom viewport and device emulation settings let you match any screen size exactly, from a 320px phone to a 2560px ultrawide monitor. Retina mode doubles the pixel density, which matters when your screenshots end up in presentations or on high-DPI displays. Need a dark mode capture? The API emulates prefers-color-scheme: dark at the browser level, so sites that respect the media query render correctly without CSS injection hacks.

Clean output requires removing things that shouldn't be there. The cookie banner blocker strips GDPR consent popups, and separate flags handle ads and chat widgets. For anything else, hide_selectors[] accepts CSS selectors to remove specific elements before capture. You can also inject custom CSS and JavaScript, set HTTP headers, and pass cookies — useful when you need to screenshot authenticated pages or override a site's default styles.

Output format depends on your use case. Choose between PNG, JPEG, WebP, AVIF, and TIFF through the image format parameter — each format has trade-offs between quality, file size, and browser compatibility that the guide breaks down in detail. We also support full HTML-to-image rendering when you don't have a live URL, and markdown-to-image conversion when your content lives in README files, changelogs, or AI-generated text. For documents, the URL-to-PDF converter handles page format, margins, and landscape orientation. The quality parameter controls compression for lossy formats, and resize_width / resize_height let you scale the output without a separate image processing step. One honest note: AVIF encoding is slower than other formats, so expect slightly higher response times when using it at high resolutions.

When you need to capture an entire page beyond the visible viewport, the full page screenshot parameter scrolls and stitches the complete document into a single image. This handles lazy-loaded content, infinite scroll patterns, and long-form pages that extend well past the initial fold.

Async delivery, AI integration, and the free tier

Not every workflow can wait for a synchronous response. The webhook parameter turns any capture request into an async job — you get a callback to your endpoint when the screenshot is ready, with signature verification so you can trust the payload. For AI-driven workflows, the MCP server lets AI agents request screenshots through the Model Context Protocol without custom HTTP code. Every feature described on this page is available on the free plan, with 200 screenshots per month to test against your actual use cases.