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

Website Screenshot API: Full-Page, Mobile & URL to PDF

Pricing

from $1.20 / 1,000 screenshots

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

Website Screenshot API: Full-Page, Mobile & URL to PDF

Website screenshot and URL to PDF for any list of URLs: full-page or viewport screenshots, desktop to mobile, PNG, JPEG or PDF, cookie banners and ads hidden. Returns a shareable image link per page. Callable by AI agents via MCP. From $1.50 per 1,000 screenshots.

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

14 days ago

Last modified

Security

Limited permissions

Share

For AI agents: Use when asked to screenshot a website, capture what a page looks like on mobile, or convert a URL to PDF. Call with urls (required), optional viewports (desktop, laptop, tablet, mobile, custom), fullPage, format (png, jpeg, pdf), darkMode, waitForSelector, delayMs; cookie banners and ads are hidden by default. Returns one row per URL+viewport: screenshotUrl (public image link), url, viewport, format, fullPage, status, httpStatus, pageTitle, fileSizeKb, error. Cost: $0.0015 per viewport screenshot, $0.005 per full-page capture or PDF, plus a $0.0015 start fee per run.

For people: Ask your agent "take full-page mobile screenshots of these 5 competitor homepages" and it captures them here and replies with image links you can open or share, with cookie banners already removed. Also turns pages into PDFs. 1,000 screenshots cost $1.50.

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)

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}'

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.

Use it from your AI agent (MCP)

Your AI assistant or agent can run this Actor as a tool through Apify's MCP server, so it can run website screenshots and PDFs on its own while you chat. Add this server to any MCP client that supports remote (Streamable HTTP) servers:

{
"mcpServers": {
"datawright-website-screenshot": {
"url": "https://mcp.apify.com?tools=datawright-labs/website-screenshot"
}
}
}

On first use your browser opens to sign in to Apify (OAuth). If your client can't do OAuth, add "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" } instead. The tool shows up as datawright-labs--website-screenshot, with the same input fields as above, and the agent reads the results with get-dataset-items. Then just ask, for example:

Take full-page mobile screenshots of these 5 competitor homepages and give me the image links.

Want several Datawright tools at once? Comma-separate them: https://mcp.apify.com?tools=datawright-labs/website-screenshot,datawright-labs/pagespeed-auditor. Runs are billed per result, exactly like normal runs.

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.