Website Screenshot & PDF API - Full Page, Mobile, Bulk
Pricing
from $2.50 / 1,000 screenshots
Website Screenshot & PDF API - Full Page, Mobile, Bulk
Capture screenshots or PDFs of web pages. Input: URLs; format (PNG, JPEG, WebP, PDF), full page or viewport, device preset, element selector, dark mode. Returns per URL: file URL, title, HTTP status, size. Hides cookie banners, loads lazy images. Charged only for successful captures.
Pricing
from $2.50 / 1,000 screenshots
Rating
0.0
(0)
Developer
Bence Kadi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Website Screenshot & PDF API: full page, mobile, bulk
Turn any list of URLs into clean screenshots or PDFs (full-page or viewport PNG, JPEG, WebP, or printable PDF) with a real Chromium browser, hidden cookie banners and loaded lazy images, for $2.50 per 1,000 successful captures. Failed pages are free.
๐ธ What is Website Screenshot & PDF API?
Website Screenshot & PDF API opens each URL you give it in a real headless Chromium browser (Playwright), waits for the page to load, scrolls through it so lazy images appear, hides cookie banners and ads, and saves a screenshot or PDF. Every file goes into the run's key-value store with a public link, and you get one tidy dataset row per URL. It does not crawl: it only loads the exact URLs you supply.
- ๐ช No cookie banners. Pop-ups from 35+ consent tools (OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast, Sourcepoint, TrustArc, Google Funding Choices...) are hidden with CSS. Nothing is clicked, so no consent is given on your behalf.
- ๐ผ๏ธ Lazy content loads, with no blank boxes and no doubled sticky headers.
- ๐ฑ Device presets (desktop, laptop, tablet, mobile) with real user agents and 2x density, or a custom viewport and retina 1-3x.
- ๐ฏ Element capture by CSS selector, ๐ dark mode, wait-for-element, extra delay and network-idle waiting.
- ๐ PDF in A4/Letter/Legal/A3/A5/Tabloid, with screen or print styles.
- ๐ธ Failures are free: timeouts, 404s, blocked pages and robots.txt skips are listed with the reason and not charged.
๐ฏ Use cases
- Agencies and marketing teams: schedule daily screenshots of competitors' homepages and pricing pages, and keep a visual history.
- Compliance and archiving: save dated PNGs or PDFs of pages, ads, terms or product listings.
- Developers: generate link previews, directory thumbnails or portfolio images in bulk.
- QA teams: check landing pages on desktop, tablet and mobile after each release, or in dark mode.
- AI and LLM pipelines: feed screenshots to GPT-4o, Claude or Gemini for layout or content analysis. JPEG and WebP keep files small.
- Reports and decks: capture a single chart, table or section with the CSS selector option.
๐ Output fields
One dataset row per URL (examples from a real run on 2026-10-05):
| Field | Description | Example |
|---|---|---|
url | The URL as captured (https:// added) | https://apify.com/ |
finalUrl | The URL after redirects | https://apify.com/ |
status | HTTP status of the page | 200 |
title | Page title | Apify: Marketplace of ready-to-run tools for AI |
screenshotUrl | Public link to the image or PDF | https://api.apify.com/v2/key-value-stores/<storeId>/records/screenshot-apify.com-b2cbeceab7.png |
key | File key in the key-value store | screenshot-apify.com-b2cbeceab7.png |
format | png, jpeg, webp or pdf | png |
device | Device preset used | desktop |
fullPage | Whole page or viewport only (false for PDF and element) | true |
selector | Element selector, if any | null |
width | Image width in pixels (null for PDF) | 1920 |
height | Image height in pixels (null for PDF) | 10036 |
bytes | File size in bytes | 1091958 |
pdfPages | Number of PDF pages (null for images) | null |
truncated | Page was cut at the height limit | false |
cookieBannersHidden | Extra cookie overlays hidden by the generic check (known consent tools are hidden by CSS and not counted) | 0 |
durationMs | Time spent on this URL (ms) | 12922 |
takenAt | Capture time (UTC) | 2026-10-05T03:42:21Z |
error | Why the page failed, or null on success | null |
Use cases: Developer tools (process & convert media, monitor & alert on website changes, browser automation and testing) ยท Brand monitoring ยท Research markets & competitors (track competitors).
๐ How to use it
- Open Website Screenshot & PDF API in Apify Store and click Try for free.
- Paste your URLs, one per line (or a CSV column).
- Choose the format, Full page on or off, and a device.
- Click Start. The prefilled example (3 sites) takes about 20 seconds.
- Open the Screenshots tab for thumbnails and links, or download the dataset. The files are in the run's key-value store.
๐ง Input guide
URLs (urls, required). Full URLs or bare domains (example.com becomes https://example.com/). One per line; commas and spaces also work, and lines starting with # are ignored. Duplicates are skipped. Max 50,000 URLs per run.
- Good:
https://example.com/pricing,apify.com - Bad:
ftp://example.com(http/https only),https://user:pass@example.com(no logins),localhostor192.168.1.10(private addresses are rejected).
Format, full page and device
format:png(lossless, sharp text),jpegorwebp(much smaller files),pdf(printable, selectable text). Same price for all.fullPage: whole scrollable page, or off for the visible viewport only. Ignored for PDF and element captures.device:desktop1920x1080,laptop1366x768,tablet820x1180 andmobile412x915 (both 2x pixels, touch, Android user agent).viewportWidth(200-3840),viewportHeight(200-4320) anddeviceScaleFactor(1-3) override the preset.
Element capture (selector). E.g. #pricing or table.results: only the first visible match is captured. If nothing matches within 10 s, the row is a free error. Plain CSS only (no braces, max 500 characters).
Page loading
waitUntil:load(default; load event capped at 8 s after the page is ready, plus up to 1.5 s for late requests),networkidle(up to 15 s, for heavy single-page apps) ordomcontentloaded(fastest, may miss images).delayMs(0-30,000): extra wait, e.g.2000for intro animations.waitForSelector: wait until an element is visible (max 15 s). If it never appears, the row is a free error.scrollToLoad(default on): scrolls the page (max 8 s) before full-page, element or PDF captures, then returns to the top.
Clean-up. hideCookieBanners and blockAds are on by default. hideSelectors takes up to 50 extra selectors (e.g. #intercom-container). darkMode works only on sites that support it. If the page itself is on the ad block list, the row says so: turn blockAds off.
Image and PDF options. quality 1-100 (JPEG/WebP, default 80). fullPageMaxHeight (500-30,000 CSS px, default 20,000) cuts very long pages and sets truncated: true. Warning: WebP is also limited to 16,383 px and JPEG to 65,500 px, divided by pixel density (a 2x WebP is cut at 8,191 CSS px). PDF: pdfFormat, pdfLandscape, pdfMargin (10mm, 0.5in, 0...), pdfPrintBackground, pdfUseScreenCss (off = the site's print stylesheet).
robots.txt (respectRobotsTxt, default on). Checked per RFC 9309 for the WebsiteScreenshot token or *. Disallowed pages are skipped for free. Crawl-delay is honoured per site (max 30 s). If robots.txt returns 429 or 5xx, the site counts as disallowed. Keep it on unless you own the site.
Limits & performance
maxConcurrency0 = automatic: 2 GB memory gives 3 parallel tabs, 4 GB gives 6, 8 GB gives 12. Manual values are capped at 3 tabs per GB. More memory = faster, same price per screenshot.navigationTimeoutSecs(5-120, default 45) andmaxRetries(0-3, default 1). Timeouts, network errors and tab crashes are retried; HTTP errors like 403 or 404 are not.
Proxy. Usually not needed. Apify Proxy (datacenter) works; residential proxies are rejected as invalid input.
Full example input
{"urls": ["https://example.com", "apify.com/pricing", "https://www.wikipedia.org"],"format": "webp","fullPage": true,"device": "mobile","quality": 80,"waitUntil": "load","hideCookieBanners": true,"blockAds": true,"hideSelectors": ["#intercom-container"],"fullPageMaxHeight": 20000,"respectRobotsTxt": true,"maxConcurrency": 0,"navigationTimeoutSecs": 45,"proxyConfiguration": { "useApifyProxy": false }}
๐ฆ Output (real run on 2026-10-05)
One row per URL (screenshotUrl shown in its Apify platform form; the local test run wrote a file path):
{"url": "https://www.wikipedia.org/","finalUrl": "https://www.wikipedia.org/","status": 200,"title": "Wikipedia","screenshotUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/screenshot-wikipedia.org-72e64cabc2.png","key": "screenshot-wikipedia.org-72e64cabc2.png","format": "png","device": "desktop","fullPage": true,"selector": null,"width": 1920,"height": 1101,"bytes": 149002,"pdfPages": null,"truncated": false,"cookieBannersHidden": 0,"durationMs": 6764,"takenAt": "2026-10-05T03:42:15Z","error": null}
A failed page is still listed, with error filled in and no file, for example "HTTP 403 - the site blocks automated access (not charged)", "Domain not found (DNS lookup failed)" or "robots.txt of this site does not allow automated access to this page - skipped (not charged)".
Dataset views: Screenshots shows a thumbnail, URL, title, HTTP status, size and error. Links and details adds the final URL, file link, format, device, truncated, PDF pages, overlays hidden, timing and date.
Key-value store:
- The files, with keys like
screenshot-<domain>-<hash>.<ext>(png,jpg,webp,pdf). The hash comes from the URL, so the same URL always gets the same key name. - RUN_SUMMARY: URLs requested, screenshots taken, failures by type (
http,timeout,dns,robots,blocked...), invalid inputs and duplicates skipped, whether the charge limit was hit, parallel tabs, options, Chromium version and timing. The prefilled run: 3 of 3 in 14.8 s, 4.94 s wall time per screenshot.
Export: download the dataset as JSON, CSV, Excel, XML, RSS or an HTML table, or read it via the API. screenshotUrl links are public, so they work in Google Sheets (=IMAGE(...)), Airtable or Slack without logging in.
๐ต Pricing: $2.50 per 1,000 screenshots
Pay per event: $0.0025 per successful screenshot or PDF (event screenshot), plus Apify's $0.00005 per-run start fee. Browser compute is included.
| Typical run | Captures | Cost |
|---|---|---|
| Prefilled example | 3 | $0.0075 + $0.00005 |
| 20 competitor homepages, daily for 30 days | 600 | $1.50 + 30 x $0.00005 = $1.5015 |
| 1,000 thumbnails | 1,000 | $2.50 + $0.00005 |
| 10,000 product pages | 10,000 | $25.00 + $0.00005 |
- Format, device, full page and retina don't change the price.
- Free: failed pages (timeouts, HTTP and DNS errors, bot challenges, downloads, missing selectors), robots.txt skips, invalid and duplicate URLs.
- Max charge per run caps spending: the run stops cleanly at your limit.
Why this price? A real browser needs several CPU-seconds to render a modern page properly (waiting for images, scrolling lazy content, hiding banners). The price covers that compute.
๐ Use it via API
Replace YOUR_API_TOKEN with your token from Apify Console (Settings โ API & Integrations).
JavaScript (npm install apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('kadi_bence/website-screenshot').call({urls: ['https://example.com', 'apify.com/pricing'],format: 'webp',device: 'mobile',});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) console.log(item.url, item.screenshotUrl ?? item.error);
Python (pip install apify-client)
from apify_client import ApifyClientclient = ApifyClient('YOUR_API_TOKEN')run = client.actor('kadi_bence/website-screenshot').call(run_input={'urls': ['https://example.com', 'https://www.wikipedia.org'],'format': 'pdf','pdfFormat': 'Letter',})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['url'], item['screenshotUrl'] or item['error'])
cURL (runs and returns the rows in one call; best for small batches)
curl -X POST "https://api.apify.com/v2/acts/kadi_bence~website-screenshot/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://example.com"], "format": "jpeg", "fullPage": false}'
Apify CLI
apify call kadi_bence/website-screenshot --input '{"urls": ["https://example.com"]}'apify call kadi_bence/website-screenshot -f input.json
MCP for AI agents (Claude, Cursor, VS Code and other MCP clients):
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=kadi_bence/website-screenshot"}}}
๐ Integrations & scheduling
Use Apify Schedules (cron) for recurring runs, webhooks to call your URL when a run succeeds, Zapier, Make or n8n to pass screenshotUrl links to other apps, Google Sheets export, and Slack or email integrations for notifications.
- Screenshot competitors' homepages daily. Save a task with their homepages and pricing pages (
format: jpeg), schedule it every morning, and send the links to Slack. Each row hastakenAt, and the key name stays the same per URL, so today's and yesterday's images line up. - Mobile and desktop QA after a release. Start two runs from CI or a webhook (
device: desktopanddevice: mobile) and scan the Screenshots tab. - Archive pages as PDF. Use
format: pdfand copy the files to your own storage with Make or n8n, because unnamed run storages are deleted after your plan's retention period.
๐งฐ Related tools by the same developer
Website due diligence
- Website Tech Stack Detector - CMS, ecommerce, analytics and frameworks from 7,600+ fingerprints; $1.50 / 1,000 websites.
- SEO Site Audit Crawler - broken links, redirects, titles/meta, canonical, hreflang on every page; $1.50 / 1,000 pages.
- Bulk WHOIS & RDAP Domain Lookup - registrar, age, expiry, DNS/MX/SPF/DMARC; $1.50 / 1,000 domains.
Content pipelines
- Document to Markdown - PDF/Word/PowerPoint/Excel/OCR to Markdown and RAG chunks; $2 / 1,000 documents.
- Bulk Image Downloader - all images/files from pages into a ZIP; $0.80 / 1,000 files.
โ FAQ
How does it work? Each URL opens in a fresh, isolated headless Chromium context (Playwright), is loaded, scrolled, cleaned up and captured. A crashed browser is relaunched and the page retried.
How fast is it? Simple pages take a few seconds and heavy modern pages 10-20 seconds, with several captured at the same time. With the default 4 GB of memory (6 parallel tabs), expect roughly 500-1,000 full-page screenshots per hour. More memory gives more parallel tabs at the same price per screenshot.
What are the limits?
Up to 50,000 URLs per run. Full-page images are cut at 20,000 px by default (WebP at 16,383 px, a format limit), and the row then shows truncated: true. Each page has a 45 s load timeout with one retry. PDFs follow the browser's print layout.
A cookie banner or pop-up is still visible? Add its CSS selector to Hide these elements, and please open an issue with the URL so we can add it to the built-in list.
Some sites fail with 403 or a bot challenge? Large sites (Amazon, Etsy, NYTimes, Zalando...) sometimes block automated browsers. Those rows are free. You can try Apify Proxy (datacenter). Residential proxies are not supported, and challenges are never bypassed. Without a proxy, pages load from Apify's servers (mostly in the US), so sites may show their US version.
Which pages can I capture? Is it legal? Only capture pages you are allowed to: public pages, or your own sites. The Actor never logs in, doesn't bypass paywalls, CAPTCHAs or bot protection, and respects robots.txt by default. The captured content belongs to its owners: copyright and how you use the images or PDFs are your responsibility. Screenshots can contain personal data if the page shows it, so handle them under GDPR or your local laws. This is not legal advice.
Can I use it from my code or an AI agent? Yes: the API, clients, CLI, Make, Zapier, n8n or the MCP server (see above).
How much does a big job cost? $0.0025 per successful capture: 50,000 screenshots (the per-run maximum) cost $125 plus the $0.00005 start fee. Set Max charge per run to cap it.
What if something fails?
A failed page gets a row with the reason in error and is not charged; RUN_SUMMARY counts errors by type. If a run fails or a result looks wrong, open an issue in the Issues tab with the run link.
๐ Changelog
- 1.0 (2026-10-05): First release. PNG/JPEG/WebP/PDF, full page/viewport/element, device presets, dark mode, cookie-banner hiding, lazy-load scrolling, ad blocking, robots.txt, failed pages not charged.
- 2026-10-05: Store page rewritten.
๐ค Need a custom version?
I build custom scrapers, scheduled data feeds and integrations (CSV, Excel, Google Sheets, API, MCP for AI agents). Tell me the sites and fields you need:
- Email: bence.kadi@gmail.com
- Apify profile: https://apify.com/kadi_bence
Related Actors
More low-cost Actors by the same developer, built on official APIs and public data:
- Bulk Image Downloader โ download all images from URLs as a ZIP
- Document to Markdown โ PDF, Word, PowerPoint and Excel to clean Markdown, with OCR
- PageSpeed Insights Bulk Checker โ Core Web Vitals and Lighthouse scores in bulk
- SEO Site Audit โ 0-100 SEO score per page, broken links and fix hints
- Website Tech Stack Detector โ CMS, ecommerce, analytics and frameworks of any website
- Bulk WHOIS & RDAP Domain Lookup โ registrar, dates and DNS for many domains
- AI Visibility Tracker โ how ChatGPT, Perplexity, Gemini and Claude mention your brand
All my Actors: apify.com/kadi_bence