Website Screenshot API: Full-Page, Mobile & PDF
Pricing
from $1.20 / 1,000 screenshots
Website Screenshot API: Full-Page, Mobile & PDF
Capture full-page or viewport screenshots of any list of URLs as PNG, JPEG or PDF. Desktop, laptop, tablet and mobile presets, dark mode, wait-for-selector, and built-in ad and cookie-banner blocking. Returns a shareable image URL per page.
Pricing
from $1.20 / 1,000 screenshots
Rating
0.0
(0)
Developer
Datawright Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Capture screenshots of any list of URLs as PNG, JPEG or PDF: full-page or viewport only, on desktop, laptop, tablet and mobile presets or a custom size, with dark mode, wait-for-selector, and built-in cookie banner and ad blocking so your captures look clean. Every screenshot is stored in the run's key-value store and returned with a shareable URL in the dataset.
What does this website screenshot tool do?
- Bulk screenshots: paste hundreds of URLs, get one image per URL per viewport.
- Viewport presets: Desktop 1920×1080, Laptop 1366×768, Tablet 810×1080 (2× retina), Mobile 390×844 (iPhone 13, 3× retina, mobile user agent), or a custom width × height, with an optional pixel-density override (1x–3x).
- Full-page screenshots of the entire scrollable page, with optional auto-scroll so lazy-loaded images appear.
- Formats: PNG (lossless), JPEG (adjustable quality) or PDF (paper size or one long full-page PDF).
- Hide cookie banners using community filter lists plus built-in rules for common consent platforms (OneTrust, Cookiebot, Usercentrics, Quantcast, Didomi, TrustArc, CookieYes and others).
- Block ads and trackers for faster, cleaner captures.
- Dark mode (
prefers-color-scheme: dark), wait for a CSS selector, extra delay, and hide any element by CSS selector (chat widgets, popups). - Parallel capture, automatic retries, and a clear error per URL (DNS failure, timeout, selector not found) instead of a failed run.
- Optional proxy support, e.g. to capture country-specific versions of a page.
Use cases
- Visual archiving & compliance: keep dated screenshots or PDFs of web pages, ads or terms pages.
- SEO & marketing reports: thumbnails of landing pages, competitor pages or SERP destinations.
- QA & responsive design checks: see each page on desktop, tablet and mobile at once.
- Link previews & directories: generate thumbnails for a list of websites.
- Monitoring: schedule daily captures of pages you care about.
Input
| Field | Description | Default |
|---|---|---|
urls | URLs to capture | ["https://example.com"] |
viewports | desktop, laptop, tablet, mobile, custom | ["desktop"] |
fullPage | Capture the full scrollable page | false |
format | png, jpeg or pdf | png |
darkMode | Emulate dark color scheme | false |
waitUntil | load, domcontentloaded, networkidle | load |
waitForSelector | Wait for an element before capture | – |
delayMs | Extra wait in ms | 1000 |
scrollToBottom | Trigger lazy loading | false |
blockCookieBanners / blockAds | Clean-up options | true / true |
hideSelectors | Extra elements to hide | – |
proxyConfiguration | Optional proxy | none |
Example input:
{"urls": ["https://apify.com", "https://example.com"],"viewports": ["desktop", "mobile"],"fullPage": true,"format": "png","scrollToBottom": true,"blockCookieBanners": true}
Output
Each capture is saved to the run's default key-value store, and the dataset gets one row per URL × viewport:
{"url": "https://example.com/","finalUrl": "https://example.com/","status": "ok","httpStatus": 200,"pageTitle": "Example Domain","viewport": "desktop","width": 1920,"height": 1080,"deviceScaleFactor": 1,"fullPage": false,"format": "png","darkMode": false,"screenshotUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/example.com-desktop-1a2b3c4d.png","key": "example.com-desktop-1a2b3c4d.png","fileSizeKb": 79,"durationMs": 1830,"attempts": 1,"takenAt": "2026-10-19T03:51:02.000Z"}
screenshotUrl opens the image directly in a browser (if your account restricts storage access, the URL includes a signature). Failed captures are kept with status: "error", an errorType and an error message.
Files follow your account's data retention for run storages. Download or copy them elsewhere (e.g. with the Google Drive, S3 or Dropbox integrations) if you need them long term.
Example tasks
Copy one of these into the JSON tab of the input (or save it as a Task) to get started quickly.
Full-page desktop + mobile screenshots with cookie banners removed
{"urls": ["https://apify.com","https://example.com"],"viewports": ["desktop","mobile"],"fullPage": true,"blockCookieBanners": true}
Save web pages as A4 PDFs
{"urls": ["https://en.wikipedia.org/wiki/Web_scraping"],"format": "pdf","pdfPaperFormat": "A4"}
Dark-mode JPEG thumbnails of a list of sites
{"urls": ["https://github.com","https://vercel.com"],"viewports": ["laptop"],"format": "jpeg","jpegQuality": 70,"darkMode": true}
How much does the website screenshot API cost?
You pay per successful capture; failed captures are free.
| Job | Cost |
|---|---|
| 1 run start (default 2 GB memory) | $0.003 (charged once per run, $0.0015 per GB) |
| 100 viewport screenshots (PNG/JPEG) | $0.15 |
| 1,000 viewport screenshots | $1.50 |
| 1,000 full-page screenshots or PDFs | $5 |
| 1,000 URLs × desktop + mobile viewport | $3 |
- Apify's free plan includes $5 of monthly credit: about 3,000 viewport screenshots a month for free.
- Paid Apify plans get automatic discounts: Silver -10%, Gold and above -20%.
- Batch many URLs in one run: the start fee is paid once per run, not per URL.
- Set Maximum cost per run to hard-cap spend.
Website screenshot API vs. the alternatives
| This Actor | Running Puppeteer/Playwright yourself | Screenshot API SaaS | |
|---|---|---|---|
| Bulk: hundreds of URLs per call | ✅ | DIY queue + retries | usually one URL per call |
| Full-page, viewport and PDF | ✅ | ✅ | ✅ |
| Cookie-banner + ad blocking built in | ✅ | DIY | sometimes, often paid tier |
| Mobile (iPhone 3×), tablet, laptop, custom presets | ✅ | DIY | ✅ |
| Hosted image URL per capture | ✅ | DIY storage | ✅ |
| Cost model | $1.50 per 1,000, no subscription | servers + your time | monthly plan |
Use it as an API (Python, JavaScript, cURL, MCP)
Every Apify Actor is also a REST API, so you can call this website screenshot API from your own code, a no-code tool or an AI agent.
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("datawright-labs/website-screenshot").call(run_input={"urls": ["https://example.com"], "fullPage": true})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('datawright-labs/website-screenshot').call({"urls": ["https://example.com"], "fullPage": true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
cURL (run and get results in one request)
curl -X POST "https://api.apify.com/v2/acts/datawright-labs~website-screenshot/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"urls": ["https://example.com"], "fullPage": true}'
AI agents (MCP)
Add https://mcp.apify.com/?tools=datawright-labs/website-screenshot to Claude, Cursor or any MCP client and the agent can run it as a tool.
Results can also go straight to Google Sheets, Slack, Make, Zapier, n8n, Airbyte or a webhook via Apify integrations, and you can run it on a Schedule.
FAQ
Are all cookie banners removed?
Most common ones are, but not every site. Banners that are part of the page's own code can still slip through; add their selector to hideSelectors.
Why does dark mode not change some sites?
Dark mode emulates the browser's prefers-color-scheme: dark setting. Only sites that ship a dark theme respond to it.
Can I capture pages behind a login?
Not in this version.
Why is my full-page screenshot cut off or missing images?
Turn on scrollToBottom and increase delayMs so lazy-loaded content can load. Very long pages are cut at maxFullPageHeight (default 15,000 CSS px, and at most 24,000 device pixels, i.e. 8,000 CSS px with the 3x mobile preset) to avoid browser crashes; such rows have fullPageTruncated: true. Set the pixel density to 1 to capture more of a long page on mobile.
Can I take screenshots on a schedule?
Yes. Use Apify Schedules and integrations to send the images to Slack, Google Drive, S3 or a webhook.
Is there a free website screenshot API?
Apify's free plan includes $5 of monthly credit, which covers about 3,000 screenshots with this Actor, and you call it over a normal REST API (see below).
How do I take full-page screenshots of many URLs at once?
Paste the URLs, set fullPage: true and turn on scrollToBottom for lazy-loaded pages. Each capture is saved with a shareable URL in the dataset.
Can I convert a URL to PDF?
Yes. Set the format to pdf to get one PDF per page (paper size or one long full-page PDF).
More tools from Datawright Labs
- Bulk PageSpeed & Core Web Vitals Checker: audit PageSpeed / Lighthouse scores for many URLs.
- Sitemap URL Extractor: get every URL of a site from its sitemaps.
- Google Autocomplete Keyword Scraper: long-tail keyword ideas from Google, YouTube and Bing.
- Greenhouse, Lever & Ashby Jobs Scraper: normalized job feeds from 5 ATS platforms.
- Broken Link Checker: find broken links, images and redirects across a whole site.
- App Store Top Charts & Rank Tracker: daily top free/paid/grossing app rankings with rank changes.
Tip: get every page of a site with the Sitemap URL Extractor, then screenshot them all in one run.
Made by Datawright Labs: reliable, fairly priced web data tools. Questions or a missing feature? Open an issue on the Issues tab; we usually reply within a day.