Website Screenshot API — Full-Page, Element & Device Capture
Pricing
Pay per usage
Website Screenshot API — Full-Page, Element & Device Capture
Website Screenshot API: capture any URL as PNG, JPEG or WebP (PDF too) — true full-page, element & region capture, 13 device profiles, dark mode, retina, ad/cookie-banner blocking, stealth, auth & geo. Self-scaling and SSRF-safe. Standby HTTP + batch.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
CheapAPI
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
19 hours ago
Last modified
Categories
Share
Turn any URL into a pixel-perfect screenshot (PNG, JPEG, or WebP) — full page, a single element, or an exact region. Most screenshot tools stop at "PNG of the viewport." This one adds 13 realistic device profiles, retina capture, dark mode, automatic cookie-consent + ad blocking, stealth, authenticated-page support, geolocation and bring-your-own-proxy — all self-scaling and hardened against SSRF. Use it as an always-on Standby HTTP API, in batch runs, or as a tool for AI agents (Apify MCP). You only pay for successful screenshots.
Why this actor (the edge)
- 🖼️ All four formats — PNG, JPEG, WebP (smaller files), and PDF. Many actors do PNG/PDF only.
- 📱 13 device profiles — desktop / laptop / QHD / Mac-retina / iPhone / Pixel / Galaxy / iPad / social aspect ratios — each a consistent viewport + pixel density + matching user-agent + touch. Pick
iphone_15and you get a real iPhone capture, not a squished desktop. All profiles cost the same. - 📜 True full-page with a safe 16384 px cap — not a fragile "scroll to bottom" hack.
- 🎯 Element & region capture — CSS
selectoror an exactcliprectangle. - 🌙 Dark mode, retina (
deviceScaleFactorup to 3), custom viewport, transparent background. - 🍪 Cookie consent handled properly — it clicks "Accept" (unlocking consent-gated content), then hides leftovers. Plus ad/tracker blocking.
- 🥷 Stealth on by default — masks the obvious headless tells so pages don't flag a bot (no CAPTCHA solving).
- 🔐 Authenticated & paywalled pages — pass
cookiesandheaders(e.g.Authorization); secrets are sent first-party only. - 🌍 Geo capture —
geolocationspoofing and bring-your-ownproxyto capture a page as seen from any country. - ⚡ Self-scaling & reliable — reads the run's memory/CPU and tunes concurrency; a bounded queue returns
429instead of crashing under load. - 🛡️ SSRF-safe by design — every request (and redirect/subresource) is routed through a forced proxy that resolves, classifies and pins the IP; private/metadata ranges are blocked and DNS-rebinding is defeated. Downloads are refused (no disk abuse).
- 💸 Billed only on success at $0.0009 / screenshot ($0.90 / 1,000) — failures and rejections are free.
How it compares
| Capability | This actor | Typical screenshot actors | Standalone SaaS APIs |
|---|---|---|---|
| PNG / JPEG / WebP / PDF | ✅ all 4 | ⚠️ often PNG/PDF only | ✅ |
| True full-page (capped) | ✅ | ⚠️ scroll-to-bottom hack | ✅ |
Element + region (clip) | ✅ | ❌ rare | ⚠️ some |
Retina / deviceScaleFactor | ✅ 1–3 | ❌ usually none | ✅ |
| 13 real device profiles | ✅ | ❌ width-only | ⚠️ some |
| Dark mode | ✅ | ❌ | ⚠️ some |
| Auto-accept cookie consent | ✅ (clicks Accept) | ❌ hide-only at best | ⚠️ hide-only |
| Ad/tracker blocking | ✅ | ❌ manual selectors | ✅ |
| Stealth (anti-bot tells) | ✅ default | ❌ | 💲 premium tier |
| Authenticated pages (cookies/headers) | ✅ first-party-scoped | ⚠️ rare | 💲 premium |
| Geolocation + own proxy | ✅ | ❌ | 💲 premium |
| Self-scaling + backpressure | ✅ | ❌ | n/a (managed) |
| SSRF-safe, no downloads | ✅ | ❓ usually unstated | ✅ |
| Price | $0.0009 / shot ($0.90/1K), success-only | ~$0.008 + or free+compute | $2–$10 / 1,000 |
Legend: ✅ yes · ⚠️ partial/varies · ❌ no · 💲 paid add-on. "Typical screenshot actors" reflects the common feature set across popular Store alternatives at the time of writing.
Features in detail
| Feature | How |
|---|---|
| Formats | format = png · jpeg · webp · pdf (WebP re-encoded with sharp; PDF rendered by Chromium). |
| Full page | fullPage=true; height capped at 16384 px and reported via truncatedHeight. |
| Element / region | selector for one element, or clip {x,y,width,height}. |
| Device profiles | device (see list above); explicit width/height/deviceScaleFactor override it. |
| Dark mode | colorScheme=dark. |
| Cookie consent | acceptCookies clicks Accept (CMP vendors + text heuristic, iframes); blockCookieBanners hides leftovers. |
| Blocking | blockAds, blockImages. |
| Stealth | stealth (default on) masks navigator.webdriver, HeadlessChrome UA, plugins. |
| Auth | cookies[], headers{} (first-party only; hop-by-hop/spoofable headers rejected). |
| Emulation | locale, timezoneId, userAgent, geolocation, isMobile. |
| Proxy | proxy — your own http/socks proxy (validated public). |
| Waits | waitUntil, waitForSelector, delayMs, timeoutMs. |
Pricing
Pay-per-event, charged only on a successful capture. Failed captures, validation errors and queue rejections are free.
| Event | When | Price |
|---|---|---|
screenshot | One successful screenshot delivered | $0.0009 ($0.90 / 1,000) |
apify-actor-start | Run / Standby boot | platform default |
At $0.0009 / screenshot ($0.90 / 1,000) this sits an order of magnitude below standalone APIs ($2–$10 / 1,000) while doing more per shot. Set the exact price in Console → Monetization before publishing.
Usage
Standby — always-on HTTP API
Enable Standby in the Console, then call the Actor hostname with your Apify token:
curl "https://<username>--website-screenshot-api.apify.actor/screenshot?url=https://apify.com&fullPage=true&format=webp" \-H "Authorization: Bearer <APIFY_TOKEN>"
POST JSON for advanced options:
curl -X POST "https://<username>--website-screenshot-api.apify.actor/screenshot" \-H "Authorization: Bearer <APIFY_TOKEN>" -H "Content-Type: application/json" \-d '{"url":"https://apify.com","device":"iphone_15","colorScheme":"dark"}'
Response is JSON: capture metadata + the key-value store key and public url of the image.
Batch run
{ "url": "https://apify.com", "urls": ["https://example.com"], "format": "png", "fullPage": true, "device": "desktop" }
Each URL → one image in the key-value store + one metadata row in the dataset.
AI agents (MCP)
Discoverable and runnable through Apify's MCP server (mcp.apify.com) — the input schema is exposed as a tool automatically; no extra setup.
Input parameter reference
| Parameter | Type | Default | Notes |
|---|---|---|---|
url | string | — (required) | http(s); must resolve to a public address. |
urls | string[] | — | Batch mode. |
format | string | png | png, jpeg, webp, pdf. |
quality | integer | 80 | JPEG/WebP 1–100. |
fullPage | boolean | false | Whole scrollable page. |
device | string | desktop | Device profile. |
width / height | integer | (device) | 1–3840 / 1–4320. |
deviceScaleFactor | number | (device) | 1–3. |
waitUntil | string | load | load,domcontentloaded,commit,networkidle. |
waitForSelector | string | — | Wait for an element. |
delayMs / timeoutMs | integer | 0 / 30000 | 0–10000 / 1000–60000. |
colorScheme | string | no-preference | light,dark. |
selector / clip | string / object | — | Element or region. |
omitBackground | boolean | false | Transparent (PNG/WebP). |
blockAds / blockCookieBanners / acceptCookies | boolean | true | Cleaner captures. |
blockImages / stealth / isMobile | boolean | false/true/(device) | — |
locale / timezoneId / userAgent | string | — | Emulation. |
geolocation | object | — | {latitude,longitude}. |
cookies / headers | array / object | — | Auth (first-party only). |
proxy | string | — | Your own http/socks proxy (public). |
Output
- Image/PDF binary in the key-value store (
<prefix>.<ext>, correctContent-Type). - A dataset row with metadata + KV key and public URL:
{ "url": "https://apify.com", "finalUrl": "https://apify.com/", "format": "png","width": 1920, "height": 1080, "fullPage": true, "bytes": 184213, "tookMs": 1842,"key": "screenshot-....png", "url_": "https://api.apify.com/v2/key-value-stores/<storeId>/records/<key>" }
Security & limits
- SSRF protection always on: forced in-process proxy resolves DNS, classifies every resolved IP, blocks private/reserved/loopback/link-local (incl.
169.254.169.254), pins the validated IP (defeats DNS-rebinding) — for the page and its subresources/redirects. - No downloads / no execution:
acceptDownloads:false; pages are only rendered, never run on the host. - Bounds: full-page ≤ 16384 px, per-capture timeout ≤ 60 s, response size cap, viewport ≤ 3840×4320, DSF ≤ 3. Fresh isolated browser context per capture.
License
Apache-2.0