Website Screenshot API: Full Page, Mobile, No Cookie Banners avatar

Website Screenshot API: Full Page, Mobile, No Cookie Banners

Pricing

from $4.00 / 1,000 full-page screenshots

Go to Apify Store
Website Screenshot API: Full Page, Mobile, No Cookie Banners

Website Screenshot API: Full Page, Mobile, No Cookie Banners

Bulk full-page and mobile screenshots of any public URL. Lazy images loaded, sticky headers fixed, cookie banners and pop-ups hidden. Failed pages are never charged; each run has a small start fee.

Pricing

from $4.00 / 1,000 full-page screenshots

Rating

0.0

(0)

Developer

Daniil Kravchenko

Daniil Kravchenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Share

Website Screenshot API — Full Page, Mobile, No Cookie Banners

Capture clean screenshots of public web pages in bulk: the whole page or just the first screen, on desktop, tablet or mobile — with lazy-loaded images actually loaded, sticky headers not repeated, and cookie banners and sign-in pop-ups out of the way.

Failed screenshots are never charged. Pages that return an error, refuse automated access, show a bot check, time out or render empty are reported in the dataset with charged: false. Each run also has a small start fee (see Pricing), which applies even if every page fails.

Who it is for

  • SEO and marketing agencies — weekly full-page snapshots of client and competitor landing pages.
  • No-code automations (Make, n8n, Zapier) — "take a screenshot of this URL" as one reliable step.
  • AI agents and QA — a visual of what a page really looks like, on desktop and mobile.

Example: an agency monitors 40 competitor pricing pages every Monday. It runs this Actor on a schedule with the 40 URLs in fullPage mode and gets 40 PNGs plus a table of which pages failed — failed pages are not billed.

What it fixes compared with a plain screenshot

ProblemWhat this Actor does
Images below the fold are blankscrolls the page to trigger lazy loading, then returns to the top
Sticky header repeated / covering content in full-page shotsturns fixed and sticky elements into normal page flow before capture
Cookie banner covers the pagehides known consent managers and consent overlays — nothing is accepted on your behalf
Sign-in / newsletter pop-upshides modal dialogs, dark backdrops and floating sign-in widgets (hidePopups)
Can't choose the heightviewport, fullPage (up to 20,000 px) or fixedHeight (top N px)
Emoji show as boxescolour-emoji and CJK fonts are installed in the image
Stuck runshard timeout per URL (urlTimeoutSecs), failed pages are not charged

Pricing

Pay per event. Prices are set in Apify Console; this table explains them.

EventPriceWhen
Full-page screenshot$0.004per page captured successfully in fullPage or fixedHeight mode
First-screen screenshot$0.002per page captured successfully in viewport mode
Actor start$0.001 per GB of memoryonce per run, charged by Apify at start: $0.004 with the default 4 GB, $0.002 with 2 GB

Examples with the default 4 GB: 1 first-screen shot = $0.006; 40 full-page shots = $0.164; a run where every page fails = $0.004. Viewport-only runs work with 2 GB of memory (set it in the run options) and pay a $0.002 start fee. No separate platform-usage charge is added on top of these events.

Input

{
"urls": ["https://www.bbc.com/news", "https://stripe.com", "https://en.wikipedia.org/wiki/Emoji"],
"mode": "fullPage",
"device": "desktop",
"format": "png",
"hideCookieBanners": true,
"hidePopups": true,
"blockAds": true
}
FieldDefaultNotes
urls—1–500 public http(s) URLs; duplicates are captured once; [{"url": ...}] objects also accepted
modefullPageviewport, fullPage (cut at 20,000 px), fixedHeight
height1080CSS pixels, used with fixedHeight
devicedesktopdesktop 1280 px, tablet 820 px (2× density), mobile 390 px (3× density)
formatpngpng, jpeg, webp; JPEG/WebP files are 3–10× smaller
quality85JPEG/WebP only
waitMs0extra wait after load (animations)
hideCookieBanners, hidePopups, blockAdstruesee table above
hideSelectors[]your own CSS selectors to hide (chat widgets, promo bars)
urlTimeoutSecs90per URL (5–300); slower pages are reported as failed and not charged

Image width/height in the output are in device pixels (a 390 px wide mobile viewport at 3× density gives a 1170 px wide image).

Output

One dataset item per URL; images are stored in the run's key-value store and linked by screenshotUrl.

{
"url": "https://www.bbc.com/news",
"finalUrl": "https://www.bbc.com/news",
"httpStatus": 200,
"status": "ok",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/screenshot-0001-….png",
"width": 1280, "height": 6541, "bytes": 3589541,
"title": "BBC News - Breaking news, video and the latest top stories …",
"error": null, "mode": "fullPage", "device": "desktop", "format": "png",
"durationMs": 4135, "capturedAt": "2026-10-06T10:02:11+00:00", "charged": true
}

status is ok, blocked (the site refused automated access, HTTP 401/403/429/451 or a bot check — never bypassed) or error (DNS/TLS/timeout/HTTP error/empty page/invalid URL). Only ok items are charged.

Limits and honest notes

  • Public pages only: no logins, no cookies/sessions, no proxies, no CAPTCHA solving. Sites that block automated browsers return blocked.
  • Cookie banners are hidden visually; the page is captured as a first-time visitor who has not consented, so some sites show reduced content.
  • Very long pages are cut at 20,000 px; video is not loaded (poster frames only) when blockAds is on.
  • Very long documents are cut at 20,000 px before rendering, so even 100,000-px pages are captured in seconds.
  • Emoji added in the newest Unicode release (16.0) may still show as boxes until the system fonts catch up.
  • Default memory is 4 GB (heavy pages need more than 2 GB); for viewport-only runs 2 GB is enough.
  • You are responsible for having the right to capture and use screenshots of the pages you submit.

Run locally

pip install -r requirements.txt && playwright install chromium
mkdir -p storage/key_value_stores/default && cp example_input.json storage/key_value_stores/default/INPUT.json
python -m src