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 moreWait for Selector & Delay
Wait for specific elements to appear before capturing. Handle SPAs, lazy-loaded content, and dynamic pages reliably.
Learn moreBlock Cookie Banners
Automatically hide cookie consent popups, GDPR banners, and chat widgets for clean, unobstructed screenshots.
Learn moreCustom Viewport & Device
Set any resolution, emulate mobile or tablet devices, and enable Retina rendering for pixel-perfect captures.
Learn moreWebsite to PDF
Convert any webpage to a PDF document with customizable page format, margins, and landscape orientation.
Learn moreHTML to Image
Render raw HTML, CSS, and JavaScript into a screenshot — no live URL required. Great for templates and reports.
Learn moreMarkdown to Image
Send raw markdown text, get back a clean image. Headings, tables, code blocks, lists — all rendered with good typography.
Learn moreDark Mode
Capture websites in dark mode by emulating the prefers-color-scheme: dark media feature automatically.
Learn moreImage Format & Quality
Choose between PNG, JPEG, WebP, AVIF, and TIFF. Control compression quality for the perfect size-to-quality ratio.
Learn moreMCP Server
Connect ScreenshotRun to AI agents via the Model Context Protocol. Let your AI capture screenshots autonomously.
Learn moreWebhook
Add webhook_url to any request and get screenshots delivered to your endpoint when ready. Non-blocking, with retries and signature verification.
Learn moreScreenshot to Base64
Get screenshots as base64-encoded strings in JSON. No file downloads or storage setup needed. Ideal for serverless and email embedding.
Learn moreTransparent 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 moreEmail 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 moreCertified 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 moreGeo 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 moreStealth Mode
Bypass Cloudflare, DataDome, and bot detection with one parameter. Randomized fingerprints, automation signal removal, and challenge page handling built in.
Learn moreCSS & 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 moreBlock Ads & Chat Widgets
Remove ads, chat widgets, and cookie banners automatically. Three boolean parameters for common distractions, plus hide_selectors for custom elements.
Learn moreWhy 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.