Website Screenshot API: Full Page, Mobile & URL to PDF avatar

Website Screenshot API: Full Page, Mobile & URL to PDF

Pricing

from $3.20 / 1,000 screenshot takens

Go to Apify Store
Website Screenshot API: Full Page, Mobile & URL to PDF

Website Screenshot API: Full Page, Mobile & URL to PDF

Screenshot a list of URLs as PNG, JPEG, WebP or PDF: full page, first screen, one element, or an exact clip rectangle, on desktop, tablet, mobile or a custom size. Wait for an element, skip ads and fonts if you want. Failed or blank pages are free.

Pricing

from $3.20 / 1,000 screenshot takens

Rating

0.0

(0)

Developer

JT Palms

JT Palms

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

16 days ago

Last modified

Share

Website Screenshot API: full page, mobile, tablet and URL to PDF

Paste a list of URLs and get back a website screenshot or a PDF of each page: the whole scrollable page, the first screen, one element, or an exact rectangle such as the top 1,200 pixels, as PNG, JPEG, WebP or PDF, on a desktop, laptop, tablet, phone or a custom screen size. Cookie banners are hidden and lazy-loaded images are loaded.

USD 4 per 1,000 screenshots, charged only for screenshots that were taken and saved. A URL that fails is reported in the results and costs nothing: pages that do not load, do not exist, block the browser, return an error, stay blank, or never show the element you asked for.

What is different

  • Choose exactly what is captured. Full page, first screen, a CSS selector (one element), or a clip rectangle in page pixels (left, top, width, height). Set a custom screen width and height and a pixel density of 1, 2 or 3.
  • No charge for failures. Only a saved screenshot is billed. Every failed URL gets a row with a plain error message, at no charge. A page that renders nothing (no text, images or graphics, even after 3 more seconds) counts as a failure.
  • Wait for the part you need. Wait for a CSS selector to be visible, or add a fixed delay, before the capture. If the element never appears, the URL fails and is free.
  • Headers appear once. Full-page captures are rendered in one pass, not stitched from scrolled screens, so fixed and sticky headers show once at the top instead of repeating down the image.
  • Fast batches. One browser is shared by all URLs in a run, with a fresh, isolated session per page, and 3 pages load in parallel at the default 4 GB of memory. Optionally skip ads and analytics, web fonts, or video (off by default, so pages look the way visitors see them).

What people use it for

  • Website archives and change tracking. Capture your own or competitors' homepages, pricing and landing pages on a schedule.
  • SEO and marketing reports. Full-page shots of landing pages and ads, on desktop and mobile.
  • Visual QA. Check how a site renders on a phone, a tablet and a desktop, in light and dark mode, after every release.
  • Link previews and thumbnails. First-screen or top-of-page JPEG or WebP images for directories, dashboards and CMS entries.
  • Compliance and evidence. PDF copies of web pages with selectable text and working links, with the time they were taken.

Sample output

One row per URL. The image itself is saved in the run's key-value store and linked from screenshotUrl. This row is from a capture of the top 1,200 px of a page (Clip: height 1200):

{
"url": "https://www.python.org/",
"finalUrl": "https://www.python.org/",
"title": "Welcome to Python.org",
"statusCode": 200,
"device": "desktop",
"format": "png",
"width": 1440,
"height": 1200,
"bytes": 233859,
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/python.org-fa562a66e8.png",
"screenshotKey": "python.org-fa562a66e8.png",
"truncated": false,
"captureArea": "clip",
"cookieBannersHidden": 0,
"blockedRequests": 0,
"loadSecs": 0.3,
"secs": 1.4,
"takenAt": "2026-10-01T17:41:50.210Z",
"warning": null,
"error": null
}
  • width and height are the real pixel size of the saved image (for PDFs, the page size in points).
  • captureArea is full page, viewport (first screen), element, clip or pdf.
  • blockedRequests counts the requests skipped by Skip loading.
  • loadSecs is the time until the page loaded, secs the total time for the URL including the capture.
  • truncated is true when the page was cut at Maximum page height.
  • A failed URL has error set and no file.

The dataset's Screenshots view shows the images as thumbnails. Export as JSON, CSV or Excel, or pull the results through the Apify API.

How to use it

  1. Put your pages in URLs, one per line. Full URLs and bare domains (example.com) both work.
  2. Pick a Device (or Custom with your own width and height) and a File format. Leave Full page on for the whole page, or turn it off for the first screen only.
  3. Optional: under Capture area, give a CSS selector, or a clip rectangle.
  4. Click Start, then open the dataset or the key-value store to download the files.

Connect the actor to Make, Zapier, n8n or your own code through the Apify API to take screenshots on a schedule or on demand.

Options

OptionWhat it does
DeviceDesktop 1440 x 900, laptop 1280 x 800, tablet (iPad size), mobile (iPhone 15 size), or a custom width (200 to 3,840) and height (200 to 4,320). Tablet and mobile emulate a touch screen of that size, so responsive sites show their mobile layout. Only the screen is emulated: the user agent stays the browser's own (see Limits), with the word Mobile added for the mobile preset. Changing the width or height while Device is Desktop uses that size.
Full pageWhole scrollable page (default) or only the first screen. Very long pages are cut at Maximum page height (20,000 px by default) and marked truncated.
File formatPNG (lossless), JPEG or WebP (much smaller, with a quality setting), or PDF (A4, Letter, Legal or A3, scaled to the device width).
Element to captureA CSS selector such as #pricing or table.infobox. Only the first matching element is captured.
Clip: left, top, width, heightA rectangle in CSS pixels, measured from the top-left corner of the page (not the screen), so it can sit anywhere on a long page. For example, Clip: height 1200 alone gives the top 1,200 px at full width. An empty width means the rest of the screen width; an empty height means down to the end of the page. If the page ends inside the rectangle, the image stops there and the row has a warning.
Hide cookie bannersOn by default. Hides the banners of 30+ consent managers (OneTrust, Cookiebot, Didomi, Quantcast, TrustArc, Usercentrics, Sourcepoint and others) and clicks "reject" or "necessary only" where offered. It never accepts cookies for you.
Hide these elementsYour own CSS selectors to remove before capturing, for example chat widgets or promo bars.
Load lazy imagesOn by default. Scrolls through the page (or down to the bottom of the clip) so lazy images and sections load, then back to the top.
Dark modeAsks the site for its dark color scheme.
Skip loadingOff by default. Skip third-party ads and analytics (ad networks, analytics, tag managers, session recorders and social tracking pixels; the site's own requests are never skipped), web font files (text falls back to system fonts; icon fonts can show as boxes), or video and audio. Ads then leave empty space, and a site that loads visible content through a tag manager can look different.
Wait until, wait for element, extra delay, timeoutWhen the page counts as loaded, a CSS selector that must be visible before the capture, an optional delay for animations, and the maximum load time.
Pixel density1, 2 or 3 for sharp retina images.
ProxyOptional. Load pages through a data center proxy or your own proxy URL, for example to see a site as visitors in another country see it. Residential proxies are not supported.

Pricing

WhatPrice
Screenshot or PDF taken and savedUSD 0.004 (USD 4 per 1,000)
URL that failed, was not found, blocked the browser, stayed blank, never showed the element you asked for, or pointed to a private addressFree
Run start (Apify's standard start event)USD 0.00005 per GB of run memory, so USD 0.0002 per run at the default 4 GB

Set a maximum cost per run in the run options and the actor stops cleanly when it reaches it. Screenshots taken before that are kept, and the actor never starts a capture it could not bill within your limit.

Speed and memory

With the default 4 GB of memory the actor loads 3 pages in parallel in one shared browser. Each parallel page needs about 1.1 GB of memory at its peak; if you give the run less memory, the actor lowers the number of parallel pages by itself. Each URL has a hard time limit (the load timeout plus about 75 seconds to load, then 150 seconds to render the capture); a URL that reaches it fails and is not charged.

Skip loading can make heavy pages much faster. In our test on six news home pages (BBC, The Guardian, Der Spiegel, Le Monde, CNN, The Independent; two full-page JPEG captures of each, run on a desktop computer on 2026-10-01, not on Apify), skipping ads and analytics, web fonts and video cut the total time from 171 seconds to 71 seconds. Light pages gain little. Your times will differ with the site and the network.

Limits

  • The actor identifies itself. Every page is loaded with the browser's own headless Chrome user agent with website-screenshot/1.0 (+https://apify.com/JTPalms/website-screenshot) added, so site owners can see it is an automated tool. It never pretends to be a desktop Chrome, an iPhone or any other browser. Some sites block bots, and those pages are reported as blocked.
  • No CAPTCHA solving or bot-protection bypass. Pages that answer with HTTP 401, 403 or 429, or show a CAPTCHA or "checking your browser" page, are reported with a warning and are not charged. A proxy under Advanced helps with sites that block data centers, but does not get past CAPTCHAs.
  • Public websites only. Private and internal addresses (localhost, 10.x, 172.16 to 31.x, 192.168.x, 169.254.x, 100.64/10, IPv6 local ranges, *.local, *.internal) are refused before the page is opened, and a public page cannot redirect or load images, frames or requests into them. Refused URLs are free.
  • Logins and paywalls are not bypassed. The actor sees what a new visitor without cookies sees.
  • WebP images are at most 16,383 pixels tall, so long WebP captures are cut there. Use PNG or JPEG for very long pages.
  • Pages that keep changing (live tickers, video, infinite feeds) are captured as they are at the moment of the shot.
  • The clip rectangle is not used for PDF output, and is ignored when an element selector is set.

FAQ

Where are the image files? In the run's default key-value store. Each dataset row has screenshotUrl, a direct link to the file, and screenshotKey, its key in the store.

How long are the files kept? As long as your Apify plan keeps the run's storage. Download them or copy them to your own storage if you need them longer.

Why is a cookie banner still visible? A few sites use their own banner code. Add its CSS selector to Hide these elements and it will be removed.

Why is my screenshot cut off? The page was taller than Maximum page height. Raise it (up to 60,000 px), or use a clip rectangle to capture just the part you need.

Why was a URL not charged? Its row has an error: the page failed to load, blocked the browser, stayed blank or never showed the element you asked for. Only saved screenshots are billed.

Is it legal? It opens public web pages in a headless browser that names itself in its user agent, and saves an image of them. It does not log in or bypass protections. A screenshot shows whatever the page displays, which on some pages includes people's names or photos, so check the terms of the sites you capture and the privacy rules that apply to you before you republish their content.

License

Apache-2.0. Built on Playwright (Apache-2.0) and proxy-chain (Apache-2.0).