Website Screenshot API - Full Page, No Cookie Banners
Pricing
from $20.00 / 1,000 website screenshot api - full page, no cookie banners
Website Screenshot API - Full Page, No Cookie Banners
Bulk screenshots of any URL: full page, single element or viewport, six device presets, PNG or JPEG. Removes cookie banners and reports whether it actually worked, so you can trust the image. Blocked, unreachable and mis-targeted pages are never charged.
Pricing
from $20.00 / 1,000 website screenshot api - full page, no cookie banners
Rating
0.0
(0)
Developer
Apisight
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Website Screenshot API — full-page, mobile, and no cookie banners
Capture clean screenshots of any URL, in bulk. Built for the two things that ruin automated screenshots: cookie-consent overlays and lazy-loaded images that never render.
You are charged only for screenshots that were actually produced. Blocked, unreachable and mis-targeted pages are returned with a reason and cost you nothing.
Why this one
Most screenshot tools hand you a photograph of a consent dialog. This one removes it, and tells you honestly whether it succeeded.
| This Actor | |
|---|---|
| Cookie banners | Dismisses 26 known consent platforms (OneTrust, Cookiebot, Usercentrics, Didomi, Quantcast, Sourcepoint, TrustArc, Complianz, Borlabs, CookieYes, Klaro, Iubenda, Axeptio, …) plus a structural detector that finds unbranded consent modals by shape and wording, in 12 languages |
| Honest reporting | Every record says whether a banner was detected, how it was handled, and whether it was stillVisible afterwards — so you can tell "this site had no banner" from "the banner is still in your image" |
| Lazy-loaded images | Scrolls the page before a full-page capture so images actually render instead of leaving blank placeholders |
| Ads and trackers | Blocked by default: cleaner images, and ad-heavy pages load much faster |
| Devices | Six presets from 1920×1080 desktop to 360×640 mobile, with correct pixel density, touch support and mobile user agent |
| Bot protection | Detected and reported as blocked rather than silently returning a screenshot of a challenge page — and never charged |
| Very long pages | Clipped at 20,000 px and flagged truncated instead of producing an unusable file |
Measured, not claimed
On a 12-site European sample (news, retail, grocery, travel), the current build detected a
consent overlay on 5 sites, removed it on 5 of 5, left 0 still visible, and
correctly classified 1 bot-protected site as blocked without billing for it. One site's
dialog carried no cookie-ish markup at all — it was found by shape and wording instead.
Input
Minimum:
{ "startUrls": ["apify.com", "https://stripe.com/pricing"] }
Common options:
{"startUrls": ["bbc.com", "lidl.nl"],"device": "mobile","fullPage": true,"format": "jpeg","quality": 85,"dismissConsent": true,"blockAds": true,"selector": "","hideSelectors": [".sticky-header", "#chat-widget"],"darkMode": false,"waitUntil": "load","delayMs": 0,"lazyLoadMs": 3000,"timeoutSecs": 30,"maxConcurrency": 4}
| Option | What it does |
|---|---|
device | desktop (1920×1080), desktop-small, laptop (retina), tablet, mobile (390×844 @3x), mobile-small |
fullPage | Whole scrollable page (default) or just the viewport |
selector | Capture one element, e.g. .pricing-table. Not found → reported as an error, not charged |
hideSelectors | Hide your own list of elements (sticky headers, chat widgets) before capture |
waitUntil | load (default), domcontentloaded (fastest), networkidle (most complete, slowest) |
lazyLoadMs | Scroll budget for triggering lazy images. 0 disables it |
proxyConfiguration | Apify Proxy, on by default — many sites block shared cloud IPs, and blocked pages earn you nothing |
Output
One dataset record per requested page:
{"inputUrl": "lidl.nl","finalUrl": "https://www.lidl.nl/","status": "ok","screenshotUrl": "https://api.apify.com/v2/key-value-stores/…/records/0001-www.lidl.nl.jpg","format": "jpeg","widthPx": 1366,"heightPx": 7480,"fileSizeBytes": 412233,"device": "desktop-small","fullPage": true,"pageTitle": "Lidl.nl","loadTimeMs": 6120,"consent": { "detected": true, "handled": true, "method": "cmp-click","cmp": "OneTrust", "stillVisible": false },"truncated": false,"capturedAt": "2026-10-01T20:14:07+00:00"}
screenshotUrl is a direct link to the image — open it in a browser or fetch it with any
HTTP client. Three dataset views ship: Overview, Cookie consent, and Problems.
Statuses, and what you pay for
| Status | Meaning | Charged |
|---|---|---|
ok | A screenshot was produced and stored | yes |
blocked | Bot protection served an interstitial instead of the page | no |
error | Unreachable, nothing painted before timeout, or the selector was absent | no |
Limits and honest caveats
- Consent dismissal is best-effort. Sites that put consent behind a full-page gate
(some German publishers' "pay or accept" walls) are not bypassed — that is a paywall
decision, not a cookie banner, and the record will show
detected: truewithstillVisible: trueso you know. - Pages taller than 20,000 px are clipped and flagged
truncated. - Full-page screenshots of infinite-scroll feeds capture what has loaded within the lazy-load budget, not an unbounded feed.
- Heavily protected sites may be
blockedeven through a proxy. You are not charged. - PNG files of long pages get large; use
jpegwithqualityfor bulk work.
Tips
- Bulk auditing a site list? Use
desktop-small+jpegatquality: 70— much smaller files, nearly identical legibility. - Comparing layouts across breakpoints? Run the same list once per
device. - Capturing a single component?
selectorbeats cropping afterwards. - A page that captures too early usually needs
waitUntil: "networkidle"rather than a biggerdelayMs.