Website Screenshot API: Full-Page, Mobile & PDF avatar

Website Screenshot API: Full-Page, Mobile & PDF

Pricing

from $1.20 / 1,000 screenshots

Go to Apify Store
Website Screenshot API: Full-Page, Mobile & PDF

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

Datawright Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

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

FieldDescriptionDefault
urlsURLs to capture["https://example.com"]
viewportsdesktop, laptop, tablet, mobile, custom["desktop"]
fullPageCapture the full scrollable pagefalse
formatpng, jpeg or pdfpng
darkModeEmulate dark color schemefalse
waitUntilload, domcontentloaded, networkidleload
waitForSelectorWait for an element before capture–
delayMsExtra wait in ms1000
scrollToBottomTrigger lazy loadingfalse
blockCookieBanners / blockAdsClean-up optionstrue / true
hideSelectorsExtra elements to hide–
proxyConfigurationOptional proxynone

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.

JobCost
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 ActorRunning Puppeteer/Playwright yourselfScreenshot API SaaS
Bulk: hundreds of URLs per call✅DIY queue + retriesusually one URL per call
Full-page, viewport and PDF✅✅✅
Cookie-banner + ad blocking built in✅DIYsometimes, 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 subscriptionservers + your timemonthly 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 ApifyClient
client = 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

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

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.