Website Screenshot — Full Page, Lazy-Load Safe, Batch, Mobile
Pricing
from $3.84 / 1,000 captured screenshots
Website Screenshot — Full Page, Lazy-Load Safe, Batch, Mobile
Take a full page screenshot of a website. Waits for lazy-loaded images and fonts, dismisses cookie banners. Batch up to 100 URLs, desktop/mobile/retina, PNG or JPEG. $0.0048 per screenshot produced — failed URLs never charged.
Pricing
from $3.84 / 1,000 captured screenshots
Rating
0.0
(0)
Developer
Broke to Built
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Website Screenshot Pro — full-page shots that actually wait for the page
Screenshot any page, or a whole batch, at desktop / laptop / tablet / mobile sizes. Full-page captures that include lazy-loaded images instead of cutting them off, with cookie banners dismissed so they aren't sitting across your shot.
No API key. No signup. Pay per screenshot produced — a URL that fails is never charged.
Use it as a website screenshot API for thumbnails, visual archives, link previews, monitoring, SEO audits, or agent pipelines: full-page PNG or JPEG capture of any URL, desktop or mobile viewport, retina scale, dark mode, batch of up to 100 URLs in one run.
Why shots come out wrong elsewhere, and what this does about it
| The usual problem | What this actor does |
|---|---|
| Lazy-loaded images render as blank boxes | Scrolls the entire page to trigger loading, returns to top, then captures |
| Web fonts swap mid-capture, text looks wrong | Waits on document.fonts.ready before shooting |
| A cookie banner covers the content | Best-effort dismissal of common consent buttons (can be turned off) |
| Full-page capture is clipped | True fullPage capture, with the real page height reported back |
| One URL per run | Batch input — and one bad URL never aborts the others |
| A failed run still costs you | Only successful screenshots are billed |
Input
{ "url": "https://example.com", "device": "desktop", "fullPage": true }
Batch, mobile, dark mode:
{"urls": ["https://a.com", "https://b.com"],"device": "mobile","colorScheme": "dark","format": "jpeg","quality": 85}
| Field | Type | Default | Notes |
|---|---|---|---|
url / urls | string / array | — | One page, or a batch |
device | desktop | laptop | tablet | mobile | desktop | Tablet 2×, mobile 3× retina |
fullPage | boolean | true | Whole page vs viewport only |
format | png | jpeg | png | JPEG for smaller files |
quality | integer 1–100 | 85 | JPEG only |
colorScheme | light | dark | light | Renders the page's dark mode |
dismissCookieBanners | boolean | true | Best effort, never fails the shot |
extraWaitMs | integer | 500 | Extra settle time for animations |
maxUrls | integer | 20 | Cap, and therefore your budget cap |
Output
One record per URL. Successful captures include a direct image URL:
{"url": "https://example.com","ok": true,"status": 200,"title": "Example Domain","device": "desktop","viewport": "1920x1080","deviceScaleFactor": 1,"fullPage": true,"format": "png","pageWidth": 1920,"pageHeight": 4310,"bytes": 812344,"tookMs": 3120,"screenshotUrl": "https://api.apify.com/v2/key-value-stores/.../records/example-com-1920xfull.png"}
Failures are returned, not thrown:
{ "url": "https://broken.example", "ok": false, "error": "net::ERR_NAME_NOT_RESOLVED", "tookMs": 1200 }
For agents and automation
- Capability: capture a rendered screenshot of one or many web pages
- Required input:
urlorurls - Returns: one JSON record per URL;
screenshotUrlis a directly fetchable image - Bounded:
maxUrlscaps the run; failures isolate per URL - Side effects: none — reads the page, stores images in this run's key-value store
- Determinism: layout-dependent; identical input on an unchanged page yields an equivalent image
Pricing — $0.0048 per screenshot, failures free
Pay-per-event: one flat $0.0048 per screenshot actually produced. A URL that fails —
DNS error, timeout, dead page — is returned as an {ok: false} record and is never charged.
Compared with other paid screenshot actors on Apify (prices checked 2026-08-07):
| Actor | Price | Billing unit |
|---|---|---|
| This actor | $0.0048 | per screenshot produced — failures free |
| i-scraper/website-screenshot | $0.006 | per dataset item |
| crawlerbros/screenshot-url | $0.01 | per actor start — a failed run still bills |
| onescales/website-screenshot-pro | per-start fee | plus your own platform compute |
That is 20% under the cheapest per-screenshot incumbent and less than half of per-start billing, with the honesty guarantee on top: you pay for images, not attempts.
Limits (honest ones)
- Pages that hard-block headless browsers (aggressive bot walls) may fail; you are not charged.
- Cookie-banner dismissal is best-effort pattern matching — exotic consent widgets can survive it.
- Full-page capture walks up to 60,000px of page height; beyond that the capture is of the walked region.
- Batch cap is 100 URLs per run (
maxUrls).
FAQ
Why do my screenshots elsewhere have blank spaces where images should be? Because the capture
fired before lazy-loaded images had loaded. Most tools wait for the load event, which happens long
before an image that only loads on scroll ever starts fetching. This one scrolls the page, waits for
in-flight image requests to settle, and then captures.
Does it handle cookie banners? Yes, best-effort: common consent widgets are detected and dismissed before capture, so the shot is of the page rather than of an overlay. Exotic or heavily customised consent tools can survive it — that is listed above under limits rather than hidden.
Can I capture the full page, not just the viewport? Yes — full-page is the default, walking up to 60,000px of height. Set a viewport size if you want a specific device frame instead.
Can I take mobile screenshots? Yes. Set the viewport to a mobile size and the page is rendered at that width, so you get the responsive layout rather than a desktop page squeezed down.
What happens if a page fails to load? You get a record saying so, and you are not charged for it. Only a captured screenshot bills an event.
Where does the image go? Each screenshot is stored in the run's key-value store, and the record carries its direct URL — so an agent or a script can fetch the file straight from the result without a second lookup.
For AI agents
This Actor is built to be called by software, not just by people.
- Mount it directly as an MCP tool — no Store search, no ranking, just this one tool:
https://mcp.apify.com/?actors=eliai/website-screenshot-pro - Or call it over HTTP and get the results in the same request:
POST https://api.apify.com/v2/acts/eliai~website-screenshot-pro/run-sync-get-dataset-items - Pay with x402, without an Apify account. This Actor is whitelisted for agentic payments, so an agent holding USDC on Base can buy a prepaid token and spend it here. The minimum purchase is $1, the token balance is an absolute spending cap, and it expires 14 days after purchase.
- Costs are predictable before you call. Pricing is pay-per-event (see Pricing above), so an agent can budget a run in advance instead of discovering the bill afterwards.
- Send only the field you mean. If you pass the bulk field, it is used on its own; the single-value field is a fallback, never merged into your request. You are charged for the items you sent and nothing else.