Bulk Website Screenshot: Full Page, Mobile, PDF
Pricing
from $6.00 / 1,000 screenshots
Bulk Website Screenshot: Full Page, Mobile, PDF
Input a list of URLs (up to 5,000); output one full-page screenshot per URL and device (PNG, JPEG or PDF) plus a dataset row with status, HTTP code and a direct file link. Desktop, tablet and mobile. Page scrolled so lazy images load, cookie banners hidden. Pay only for successful screenshots.
Pricing
from $6.00 / 1,000 screenshots
Rating
0.0
(0)
Developer
Batch Pane
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Bulk website screenshot tool and API: give it a list of URLs (or upload a CSV) and get a full-page PNG, JPEG or PDF of each page (URL to PDF), on desktop, tablet and/or mobile. You pay per screenshot that succeeds. Pages that fail, time out, are blocked or are skipped are listed in the results with the reason, and are not charged as screenshots (only Apify's small per-run start fee applies, see Pricing).
What it does
- Loads exactly one page per URL in a real Chromium browser (Playwright). It does not follow links or crawl sites.
- Full page: for PNG/JPEG the page is scrolled down first (with a time budget) so lazy-loaded images can appear, then captured top to bottom.
- Devices: desktop (1440x900), tablet (Galaxy Tab S4 profile) and mobile (Pixel 7 profile). One screenshot per URL per device.
- Formats: PNG, JPEG (with quality setting) or PDF (A4, with backgrounds).
- Cookie consent banners hidden (optional, on by default): banners of about 20 well-known consent tools are hidden with
CSS. Nothing is clicked or accepted. If a page offers a "consent or pay" choice (for example "accept ads or take an
ad-free subscription"), nothing is hidden on that page and the row says
cookieBannerHidden: false. Paywalls, login walls and age checks are never hidden. - Polite to websites: at most one page at a time per website, with at least 2 seconds between two pages of the
same website. At the default 2 GB everything runs one page at a time; with 4 GB, two different websites are
captured at the same time.
robots.txtis respected by default.
Use with AI agents (MCP)
This actor works as a tool for AI agents through the Apify MCP server (https://mcp.apify.com). Your agent needs an
Apify account (API token); screenshots are charged to that account at the price below.
- Add only this actor as a tool:
https://mcp.apify.com?tools=batchpane/bulk-website-screenshot - Or let the agent find it with
search-actors(for example "website screenshot").
Input the agent should send: startUrls as a list of objects, e.g.
{"startUrls": [{"url": "https://www.iana.org/help/example-domains"}], "devices": ["desktop"], "format": "png"}.
Results: one dataset row per URL and device. status is ok, failed, blocked or skipped; for ok rows,
fileUrl is a direct link to the image or PDF. Only ok rows are charged as screenshots.
Timing: at the default 2 GB, screenshots are taken one page at a time; in our test on the platform a screenshot
took about 13 seconds per attempt on well-known sites (so 100 URLs x 2 devices is about 45 minutes). An MCP call waits
at most 45 seconds, so for more than a few URLs the agent should check the run later (get-actor-run) and then read
the rows (get-dataset-items).
Example prompt:
Use batchpane/bulk-website-screenshot to take full-page desktop and mobile PNG screenshots of https://www.iana.org/help/example-domains and https://www.w3.org/. When the run has finished, give me a table with url, device, status and fileUrl, and list any failed pages with their error code.
Good to know: some heavy pages take longer than the 30-second limit. In our test with 20 well-known websites on desktop and mobile, 33 of 40 screenshots succeeded and 7 timed out (not charged as screenshots).
Input
| Field | Default | Notes |
|---|---|---|
| URLs | – | http/https only, up to 5,000 per run. Duplicates are removed. Or a public link to a .txt/.csv list (requestsFromUrl). |
| Devices | desktop | desktop, tablet, mobile (each one is a separate screenshot) |
| Output format | PNG | PNG, JPEG or PDF |
| Full page | on | pages taller than 20,000 px are cut at 20,000 px (heightTruncated: true) |
| Hide cookie consent banners | on | see above |
| Extra wait after load | 1 s | 0-5 s |
| Memory (run option) | 2 GB | 2 GB = 1 page at a time, 4 GB = 2 different websites at the same time. The price per screenshot is the same. A list with only one website is always captured one page at a time. |
| Respect robots.txt | on | can only be turned off together with "I own these websites or have the owner's permission" |
Example input (tested on the platform):
{"startUrls": [{ "url": "https://www.iana.org/help/example-domains" },{ "url": "https://www.w3.org/" }],"devices": ["desktop", "mobile"],"format": "png","fullPage": true}
Output
Files go to the run's key-value store. The dataset has one row per URL and device:
{"url": "https://www.iana.org/help/example-domains","finalUrl": "https://www.iana.org/help/example-domains","httpStatus": 200,"capturedAt": "2026-10-15T18:33:15.542Z","device": "desktop","viewport": "1440x900","format": "png","fileKey": "00001-www.iana.org-desktop.png","fileUrl": "https://api.apify.com/v2/key-value-stores/<store-id>/records/00001-www.iana.org-desktop.png","bytes": 126844,"heightTruncated": false,"cookieBannerHidden": false,"status": "ok","error": null}
status is ok, failed, blocked or skipped (robots.txt). For anything other than ok, error has a code and
a short explanation, and no screenshot is charged.
About fileUrl: this is a direct link to the file in your Apify storage. Depending on your storage settings,
anyone who has the link may be able to open the file. Do not share the links if the screenshots are sensitive, and
delete the storage when you no longer need it. The actor does not extract page text, HTML, titles, metadata, e-mail
addresses or anything else from the page; you get the image/PDF and the HTTP facts above.
Pricing
$0.006 per successful screenshot ($6.00 per 1,000), plus Apify's standard actor-start fee of $0.00005 per GB of memory per run. Compute is included: you do not pay platform usage on top.
| Example | Cost |
|---|---|
| 100 URLs, desktop only | $0.60 |
| 1,000 URLs, desktop + mobile | $12.00 (2,000 screenshots, about 7 hours: raise the run timeout above the 6-hour default, or split the list) |
| 500 URLs of which 20 fail | 480 x $0.006 = $2.88 |
Failed, blocked, skipped and timed-out URLs are never charged as screenshots. Every run also has Apify's small
start fee (apify-actor-start, $0.00005 per GB of memory: $0.0001 per run at the default 2 GB), also when nothing succeeds.
You can set a maximum cost per run in Apify; the actor stops before it would go over it.
Honest comparison. Need a single, simple screenshot now and then? A free screenshot actor where you only pay compute is usually cheaper. Other screenshot actors can also be cheaper per screenshot, either with a lower all-in price or with a low event price plus compute costs on top. This actor is for when you want one fixed price per screenshot, full pages with lazy images, mobile/PDF output, and no screenshot charge for failures.
Limits (on purpose)
- 30 seconds per screenshot, then it counts as failed (not charged as a screenshot). Extra wait after load is at most 5 seconds. Heavy pages (large homepages with many scripts) can go over the 30 seconds: in our own test on 20 well-known sites, about 1 in 5 screenshots timed out.
- Safety stop: the run stops after 20 failed URLs in a row, or if fewer than 25% of the first 50+ URLs succeed (setting "Stop after failures in a row"; 0 switches it off).
- Big lists take time: at 2 GB pages are taken one at a time, about 10-15 seconds each, so 1,000 screenshots take roughly 3-4 hours. Set the run timeout accordingly.
- Maximum page height 20,000 px; maximum file size 15 MB.
- No logging in, no cookies or sessions of yours, no form filling, no CAPTCHA solving, no residential proxies. If a website blocks automated browsers (for example with HTTP 403 or 429), the URL is reported as failed and not charged as a screenshot.
- Only public websites: URLs (and redirects, images, frames, scripts) that point to private, internal or local network addresses are refused.
- Screenshots reflect what a fresh browser in a data centre sees, which can differ from what you see (location, language, A/B tests, consent state).
Responsible use
You decide which URLs are captured, and how you use the screenshots is your responsibility. A screenshot is a copy of someone else's page and may be protected by copyright; it may also show personal data that appears on that page. Use the results only where you are allowed to (for example your own sites, monitoring, archiving or research with a legal basis). The actor keeps nothing: files are stored only in your own Apify storage.
Support
Found a bug or a page that should work but does not? Open an issue in the Issues tab of this actor, with the URL and the run ID. We aim to answer within 7 days. Answers may be drafted with help of an AI assistant and are checked by a person before they are sent.
Changelog
- 0.1: first version.