Bulk Website Screenshot: Full-Page, Mobile, PDF avatar

Bulk Website Screenshot: Full-Page, Mobile, PDF

Pricing

from $2.00 / 1,000 screenshots

Go to Apify Store
Bulk Website Screenshot: Full-Page, Mobile, PDF

Bulk Website Screenshot: Full-Page, Mobile, PDF

Screenshot hundreds of web pages, or render your own HTML, in one run: full page or first screen, desktop, tablet or mobile, PNG, JPEG, WebP or PDF. Hides cookie banners, loads lazy images. $0.002 per screenshot; failed pages are free.

Pricing

from $2.00 / 1,000 screenshots

Rating

0.0

(0)

Developer

Webstack Labs

Webstack Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Bulk Website Screenshot: full-page, mobile and PDF captures of many pages (and your own HTML)

Paste a list of URLs, get a clean screenshot of every page: the whole page or just the first screen, as desktop, laptop, tablet or mobile, in PNG, JPEG, WebP or PDF. Or send your own HTML (invoices, reports, social cards) and get it back as an image or PDF. Cookie banners are hidden and lazy images are loaded before the capture. A website screenshot API and an HTML to PDF / HTML to image converter in one: URL or HTML in, PNG, JPEG, WebP or PDF out, at $0.002 per page. You pay per page captured. Pages that fail are free.

What it does

  • Opens each page once in a real Chrome browser (Playwright) and captures it.
  • Full page or first screen. Endless pages are cut at a height you choose (default 12,000 px) and marked truncated.
  • Devices: desktop 1920x1080, laptop 1366x768, tablet 820x1180 (2x), mobile 390x844 (3x, touch), or your own viewport size.
  • Formats: PNG, JPEG or WebP (quality you choose), or PDF (A4, with backgrounds and selectable text).
  • HTML to image / PDF: put raw HTML documents in htmlPages and each is rendered in the same browser, with the same devices, formats and options as web pages. Linked images, fonts and CSS are loaded. Mix URLs and HTML in one run.
  • One element only: give a CSS selector (#pricing, header) to capture just that part.
  • Clean captures: hides the consent pop-ups of common cookie tools (OneTrust, Cookiebot, Quantcast, Didomi, Usercentrics, CookieYes and more) and any elements you list, such as chat widgets. Nothing is clicked or accepted.
  • Waiting that works: load / DOM ready / network idle, an extra delay, or wait for an element.
  • Dark mode for sites that support it.
  • Every row has the page title, final URL after redirects, HTTP status, file size and a direct download link.

Who uses it

  • Marketers and SEO teams: archive landing pages, competitors' pricing pages and ads pages, before/after a redesign.
  • Agencies: visual reports of client sites on desktop and mobile.
  • Developers and QA: quick visual checks of many URLs after a release.
  • Researchers and compliance: dated evidence of what a public page showed.
  • Directories and link previews: thumbnails for lists of websites.

Input

{
"urls": ["https://example.com", "apify.com", "https://www.python.org/about/"],
"fullPage": true,
"device": "desktop",
"format": "png",
"hideCookieBanners": true,
"hideSelectors": ["#intercom-container"],
"maxConcurrency": 6
}

Bare domains become https://<domain>/. Duplicates are removed.

Raw HTML input

{
"htmlPages": [
{"name": "invoice-42", "html": "<html><body><h1>Invoice 42</h1><p>Total: $10.00</p></body></html>"},
"<div style=\"width:1200px;height:630px;background:#123;color:#fff\">Social card</div>"
],
"format": "webp",
"fullPage": false,
"viewportWidth": 1200,
"viewportHeight": 630
}

Rows for HTML documents have "url": null, "source": "html" and "htmlName" (your name, or html-1, html-2, ...), which also goes into the file name (shot-00002-invoice-42.webp).

Output

One row per page in the dataset; the files are in the run's key-value store.

{
"url": "https://example.com/",
"finalUrl": "https://example.com/",
"statusCode": 200,
"title": "Example Domain",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/<store-id>/records/shot-00001-example-com.png",
"screenshotKey": "shot-00001-example-com.png",
"format": "png",
"contentType": "image/png",
"device": "desktop",
"fullPage": true,
"viewportWidth": 1920,
"bytes": 21874,
"pageHeight": 1080,
"capturedHeight": 1080,
"truncated": false,
"durationSecs": 2.1,
"capturedAt": "2026-10-29T01:00:00+00:00",
"error": null
}

A page that cannot be captured gives a row with error (free), for example blocked_by_robots_txt, http_error (with statusCode), timeout, dns_error, connection_error, tls_error, selector_not_found or wait_for_selector_not_found. The SUMMARY record of the key-value store counts captures and failures by reason.

Pricing

  • $0.002 per page captured ($2 per 1,000), in any format and device.
  • Failed pages are free.
  • Apify adds its small standard start fee per run.
  • No separate charge for platform usage.

Use it from AI agents (MCP)

The Actor is available to AI agents (Claude, ChatGPT, Cursor and others) through Apify's MCP server (mcp.apify.com) and the API. Minimal input:

{"urls": ["https://example.com"]}

Output row:

{"url": "https://example.com/", "format": "png", "device": "desktop", "statusCode": 200, "title": "Example Domain", "screenshotUrl": "https://api.apify.com/v2/key-value-stores/.../records/shot-00001-example-com.png", "bytes": 78288, "error": null, ...}
. Cost of this example: $0.002 plus the start fee. Open screenshotUrl to get the image or PDF. Every row has the same fields; pages that fail come back as free rows with an error code.

How it compares

Screenshot and HTML-to-PDF Actors on Apify Store with the most monthly users, and the price each one lists for its main event on 2026-11-06 (check their pages for changes and other prices):

ActorListed priceUnit
This Actor$0.002page captured (PNG, JPEG, WebP or PDF; URL or your HTML)
apify/screenshot-urlfreeyou pay the platform usage of the run
cheapapi/website-screenshot-api$0.00089screenshot
dz_omar/screenshot$0.01screenshot generation
dz_omar/ultimate-screenshot$0.007page capture
automation-lab/html-to-pdf-converter$0.00575page converted
autofacts/universal-web-printer$0.004render

What you get here for the page price: many URLs and raw HTML documents in one run, full page or first screen, four device presets or your own viewport, PNG, JPEG, WebP or PDF, one element by CSS selector, cookie banners hidden without clicking anything, robots.txt respected, and failed pages free. If you only need a single PNG of one URL now and then, the cheapest per-shot Actor may cost you less; this one is built for batches and for mixing web pages with your own HTML.

How it works

  1. The URL list is cleaned (scheme added, duplicates removed, invalid entries reported).
  2. Each site's robots.txt is read once. Pages it closes to automated access are skipped.
  3. Each page opens in a fresh browser context with the chosen device. The browser identifies itself as Chrome plus WebsiteScreenshotBot.
  4. After loading, the Actor hides the banners, scrolls once to load lazy images (full page only), waits as asked and captures.
  5. The file goes to the key-value store and the row to the dataset; only successful rows are charged.

FAQ

Can it log in or capture pages behind a login? No. It captures public pages only.

Does it accept cookie consent? No. It hides the banner with CSS. Some sites show reduced content until consent is given; those pages are captured as a first-time visitor sees them.

Why was a page skipped with blocked_by_robots_txt? The site asks bots not to visit that page. You can turn off "Respect robots.txt" for sites you own or have permission to capture.

Some sites show a "verify you are human" page. Sites with bot protection may show their challenge page or answer 403. The Actor does not use proxies or try to get around such protection; an HTTP 4xx/5xx answer is a free row.

How long are the files kept? As long as the run's storage is kept in your Apify account (by default, unnamed storages are kept for a limited time; copy files you need to keep).

How fast is it? Usually 2-6 seconds per page, 3 pages at a time with the default 2 GB memory. Raise "Pages at a time" together with the run memory for big lists.

Limitations

  • Full-page captures are cut at the max height (up to 30,000 px).
  • Videos, canvas animations and some web fonts may look different from a desktop browser.
  • PDF output uses the A4 page format with the screen layout of the page.
  • No proxies, so pages that are only available in some countries show what a visitor from the Apify data center would see.

Credits

Built on Playwright (Apache-2.0) and the Apify SDK for Python (Apache-2.0).