Send one request
Call the REST endpoint with a URL, your token, and any of the 75+ parameters. GET or POST both work.
Full page screenshots, scrolling screenshot videos, URL to PDF conversion, bulk processing, scheduled captures, authenticated pages, and cloud storage routing, all through one REST endpoint with 75+ rendering parameters. Pick your language, make a GET request, and the hard part is handled.
ScreenshotAPI runs the same capture pipeline for a single request and for batches of millions. A 99.9% uptime SLA, sub-3-second average render time, and automatic concurrency handling mean you do not manage browsers, queues, or retries.
Chromium
Real browser rendering
Every capture runs in real Chromium, so JavaScript, web fonts, and CSS render the way your users actually see them.
75+
Rendering parameters
Viewport, timing, blocking, injection, extraction, and storage controls, all on one REST endpoint.
20K+
Ad and cookie blocking rules
A maintained blocking engine strips ads, GDPR banners, and chat widgets before the shot fires.
99.9%
Uptime SLA
Backed by a public status page, so you can verify availability yourself before you build on it.
Live uptime and incident history available at status.screenshotapi.net
A screenshot API is a web service that loads any URL in a real browser and returns an image, PDF, or video of the rendered page through a single HTTP request. Instead of running and patching your own headless Chrome, Puppeteer, or Playwright fleet, you call one endpoint and the browser infrastructure, scaling, and edge cases are handled for you.
Call the REST endpoint with a URL, your token, and any of the 75+ parameters. GET or POST both work.
Chromium executes JavaScript, hydrates components, loads lazy content, and applies your viewport, timing, and blocking settings.
The response returns a PNG, JPG, WebP, PDF, or a scrolling GIF, MP4, or WebM video, hosted for you or routed to your own bucket.
JavaScript executed, lazy content loaded, viewports set to any device. The rendering pipeline handles the hard parts before the image is produced.
Capture the entire page not just the visible area. Set full_page=true and the renderer scrolls from top to bottom, triggering lazy-loaded images, off-screen components, and infinite-scroll sections before taking the final shot. Or pin exact width/height values to capture only the viewport. No clipping, no missing content.
full_page=true&width=1440&height=900React, Vue, Angular, and Next.js apps render correctly. The API waits for scripts to run, components to hydrate, and async data fetches to resolve before capture. Set lazy_load=true to auto-scroll the page and wake up every IntersectionObserver-driven element. No blank pages, no missing content.
lazy_load=true&delay=2000Blank captures are almost always a wait parameter problem. Set a JavaScript delay in milliseconds for animation-heavy pages that need idle time after load. Use wait_for_selector to hold the capture until a specific DOM element exists. Use wait_for_event=networkidle for async pages where content arrives in waves. All three combine in a single request.
wait_for_event=networkidle&wait_for_selector=.heroSet latitude and longitude coordinates so the browser's Geolocation API reports a specific location useful for sites that serve region-specific content or currency. Pair with the timezone parameter (IANA format: America/New_York, Asia/Karachi) to simulate local time in date displays, event listings, and localized UI.
latitude=51.5074&longitude=-0.1278&timezone=Europe/LondonCrop the capture to a specific element using the selector parameter capture just a pricing table, a chart, or a navigation bar. Use scroll_to_element to make the browser scroll to an off-screen element before firing. Apply blur_selector to redact sensitive information in the output without post-processing.
selector=.pricing-table&blur_selector=.user-emailBlank captures almost always come down to timing: the shot fired before the page finished rendering. ScreenshotAPI gives you three wait parameters, and they can be combined in a single request.
The simplest wait parameter. Set delay to give animation-heavy pages, countdowns, or slow third-party scripts a fixed idle window after load before the capture fires. Good when you know roughly how long the page needs and want predictable render times.
delay=2000A fixed delay guesses; a selector knows. Set wait_for_selector and the browser holds the shot until that exact element exists in the DOM. This is the reliable way to screenshot charts, maps, and dashboards that draw after the initial page load.
wait_for_selector=.chart-loadedFor async, API-driven pages where content arrives in waves, wait_for_event=networkidle holds the capture until outstanding network requests settle. Combine it with delay or wait_for_selector when a single strategy is not enough.
wait_for_event=networkidleThe same URL, the same rendering quality, whichever format fits your workflow.
Convert any URL to a print-ready PDF with a single parameter change. ScreenshotAPI preserves fonts, layout, and dynamic content. Ads and cookie banners stripped automatically. Use it for compliance archiving, invoice generation, legal documentation, and automated PDF reporting workflows.
file_type=pdf&block_ads=trueGenerate an animated scrolling video of any webpage GIF for sharing, MP4 for quality, WebM for web embedding. Control scroll speed (slow / normal / fast), duration (0–60s), scroll direction, and whether to loop back to the top. Capture multiple viewport sizes in a single call with the multiple_scrolling parameter.
scrolling_screenshot=true&file_type=gif&scroll_speed=normal&duration=8Skip the URL entirely. Pass raw HTML via the custom_html parameter and ScreenshotAPI renders it to PNG, JPG, WebP, or PDF. Generate OG images, email header visuals, invoice PDFs, certificate images, or any dynamic image directly from HTML templates. No hosted page required.
custom_html=<h1>Hello</h1>&file_type=pngA static full-page image shrinks a long page down to fit. A scrolling capture keeps it at readable size and moves through it instead as a GIF, an MP4, or a WebM, from a single parameter.
Paste this scrolling screenshot GIF straight into a Slack thread, a pull request, or an email. GIF files are universally supported across every platform and browser, so there is no need for a video player or extra plugin. The lightweight file size makes this format perfect for quick sharing, fast page loading, and instant screen recording exchanges with your team.
scrolling_screenshot=true&file_type=gif&scroll_speed=normalThe MP4 format delivers sharper text and crisper visual quality at a fraction of the file size, making it the ideal choice for product demos, changelogs, and detailed product walkthroughs. This scrolling screenshot video can be customized anywhere from 0 to 60 seconds, giving you full control over the length of your screen recording based on your exact needs.
scrolling_screenshot=true&file_type=mp4&duration=8The WebM format is built specifically for the web. It autoplays natively in the browser and compresses tightly, making it a great fit for embedding on your own website. Add the multiple_scrolling parameter to capture several viewports in a single API call, letting you generate multiple scrolling screenshots at once.
scrolling_screenshot=true&file_type=webm&multiple_scrolling=trueScale from a single capture to thousands. Set it and forget it with cron-based scheduling.
Upload a CSV of URLs and ScreenshotAPI processes all of them automatically applying your chosen parameters uniformly across every URL. No scripting a loop, no managing concurrent requests. Get back a uniform batch of clean, ad-free screenshots at scale for SEO audits, competitive analysis, and automated reporting.
bulk CSV upload via dashboard or APISet up recurring screenshot jobs using cron expressions hourly, daily, weekly, or custom intervals. ScreenshotAPI captures full page screenshots automatically on schedule and stores them to your dashboard or your own cloud bucket. Monitor visual changes, track content updates, and build uptime records without writing any scheduler code.
0 9 * * 1 (every Monday 9am)Previously rendered screenshots are cached and returned instantly - zero render time, zero extra cost. When you need a fresh capture (post-deployment, after a content update), add fresh=true to bypass the cache. The cache key is uniquely determined by the URL plus all parameters, so different configurations never collide.
fresh=true&enable_caching=trueBlock noise, inject code, authenticate sessions, and extract content parameters that cover the edge cases.
Built-in blocking engine strips ads, GDPR consent banners, cookie popups, chat widgets, and tracking scripts before the screenshot fires. Enable both parameters and every capture comes back clean. no manual CSS workarounds, no selector maintenance.
block_ads=true&no_cookie_banners=trueScreenshot pages behind login walls by injecting session cookies directly into the request via the cookies parameter, or save a named Cookie Template in the dashboard and reference it with template_id. Capture authenticated dashboards, paywalled content, SaaS app views, and internal tools. No proxy tricks required.
cookies=session_id=abc123; auth_token=xyz&template_id=12345Inject custom CSS to hide elements, override styles, or simulate brand variants select by class, ID, or any CSS selector and add display: none or any other rule. Inject JavaScript to interact with the page before capture: click buttons, dismiss modals, fill form fields, scroll to positions. Full control before the shutter fires.
css=.cookie-banner{display:none}&js=window.scrollTo(0,500)Use extract_text=true to get the rendered page's readable text content alongside or instead of an image - titles, body copy, pricing data, metadata. Pair it with a screenshot for a combined visual + structured-data capture in one API call. Ideal for competitive intelligence, content monitoring, and research workflows.
extract_text=true&output=jsonRoute screenshots to your own cloud bucket or connect to no-code platforms without touching your codebase.
Route screenshots directly to your own Amazon S3, Wasabi, or Google Cloud Storage bucket. No copies sitting on ScreenshotAPI's servers. Configure the integration once in the Storage Integrations tab, then pass byob=true plus storage_service and bucket_name on any request. Your data stays in your infrastructure.
byob=true&storage_service=aws&bucket_name=my-bucketConnect ScreenshotAPI to your existing workflows without writing code. Native integrations with Zapier, Make (formerly Integromat), Google Sheets (custom function), n8n, and viaSocket mean you can trigger screenshots from form submissions, spreadsheet rows, CRM events, or any other automation and pipe results back wherever you need them.
Zapier · Make · Google Sheets · n8n · viaSocketMost screenshot APIs cover the basics. The differences show up in what's included at the entry tier and how usage gets counted. Here's the diff against three well-known alternatives.
The same endpoint powers monitoring pipelines, compliance archives, audit tooling, and image generation. These are the six patterns that come up most.
Schedule captures of competitor pricing pages, landing pages, and product listings with cron expressions. Pair a screenshot with extract_text=true to get the visual record and the readable content in one call.
Convert pages to print-ready PDFs with ads and cookie banners stripped, on demand or on a schedule. Route every file to your own S3, Wasabi, or Google Cloud bucket so records never leave your infrastructure.
Upload a CSV of URLs and get back a uniform batch of clean, ad-free captures. Audit hundreds of pages across devices by setting viewport, retina, and dark_mode parameters once for the whole batch.
Generate Open Graph images, email headers, certificates, and invoice visuals straight from HTML templates with custom_html. No hosted page, no image editor, no manual export step.
Inject session cookies or reference a saved Cookie Template to capture pages behind login walls: admin panels, analytics dashboards, paywalled content, and internal tools.
Capture the page and its rendered text together. extract_text=true returns titles, body copy, and pricing data as structured output alongside the image, which turns one API call into both evidence and data.
A screenshot API is a web service that loads a URL in a real browser and returns an image, PDF, or video of the rendered page through an HTTP request. It replaces self-managed headless browser infrastructure such as Puppeteer or Playwright clusters with a single endpoint call.
Every request renders in real Chromium, so React, Vue, Angular, and Next.js apps execute normally. Set lazy_load=true to auto-scroll the page and trigger lazy-loaded content, and use delay, wait_for_selector, or wait_for_event=networkidle to hold the capture until the page is genuinely ready.
Add scrolling_screenshot=true to your request and choose file_type=gif, mp4, or webm. You can control scroll_speed, set a duration between 0 and 60 seconds, choose the scroll direction, loop back to the top, and capture multiple viewport sizes in one call with multiple_scrolling.
Yes. Pass session cookies directly with the cookies parameter, or save a named Cookie Template in the dashboard and reference it with template_id. This captures authenticated dashboards, paywalled articles, and internal tools without proxy workarounds.
PNG, JPG, and WebP for images, PDF for documents, and GIF, MP4, and WebM for scrolling video captures. The format is set with the file_type parameter, and image_quality controls compression for JPG and WebP output.
Three timing parameters cover it: delay waits a fixed number of milliseconds, wait_for_selector waits until a specific element exists in the DOM, and wait_for_event=networkidle waits until network requests settle. They can be combined in a single request for complex pages.
Yes. Configure the integration once in the Storage Integrations tab, then pass byob=true with storage_service and bucket_name on any request. Captures are routed directly to your own Amazon S3, Wasabi, or Google Cloud Storage bucket instead of sitting on ScreenshotAPI servers.
Every new account starts with 100 free screenshots, which is enough to test full-page capture, PDF export, scrolling video, and the blocking engine against your own URLs before choosing a plan.
Ready to automate your screenshots?
100 free screenshots, no credit card required. Integrate in minutes with Node.js, Python, PHP, Ruby, Go, or Java.
Start for free