Website Screenshot API - Full Page, Mobile, PDF & Element
Pricing
from $2.40 / 1,000 screenshots
Website Screenshot API - Full Page, Mobile, PDF & Element
Capture website screenshots from a list of URLs: full page, above the fold or fixed height, desktop/tablet/mobile, PNG/JPEG/WebP or PDF, one element by CSS selector. Cookie banners dismissed, sticky headers fixed, emojis rendered. Failed pages are free. $0.003 per screenshot.
Pricing
from $2.40 / 1,000 screenshots
Rating
0.0
(0)
Developer
Kanto Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
12 days ago
Last modified
Categories
Share
What does Website Screenshot API do?
Website Screenshot API captures screenshots of websites from a list of URLs: the full page, only the part above the fold, or a fixed height, on a desktop, laptop, tablet or mobile screen, as PNG, JPEG or WebP, plus an optional PDF of each page. It can also capture one element (a header, a pricing table, a chart) by CSS selector.
Each screenshot is stored in the run's key-value store, and every URL gets one dataset row with a ready-to-open image link, the final URL after redirects, the HTTP status, the page title, the image size in pixels and bytes, and a plain-English error when something went wrong. Pages that fail are free: DNS errors, timeouts, HTTP errors and bot-protection pages are never charged.
Why use this screenshot API?
Screenshot tools often fail in the same ways: cookie banners cover the page, sticky headers appear in the middle of a full-page image, emojis come out as empty boxes, lazy-loaded images are blank, one slow website hangs the whole run, and failed pages still cost money. This Actor was built to handle each of those:
- Cookie banners dismissed: it clicks "Accept" on common consent managers (OneTrust, Cookiebot, Didomi, Quantcast, Usercentrics, TrustArc and more) and hides any consent layer that remains.
- Sticky headers fixed: in full-page shots, the header is pinned to the top of the page instead of being drawn again further down.
- Lazy images loaded: the page is scrolled quickly to the bottom and back to the top before the capture.
- Above the fold or fixed height: capture only the visible screen, or the top N pixels, not just the full page.
- Emojis and Asian scripts render: color emoji and CJK fonts are installed.
- Hard timeout per page: a page that is not done within the page timeout becomes a free row, and the run moves on.
- Ads, trackers and chat widgets blocked by default, so pages load faster and chat bubbles stay out of the picture.
- Files are stored before the row is written, so every link in the dataset already works when your API call returns.
How to take website screenshots
- Paste one or more URLs into Page URLs (one per line;
example.comworks too). - Choose What to capture (full page, viewport only or fixed height) and a Device.
- Pick an Image format. PNG is lossless; JPEG and WebP are 3-10x smaller.
- Optionally set Wait until to "Network idle" for single-page apps, a Wait for element selector, or an Extra delay.
- Click Start. Open each image from the Screenshots table, or download them all from the key-value store.
Use it through the API
Call the Actor from any language, from n8n, Make or Zapier, or from an AI agent through the Apify MCP server. A synchronous run returns the dataset rows, and each row's screenshotUrl is a public link you can download right away.
How much does a website screenshot cost?
This Actor uses pay-per-event pricing. You pay $0.003 per screenshot ($3 per 1,000), and $0.003 per PDF only if you turn on "Also save a PDF". Failed and blocked pages are free: DNS errors, timeouts, HTTP errors, bot-protection pages and skipped URLs are never charged. There is no monthly fee and no extra per-run fee apart from Apify's tiny start fee. Apify Scale and Business subscribers pay less per screenshot (SILVER $0.0027, GOLD $0.0024).
Worked example: a daily job that captures 250 product pages as full-page JPEGs costs 250 x $0.003 = $0.75 per day, or about $22.50 per month. If 12 of those pages are offline one day, that day costs 238 x $0.003 = $0.71.
Set Max cost per run in the run options to cap your spending: the Actor checks the budget before it opens each page, and URLs that no longer fit become free skipped rows instead of being charged.
Heavy pages
Very heavy pages (large web apps, long news homepages) can need more than the default 60-second Page timeout on the default 2 GB of memory. If such a page fails with a timeout (free), raise Page timeout to 120-180 seconds, give the run more memory, or capture "Viewport only", which is much lighter.
Input example
{"urls": ["https://example.com", "https://www.python.org"],"captureMode": "fullPage","device": "desktop","format": "png"}
Output example
One dataset row per URL (real output from a cloud run; the link signature is shortened):
{"url": "https://www.python.org","inputIndex": 1,"status": "ok","device": "desktop","captureMode": "fullPage","format": "png","loadTimeSecs": 1.99,"finalUrl": "https://www.python.org/","httpStatus": 200,"title": "Welcome to Python.org","screenshotUrl": "https://api.apify.com/v2/key-value-stores/zu5Y3eDUn9ku3jLaR/records/0001-4863eab2-www-python-org.png?signature=...","screenshotKey": "0001-4863eab2-www-python-org.png","width": 1440,"height": 2785,"bytes": 546677,"pageHeight": 2785,"truncated": false,"cookieBanner": null,"capturedAt": "2026-10-09T02:56:31Z","error": null}
A failed page is a free row with status: "failed", an errorType (dns, http-error, bot-protection, timeout, selector-not-found...) and an error message that says what to do, for example: "The page answered HTTP 404 Not Found. Check that the URL is correct. Not charged."
Options
Capture
- What to capture: full page (cut at Max height, 16,000 px by default), viewport only, or fixed height from the top.
- Device: desktop 1440x900, laptop 1280x800, tablet 820x1180 or mobile 390x844 (mobile browser with touch). Viewport width/height override the preset; Pixel density 1-3 gives sharp retina images.
- Capture one element: a CSS selector such as
header,#pricingor.chart. - Image format PNG, JPEG or WebP with quality, Dark mode, and Also save a PDF (A4, Letter, Legal or A3).
Page loading
- Wait until: Load (default), Network idle (best for React/Vue/Angular apps, capped so endless trackers never hang), or DOM ready (fastest).
- Wait for element, Extra delay, Scroll to load lazy images, Page timeout.
- Dismiss cookie banners, Hide large pop-ups, Hide elements by CSS selector, Block ads, trackers and chat widgets, Fix sticky headers.
- Capture error pages: off by default, so error pages are free rows. Turn it on to screenshot 404/500 pages too, for example for uptime monitoring.
- Proxy: Apify Proxy (datacenter) by default.
Related Actors from Kanto Labs
- Video Frame Extractor: keyframes, thumbnails and scene frames from video files.
- Website Tech Stack Detector: which CMS, analytics, frameworks and CDN a site uses.
- Website SEO Audit: an on-page SEO score with prioritized issues.
FAQ
Can I take a full-page screenshot of a website?
Yes. "Full page" is the default. Pages taller than Max height (16,000 px by default, up to 30,000) are cut there, and the row says truncated: true.
How do I capture only the part above the fold?
Set What to capture to "Viewport only". The image is exactly one screen (for example 1440x900 on desktop). For a custom height, use "Fixed height from the top".
Why did a page fail, and was I charged?
Every failed page has an error message with the reason and how to fix it, and it is never charged. The most common reasons are a mistyped URL (DNS error), a page that answers 404, and sites behind strong bot protection (Cloudflare challenge, DataDome, CAPTCHA). This Actor does not solve CAPTCHAs.
Can it screenshot pages behind a login?
No. It captures pages that are publicly visible without logging in.
Is it legal to screenshot websites?
Capturing a public web page, the way a browser shows it to any visitor, is generally fine for monitoring, archiving, QA and previews. You are responsible for how you use the images, including copyright in the page content and the site's terms of use.
I found a bug or need a feature
Open an issue in the Issues tab with the URL and your input. Issues are answered quickly.