Website Screenshot API — Full-Page, Mobile & PDF Captures avatar

Website Screenshot API — Full-Page, Mobile & PDF Captures

Pricing

from $2.00 / 1,000 screenshots

Go to Apify Store
Website Screenshot API — Full-Page, Mobile & PDF Captures

Website Screenshot API — Full-Page, Mobile & PDF Captures

Take full-page website screenshots in bulk with real Chrome: desktop, laptop, tablet and mobile in one run, PNG/JPEG/PDF, element screenshots, dark mode, auto-hidden cookie banners and lazy-load scrolling. Public image URLs, pay per screenshot.

Pricing

from $2.00 / 1,000 screenshots

Rating

0.0

(0)

Developer

North Eng

North Eng

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

13 days ago

Last modified

Features

Limited permissions

Share

Website Screenshot API captures websites in bulk with real Chrome: full-page or viewport, desktop, laptop, tablet and mobile in one run, PNG, JPEG or PDF. Cookie banners are hidden, lazy-loaded images are scrolled into view and animations are frozen, so the screenshots look like what a visitor sees. Every image gets a public URL you can open, download or embed.

What it does

  • Bulk URLs × devices: each URL is captured once per selected device: desktop (1920×1080), laptop (1366×768), tablet (iPad, 2× pixels) and mobile (iPhone, 2× pixels, mobile user agent).
  • Full-page screenshots: the whole scrollable page, with a configurable maximum height for endless pages.
  • PNG, JPEG or PDF: lossless PNG, smaller JPEG with adjustable quality, or a printable A4 PDF of the page.
  • Element screenshots: capture just #pricing, .hero or any other CSS selector.
  • Clean captures: hides common consent pop-ups (OneTrust, Cookiebot, Quantcast, Didomi, Usercentrics and more) plus any selectors you list, such as chat widgets.
  • Timing control: wait for load, domcontentloaded or networkidle, wait for a selector, and add an extra delay.
  • Dark mode and custom viewports: emulate prefers-color-scheme: dark, set any width/height and pixel density up to 3×.
  • Safe by design: localhost, private-network and cloud-metadata addresses are refused.

Why use it

  • Visual monitoring and archiving: snapshot landing pages, competitors' pricing pages or your own releases on a schedule.
  • Responsive design QA: see the same page on desktop, tablet and mobile in one run.
  • Thumbnails and previews: generate link previews, portfolio images or social cards.
  • AI agents: give a vision model a screenshot of any page through the Apify API or MCP.

How to use

  1. Add one or more Website URLs.
  2. Pick Devices and a Format (PNG by default).
  3. Click Start. Open the Screenshots tab of the output to see the images, or download them from the key-value store.

Input

FieldDefaultWhat it does
urlshttps://apify.comPages to capture.
devices["desktop"]Any of desktop, laptop, tablet, mobile. One screenshot per URL per device.
fullPagetrueCapture the whole scrollable page instead of the first screen.
formatpngpng, jpeg or pdf.
jpegQuality801–100, JPEG only.
selectornoneCSS selector: capture only the first matching element.
viewportWidth / viewportHeightdevice defaultCustom viewport in CSS pixels (up to 3840×2160).
deviceScaleFactordevice defaultPixel density 1–3.
maxHeight10000Full-page captures are cut at this height (CSS px, max 20000).
darkModefalseEmulate dark mode.
hideCookieBannerstrueHide common consent banners.
hideSelectorsnoneExtra CSS selectors to hide, e.g. #intercom-container.
scrollPagetrueScroll through the page first so lazy images load.
waitUntilloadload, domcontentloaded or networkidle.
waitForSelectornoneWait until this selector is visible before capturing.
delaySecs1Extra wait before capturing (0–30 s).
timeoutSecs60Page-load timeout per screenshot (10–180 s).
maxConcurrency3Screenshots taken in parallel (1–10).

Example: a landing page on three devices as JPEG, without the chat widget:

{
"urls": [{ "url": "https://www.bbc.com/news" }, { "url": "https://github.com" }],
"devices": ["desktop", "tablet", "mobile"],
"format": "jpeg",
"jpegQuality": 70,
"hideSelectors": ["#intercom-container"]
}

Element screenshot:

{ "urls": [{ "url": "https://example.com" }], "selector": "p", "fullPage": false }

Output

Each screenshot is saved to the run's key-value store and listed in the dataset. Real example from the default input (Oct 22 2026):

{
"url": "https://apify.com/",
"finalUrl": "https://apify.com/",
"title": "Apify: Marketplace of ready-to-run tools for AI",
"device": "desktop",
"format": "png",
"fullPage": true,
"width": 1920,
"height": 9932,
"truncatedAtMaxHeight": false,
"fileSizeBytes": 1025335,
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/apify.com-b2cbecea-desktop.png",
"keyValueStoreKey": "apify.com-b2cbecea-desktop.png",
"statusCode": 200,
"durationMs": 4975,
"error": null,
"errorCode": null,
"takenAt": "2026-10-23T00:07:43.086Z"
}

width and height are in image pixels (CSS pixels × pixel density); they are null for PDFs. truncatedAtMaxHeight is true when the page was taller than maxHeight (or than the 120-megapixel safety limit for very tall high-density captures) and the image was cut.

Failed screenshots are listed with error and errorCode and are not charged:

{
"url": "https://httpbin.org/status/404",
"device": "desktop",
"format": "png",
"error": "HTTP 404",
"errorCode": "HTTP_404"
}

Error codes: HTTP_404 (and other statuses ≥ 400), TIMEOUT, NETWORK_ERROR (DNS, connection or TLS failure), SELECTOR_NOT_FOUND, BLOCKED_URL (the URL or a redirect resolves to a private, local or cloud-metadata address), NAVIGATION_FAILED. A run summary is saved to the key-value store as OUTPUT.

Pricing

Pay per screenshot. Only successful captures are charged:

EventPrice
Screenshot taken (one URL on one device, any format)$0.002 ($2 per 1,000)
Actor startApify default ($0.00005)

Examples: 100 URLs on desktop cost $0.20; 100 URLs on desktop + mobile cost $0.40. Failed pages cost nothing. Set a max cost per run and the Actor stops when the budget is reached, keeping the screenshots it already took.

FAQ

Can it screenshot pages behind a login? No. It captures public pages only.

Why is my mobile screenshot wider than 780 px? Pages without a mobile viewport meta tag are laid out at 980 px wide by mobile browsers. The Actor shows what a real phone shows.

Does it remove every pop-up? It hides the common consent managers automatically. For other pop-ups, add their selectors to Hide elements.

Can I get a screenshot at a fixed size, like 1200×630? Yes: set viewportWidth 1200, viewportHeight 630 and turn off fullPage.

Limitations

  • Very long pages are cut at maxHeight (default 10,000 px).
  • Some sites block automated browsers or show a CAPTCHA; the screenshot then shows that page.
  • Private, local and cloud-metadata addresses are refused after DNS resolution, for the page, every redirect, sub-resource and WebSocket. Sites on a private network (intranets, staging behind a VPN) cannot be captured.