Website Screenshot avatar

Website Screenshot

Pricing

from $6.00 / 1,000 screenshots

Go to Apify Store
Website Screenshot

Website Screenshot

Website screenshot API: bulk full-page or viewport screenshots of any URL as PNG/JPEG, or URL to PDF. Desktop, tablet, mobile; cookie banners removed, lazy images loaded. $2.50 per 1,000 screenshots; failed pages are free.

Pricing

from $6.00 / 1,000 screenshots

Rating

0.0

(0)

Developer

John Wilkinson

John Wilkinson

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Website Screenshot API: Bulk Full-Page Screenshots, Mobile, URL to PDF

URL in, screenshot out. Capture full-page or viewport screenshots of any list of URLs as PNG/JPEG, or convert URL to PDF, with cookie banners removed. $6 per 1,000 screenshots; failed pages are free.

Take screenshots of any website in bulk. Paste a list of URLs and get back full-page or viewport screenshots as PNG or JPEG, or a URL-to-PDF render, on desktop, laptop, tablet, iPhone, or Android viewports. Each result has a direct image URL you can download, embed, or pass to an AI agent.

It is built for clean captures. Cookie banners and consent popups are dismissed automatically (OneTrust, Cookiebot, Didomi, Usercentrics, Sourcepoint, Quantcast, TrustArc and generic ones). Lazy-loaded images are scrolled into view so the full page renders. You pay only for successful screenshots: failed pages, DNS errors and HTTP 4xx/5xx pages are free.

What it does

  • Full-page screenshots of the whole scrollable page, or the visible viewport only.
  • Device presets: desktop 1920×1080, laptop 1366×768, tablet (iPad, retina), mobile (iPhone 390×844 @3x), Android (Pixel), or any custom width, height and pixel density.
  • PNG, JPEG, or PDF: get several formats in one run, e.g. a PNG plus a PDF of the same page.
  • Cookie banner and popup removal: clicks "Accept" in 15+ languages, hides known consent platforms, and unlocks pages that a consent wall stops from scrolling.
  • Lazy-load handling: scrolls the page before capturing so images and sections below the fold load.
  • Element screenshots: capture a single CSS selector, e.g. a chart, pricing table, or tweet.
  • Hide elements: remove chat widgets, ads, or sticky headers with CSS selectors.
  • Wait controls: waitUntil (load / networkidle), waitForSelector, and an extra delay for animations.
  • Dark mode (prefers-color-scheme: dark) and a custom user agent.
  • Bulk and fast: one shared headless Chromium captures several pages in parallel. Typical pages take 2–10 s.
  • Robust: a timeout still captures whatever had loaded (with a warning), one bad URL never fails the run, and each error is readable ("Domain does not resolve", "Page returned HTTP 404"…).

Use cases

  • SEO and agency reporting: screenshot client homepages and landing pages every week.
  • Visual QA and regression checks on desktop and mobile.
  • Archiving and compliance: keep dated PDF or PNG captures of web pages, ads, and terms pages.
  • Competitor monitoring: track pricing pages and homepages over time (pair it with an Apify schedule).
  • AI agents and LLM vision: give a model "what this page looks like" via the image URL.
  • Link previews and thumbnails for directories and dashboards.

Input

FieldDefaultDescription
urls–List of URLs: [{ "url": "https://…" }]
devicedesktopdesktop, laptop, tablet, mobile, android, custom
fullPagetrueWhole page vs. visible viewport
formats["png"]Any of png, jpeg, pdf
dismissCookieBannerstrueAccept or hide cookie/consent popups
scrollToBottomtrueScroll to trigger lazy-loaded content
delayMs1000Extra wait after load
waitUntilloadload, domcontentloaded, networkidle
waitForSelector–Wait for a CSS selector before capturing
selector–Capture only this element
hideSelectors–CSS selectors to hide
width / height / deviceScaleFactorpresetCustom viewport
blockTrackerstrueBlock analytics, ads, chat widgets and video (faster, cleaner)
darkModefalseEmulate dark color scheme
jpegQuality80JPEG quality 1–100
pdfFormatA4A4, Letter, Legal, A3, Tabloid
maxFullPageHeight16384Very long pages are cut at this height (px)
timeoutSecs45Navigation timeout per page
maxRetries1Retries after a browser error
maxConcurrency4Pages in parallel (auto-capped at 1 per GB of memory)
includeHtmlfalseAlso return the rendered HTML

Example input

{
"urls": [{ "url": "https://apify.com" }, { "url": "https://www.bbc.co.uk" }],
"device": "mobile",
"fullPage": true,
"formats": ["png", "pdf"]
}

Output

Images and PDFs are stored in the run's key-value store. The dataset has one item per URL:

{
"url": "https://apify.com",
"status": "success",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/<id>/records/apify.com-mobile-1a2b3c4d5e.png",
"pdfUrl": "https://api.apify.com/v2/key-value-stores/<id>/records/apify.com-mobile-1a2b3c4d5e.pdf",
"files": [{ "format": "png", "key": "apify.com-mobile-1a2b3c4d5e.png", "url": "…", "bytes": 912345 }],
"title": "Apify: Full-stack web scraping and data extraction platform",
"finalUrl": "https://apify.com/",
"httpStatus": 200,
"device": "mobile",
"viewport": "390x844",
"fullPage": true,
"pageWidth": 390,
"pageHeight": 12771,
"warnings": [],
"elapsedSec": 7.4,
"error": null
}

status is success, httpError (the page answered 4xx/5xx; it is captured but not charged) or error (nothing captured, with a readable error).

Use it from code or an AI agent

curl -X POST "https://api.apify.com/v2/acts/jcwilk~website-screenshot/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"urls":[{"url":"https://example.com"}],"device":"desktop","formats":["png"]}'

The response has the screenshotUrl for each page. The Actor also works as a tool through the Apify MCP server: the input is a flat JSON object with a URL list, so it is easy for LLM agents to call.

Pricing (pay per event)

EventPrice
Actor start (charged by Apify, per GB of run memory)$0.003 per GB
Screenshot (PNG or JPEG)$0.006 ($6 per 1,000)
Page saved as PDF$0.015

Example: 1,000 full-page screenshots in one 4 GB run cost about $6.012. Failed pages, unreachable domains and HTTP error pages are free. Platform compute and browser time are included.

FAQ

Is this a ScreenshotOne / Urlbox / screenshotapi.net alternative? For bulk, pay-as-you-go captures without a monthly plan, yes: you call it through the Apify API, MCP server, Make, Zapier or n8n and pay per successful screenshot.

Does it remove cookie banners? Yes, by default. It clicks the "Accept" button when it can find one (English, German, French, Spanish, Italian, Portuguese, Dutch, Nordic, Polish, Czech, Turkish, Japanese…), hides the major consent platforms, and re-enables scrolling. Turn it off with dismissCookieBanners: false if you need the banner in the image.

Why is my screenshot cut off at the bottom? Pages taller than maxFullPageHeight (16,384 px by default) are cut to keep files usable. You can raise it up to 32,000 px.

Can it screenshot pages behind a login? No. It captures public pages only.

Does it work on sites with bot protection? Most public sites work without a proxy. Sites behind aggressive anti-bot walls (e.g. some Cloudflare challenges) may show the challenge page instead.

How long are image URLs valid? They live in your run's key-value store, so they follow your Apify data retention (unnamed storages are kept for 7 days on the free plan). Download them, or copy them to a named store, to keep them longer.

Can I schedule it? Yes. Use Apify Schedules to capture the same URLs daily or weekly for monitoring and archiving.

Limitations

  • Public pages only, with no login or cookies input.
  • Videos, canvas animations, and some WebGL content may look different from a real browser.
  • A few consent walls that need a choice before any content loads (rare) may still appear.
  • Maximum height of 32,000 px per full-page image. PDF output uses print layout, with background graphics on.

Run locally (no Apify account needed)

pip install -r requirements-dev.txt && playwright install chromium
python -m pytest -q # unit + end-to-end tests against a local test site
python scripts/smoke.py mobile # real-site smoke test, images in smoke-results/