Bulk Website Screenshot & URL to PDF Converter avatar

Bulk Website Screenshot & URL to PDF Converter

Pricing

Pay per event

Go to Apify Store
Bulk Website Screenshot & URL to PDF Converter

Bulk Website Screenshot & URL to PDF Converter

Screenshot a list of websites and save them as PDFs in one run. Full page or first screen, desktop or iPhone/Android, PNG, JPEG or WebP, A4 or Letter PDF. Cookie banners and pop-ups hidden. Failed pages are free. $5 per 1,000 screenshots, $6 per 1,000 PDFs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Joshua White

Joshua White

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Take screenshots of a whole list of websites and convert them to PDF, in one run. Paste URLs, pick desktop or mobile, full page or first screen, and get a PNG, JPEG or WebP image and/or an A4 or Letter PDF of each page, with a download link per row. Cookie banners, sign-up pop-ups and chat bubbles are hidden (never accepted), lazy images are loaded, and pages that fail are never charged.

Try it in one click: the input is prefilled with two pages, as screenshot + PDF. Apify's free plan covers about 1,000 screenshots a month.

How to screenshot websites or convert a URL to PDF in 3 steps

  1. Paste web addresses into URLs, one per line (example.com works; typos like htps:// are fixed).
  2. Choose screenshot, PDF or both, a device (desktop, laptop, tablet, iPhone, Android) and full page or first screen.
  3. Click Start. Each result row links its image and PDF; download the table as CSV, Excel or JSON, or call it from the API, Make, Zapier or n8n.

How much does a website screenshot cost?

$5 per 1,000 screenshots and $6 per 1,000 PDFs, so Apify's $5 monthly free credit covers about 1,000 screenshots. Failed pages (DNS errors, timeouts, bot checks, HTTP errors, robots.txt blocks, file URLs, or a "wait for element" that never appeared) are free. 200 full-page screenshots plus PDFs cost $2.20. If you set a maximum cost for a run, the actor stops cleanly when it reaches it and tells you how many pages it skipped.

What you can use bulk screenshots and PDFs for

  • Archiving and evidence. Keep a dated image or PDF of a page: ads, prices, terms, compliance pages, press coverage.
  • Visual monitoring. Screenshot competitors' homepages, pricing pages or landing pages on a schedule.
  • Reports and decks. Mobile and desktop screenshots of client or prospect sites for audits, pitches and QA.
  • URL to PDF. Turn articles, docs, invoices or any web page into a printable PDF, in bulk.
  • Thumbnails and previews. Small JPEG or WebP images of many sites for a directory, a dashboard or an AI pipeline.

Features

Image formatsPNG (lossless), JPEG and WebP (much smaller files), quality setting
Page sizeFull scrolling page (up to 30,000 px tall) or just the first screen
DevicesDesktop 1920×1080, laptop 1366×768, tablet, iPhone and Android with retina pixel density, or any custom size
PDFA4, Letter, Legal, A3, A5, Tabloid; portrait or landscape; margins; backgrounds; screen or print layout
Clean-upHides cookie / consent banners (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast, TrustArc and home-made ones), sign-up modals, sticky bottom bars and chat bubbles; your own CSS selectors to hide; custom CSS
TimingWait for page load or network quiet, wait for a CSS selector, extra delay
ExtrasDark mode, lazy-image scrolling, blank-page detection, honest error codes

Banners are hidden, never accepted: the tool doesn't give consent on anyone's behalf.

Input example

{
"urls": ["https://apify.com", "en.wikipedia.org/wiki/Web_scraping"],
"captureScreenshot": true,
"capturePdf": true,
"device": "iphone",
"fullPage": true,
"imageFormat": "jpeg",
"pdfFormat": "Letter"
}

Output

One row per URL. Files are stored in the run's key-value store, and the row links to them.

Pages finish in parallel, so rows don't arrive in input order. index is each URL's position in your list, starting at 1 (blank lines and # comments aren't counted; a removed duplicate keeps its number, so there's a gap). Sort by index to line the rows up with your list.

{
"index": 1,
"url": "https://en.wikipedia.org/wiki/Web_scraping",
"finalUrl": "https://en.wikipedia.org/wiki/Web_scraping",
"title": "Web scraping - Wikipedia",
"statusCode": 200,
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/en-wikipedia-org-wiki-Web-scraping-51e366a8.png",
"screenshotKey": "en-wikipedia-org-wiki-Web-scraping-51e366a8.png",
"screenshotFormat": "png",
"screenshotWidth": 1920,
"screenshotHeight": 8745,
"screenshotBytes": 2398899,
"screenshotTruncated": false,
"looksBlank": false,
"pdfUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/en-wikipedia-org-wiki-Web-scraping-51e366a8.pdf",
"pdfKey": "en-wikipedia-org-wiki-Web-scraping-51e366a8.pdf",
"pdfPages": 11,
"pdfBytes": 1830112,
"pageHeight": 8745,
"device": "desktop",
"cookieBannersHidden": 0,
"error": null,
"errorCode": null,
"capturedAt": "2026-10-05T19:12:03.511Z"
}

Files stay in the run's storage for as long as your Apify plan keeps run data. Download the ones you want to keep.

Errors (not charged)

errorCodeMeaning
DNSThe domain does not exist
TIMEOUTThe page didn't start loading within the timeout
CONNECTION, TLS, TOO_MANY_REDIRECTSNetwork, certificate or redirect-loop problems
HTTP_BLOCKED, HTTP_ERRORThe site answered 401/403/429, or another 4xx/5xx
BOT_CHALLENGEThe site showed a bot check or waiting room (Cloudflare, Akamai, DataDome, ...) instead of the page
ROBOTS_DISALLOWEDThe site's robots.txt asks automated visitors not to open this page
NOT_A_WEBPAGEThe URL is a file (PDF, image, download), not a page
WAIT_FOR_SELECTORThe element you asked to wait for never appeared
INVALID_INPUTThe line isn't a web address (for example not a url); url shows what you typed

Every line you paste gets a row, so the status counts them all: "Captured 2 of 4 entries; 2 weren't web addresses".

Tips

  • Memory: the default 2 GB runs 2 pages at a time (one per ~700 MB). For big lists, raise memory and Pages at once together (about 700 MB per page).
  • Very long pages are cut at Max page height (15,000 px by default) and the row says screenshotTruncated: true. WebP images can't be taller than 16,383 pixels, so use PNG or JPEG for very long retina captures.
  • Smaller files: JPEG or WebP at quality 70–80 is usually indistinguishable from PNG for web pages.
  • Charts and animations: add a few seconds of Extra delay, or Wait for element with the chart's selector.
  • Cleaner PDFs: try PDF layout → Print stylesheet; many sites drop menus and ads when printing.

Limits and good behaviour

The tool opens public pages only: no logins, no paywalls. It respects robots.txt and identifies itself in its user agent (ScreenshotPdfBot). Sites protected by aggressive bot checks may show a challenge page instead; those rows come back as BOT_CHALLENGE and are free.

Ready-made examples

Each one opens this actor with the input already filled in. Click Try to run it, or change the input to fit your own list.

More tools from oldjard

Use it from an AI agent or the API

  • Minimal input: {"urls": ["https://example.com"]}. Everything else has a sensible default.
  • Cost: $0.005 per screenshot and $0.006 per PDF. Pages that fail to load are free. One page as both ≈ $0.011.
  • Run time (our runs): 20–35 s for 2–6 pages at the default 2 GB, so an agent will usually poll once.
  • Results: the default dataset, one row per URL with screenshotUrl and pdfUrl download links; the files are in the key-value store, and the run summary is its OUTPUT record.
  • Works over the Apify MCP server (search-actors, then call-actor) and is eligible for agentic payments (x402).

FAQ

Can it capture pages behind a login? No, public pages only.

HTML to PDF? It converts live URLs to PDF; raw HTML input isn't supported.

Is there a website screenshot API? Yes. Call the actor from the Apify API (or Make, Zapier, n8n) with a list of URLs; each result row has screenshotUrl and pdfUrl download links.

Does it click "Accept" on cookie banners? No. Banners are hidden on the page, never accepted, so the tool gives no consent on anyone's behalf. The row's cookieBannersHidden counts the banner elements it hid.

How long can a full-page screenshot be? Up to 30,000 px tall (set Max page height; the default is 15,000 px so endless-scroll pages finish). A page that was cut says screenshotTruncated: true.

Can I take screenshots on a schedule? Yes. Save your input as a task and schedule it in Apify, daily or weekly. Each run stores new files, and each row has a capturedAt time, so you build a dated archive.

Where are the image and PDF files? In the run's key-value store (Storage tab). Each row links its own files.

Feedback

Found a page that doesn't render right? Open an issue on the Issues tab with the URL and your settings, and it will be looked at.