Website Screenshot API — Full-Page, Mobile & PDF Captures
Pricing
from $2.00 / 1,000 screenshots
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
13 days ago
Last modified
Categories
Features
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,.heroor 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,domcontentloadedornetworkidle, 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
- Add one or more Website URLs.
- Pick Devices and a Format (PNG by default).
- Click Start. Open the Screenshots tab of the output to see the images, or download them from the key-value store.
Input
| Field | Default | What it does |
|---|---|---|
urls | https://apify.com | Pages to capture. |
devices | ["desktop"] | Any of desktop, laptop, tablet, mobile. One screenshot per URL per device. |
fullPage | true | Capture the whole scrollable page instead of the first screen. |
format | png | png, jpeg or pdf. |
jpegQuality | 80 | 1–100, JPEG only. |
selector | none | CSS selector: capture only the first matching element. |
viewportWidth / viewportHeight | device default | Custom viewport in CSS pixels (up to 3840×2160). |
deviceScaleFactor | device default | Pixel density 1–3. |
maxHeight | 10000 | Full-page captures are cut at this height (CSS px, max 20000). |
darkMode | false | Emulate dark mode. |
hideCookieBanners | true | Hide common consent banners. |
hideSelectors | none | Extra CSS selectors to hide, e.g. #intercom-container. |
scrollPage | true | Scroll through the page first so lazy images load. |
waitUntil | load | load, domcontentloaded or networkidle. |
waitForSelector | none | Wait until this selector is visible before capturing. |
delaySecs | 1 | Extra wait before capturing (0–30 s). |
timeoutSecs | 60 | Page-load timeout per screenshot (10–180 s). |
maxConcurrency | 3 | Screenshots 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:
| Event | Price |
|---|---|
| Screenshot taken (one URL on one device, any format) | $0.002 ($2 per 1,000) |
| Actor start | Apify 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.