Website Screenshot & PDF Capture avatar

Website Screenshot & PDF Capture

Pricing

from $2.50 / 1,000 screenshot captureds

Go to Apify Store
Website Screenshot & PDF Capture

Website Screenshot & PDF Capture

Capture bulk website screenshots (PNG, JPEG, WebP) or PDFs. Full page, single element, mobile and tablet presets, dark mode, cookie-banner hiding and lazy-image scrolling. Pay only for successful captures.

Pricing

from $2.50 / 1,000 screenshot captureds

Rating

0.0

(0)

Developer

Kiwi Tools

Kiwi Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Turn a list of web pages into PNG, JPEG or WebP screenshots or PDF files in one run. Paste up to 1,000 URLs, pick a device and a format, and download one file per page. Full-page captures, single-element captures, mobile and tablet views, dark mode, and automatic hiding of cookie pop-ups are built in.

You pay only for files that were actually produced. Failed, blocked or skipped URLs are free.

What you can use it for

  • Visual archives and "before/after" records of your own sites or landing pages
  • Thumbnails and previews for directories, link lists and dashboards
  • Checking how pages look on phones, tablets and desktops
  • Turning articles, docs or reports into PDFs
  • Feeding page images to AI or vision workflows (works well as a tool for AI agents)

Features

  • Bulk: up to 1,000 URLs per run, captured in parallel
  • Formats: PNG (lossless), JPEG and WebP (adjustable quality), or PDF (A4, Letter, Legal, A3, Tabloid; portrait or landscape)
  • Devices: Desktop 1920×1080, Laptop 1366×768, Tablet 768×1024 @2x, iPhone 390×844 @3x, Android 412×915 @2.625x, or any custom width × height × pixel ratio
  • Full page or just one element (CSS selector), e.g. a chart, a pricing table or a product card
  • Lazy images: optional scroll-through before capturing so lazy-loaded images appear
  • Cookie pop-ups hidden with a built-in ruleset for common consent tools (the overlay is hidden; no consent choice is made)
  • Hide anything else (chat bubbles, promo bars) with your own CSS selectors
  • Dark mode for sites that support it
  • Wait options: load, domcontentloaded or networkidle, plus an extra delay
  • Safe by design: only public http(s) addresses are captured; local, private-network and file: addresses are refused, including after redirects
  • Optional ZIP with all files, and an optional proxy

How to use it

  1. Paste your URLs into URLs (one per line).
  2. Choose an Output format and a Device.
  3. Optionally switch on Full page, set an Element selector, or tweak the loading options.
  4. Click Start. Each file appears in the run's key-value store, and the dataset lists every URL with a direct link to its file.

Example: full-page mobile screenshots

{
"urls": ["https://example.com", "https://example.org/pricing"],
"format": "jpeg",
"quality": 80,
"device": "iphone",
"fullPage": true,
"scrollToBottom": true
}

Example: capture one element

{
"urls": ["https://example.com/dashboard"],
"format": "png",
"selector": "#sales-chart",
"device": "laptop"
}

Example: save pages as PDFs

{
"urls": ["https://example.com/blog/post-1", "https://example.com/blog/post-2"],
"format": "pdf",
"pdfFormat": "A4",
"pdfPrintBackground": true
}

Example: dark mode WebP at a custom size

{
"urls": ["https://example.com"],
"format": "webp",
"device": "custom",
"width": 1440,
"height": 900,
"deviceScaleFactor": 2,
"darkMode": true,
"hideSelectors": [".chat-widget", "#promo-bar"]
}

Input

FieldTypeDefaultDescription
urlsarray of strings(required)Public URLs to capture, max 1,000. https:// is added if missing.
formatpng · jpeg · webp · pdfpngOutput format.
qualityinteger 1–10085JPEG/WebP quality.
devicedesktop · laptop · tablet · iphone · android · customdesktopViewport preset.
width, heightinteger1280, 800Custom viewport in CSS px (only with custom).
deviceScaleFactornumber 0.5–31Custom pixel ratio (only with custom).
fullPagebooleanfalseCapture the whole page height (capped, see Limits).
selectorstring–Capture only the first element matching this CSS selector (images only).
waitUntilload · domcontentloaded · networkidleloadWhen the page counts as loaded.
delayMsinteger 0–300000Extra wait before capturing.
scrollToBottombooleanfalseScroll through the page first to trigger lazy images.
hideCookieBannersbooleantrueHide common cookie/consent pop-ups.
hideSelectorsarray of strings–Extra CSS selectors to hide.
darkModebooleanfalseRequest the site's dark theme (prefers-color-scheme: dark).
pdfFormatA4 · Letter · Legal · A3 · TabloidA4PDF paper size.
pdfLandscapebooleanfalseLandscape PDF.
pdfPrintBackgroundbooleantrueInclude background colours and images in PDFs.
pdfUseScreenMediabooleanfalseUse on-screen styles instead of the print stylesheet.
timeoutSecsinteger 5–18060Time limit per URL.
maxConcurrencyinteger 1–103Pages captured in parallel (about 1 GB memory per 2 pages).
skipHttpErrorsbooleantrueDon't capture or charge for pages answering HTTP 4xx/5xx.
zipOutputbooleanfalseAlso store ALL_CAPTURES.zip with every file (free).
proxyproxy settingsoffOptional proxy. Proxy traffic is billed by the platform separately.

Output

Files go to the run's default key-value store, named like shot-0001-example-com.png or pdf-0002-example-org-pricing.pdf.

Dataset: one row per URL (index is the position in your input list):

{
"index": 0,
"url": "https://example.com",
"finalUrl": "https://example.com/",
"httpStatus": 200,
"title": "Example Domain",
"fileKey": "shot-0001-example-com.png",
"fileUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/shot-0001-example-com.png",
"format": "png",
"width": 1920,
"height": 1080,
"pages": null,
"bytes": 80185,
"truncated": false,
"captureMethod": "viewport",
"capturedAt": "2026-10-18T09:51:45.619Z",
"charged": true,
"blockedRequests": 0,
"durationMs": 1240,
"ok": true,
"error": null
}

Failed rows have "ok": false, "charged": false and a plain-English error such as Timed out after 60 s, Page returned HTTP 404 or Rejected URL: Address 10.0.0.1 is not a public IP.

Pricing

This Actor uses pay-per-event pricing. You are charged only after a file has been saved:

EventPriceWhen it is charged
screenshotUS$0.0025 per image (US$2.50 per 1,000)A PNG, JPEG or WebP file was saved
pdfUS$0.003 per PDF (US$3.00 per 1,000)A PDF file was saved
Actor startsmall platform start feeOnce per run
  • Not charged: URLs that fail, time out, are refused by the safety check, return an HTTP error (with skipHttpErrors on), or are skipped.
  • Spending limit: set Maximum cost per run in the run options. The Actor checks it before every capture and stops cleanly when the limit is reached; the remaining URLs are listed as skipped (not charged).
  • The price already includes the compute the capture needs. Optional proxy traffic is billed separately by the platform.
  • You can try it on the Apify Free plan; charges are taken from your plan's monthly usage credit.

Limits and good to know

  • Page height is capped at 20,000 CSS px (and 32,000 device pixels; 16,383 px for WebP, a format limit). Taller pages are cut at the cap and marked "truncated": true.
  • On a few very heavy pages the browser's one-shot full-page capture stalls; the Actor then reloads the page and stitches viewport tiles together ("captureMethod": "stitched"). Fixed headers appear once at the top.
  • No logins: the Actor does not accept cookies, sessions or passwords, so pages behind a login can't be captured.
  • Cookie pop-ups are hidden, not answered. Some sites redirect to a separate consent page instead of showing a pop-up; that page is what gets captured.
  • Some sites block automated browsers or show a CAPTCHA. The Actor does not try to bypass such protections.
  • PDFs use the browser's print engine, so sites with a print stylesheet look different from the screen; switch on pdfUseScreenMedia to use screen styles.

Responsible use

Only submit URLs you have the right to capture, and respect the terms of the websites you capture and any copyright in their content. This Actor visits each URL once, like a normal browser; it does not crawl links. It is an independent tool and is not affiliated with or endorsed by any website it captures.

FAQ

Can I call it from my own code or an AI agent? Yes. Like any Actor it can be started through the Apify API, the API clients, integrations, or the Apify MCP server, and its input schema describes every option.

Why did a URL fail with "Rejected URL"? The safety check only allows public internet addresses. localhost, private networks (10.x, 192.168.x, etc.), cloud metadata addresses and file: links are always refused.

Are the files public? Files live in your run's key-value store and follow your storage settings and retention, like any other run output.