Website Screenshot API: Full Page, PDF & Mobile avatar

Website Screenshot API: Full Page, PDF & Mobile

Pricing

from $1.50 / 1,000 screenshots

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

Website Screenshot API: Full Page, PDF & Mobile

Capture any URL as PNG, JPEG, WebP or PDF: viewport, full page or one element. Desktop, laptop, tablet, iPhone & Android presets, dark mode, cookie banner & ad hiding. Pay only per successful screenshot.

Pricing

from $1.50 / 1,000 screenshots

Rating

0.0

(0)

Developer

Parth

Parth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Turn any list of URLs into clean website screenshots or PDFs, ready to share or feed into your pipelines. Choose PNG, JPEG, WebP or PDF, and capture the visible viewport, the full scrollable page, or a single element by CSS selector. Presets cover desktop, laptop, tablet, iPhone and Android, and you can also set a custom size, retina density or dark mode. Cookie banners are hidden automatically, and ads and trackers can be blocked too.

Every capture is saved as a file with a direct download link, and gets one dataset row with the final URL, HTTP status, page title, pixel size and file size. You pay a flat price per successful screenshot. Failed, timed-out or blocked pages produce a free error row.

What can it do?

  • 📸 4 formats: PNG (lossless), JPEG and WebP (with a quality setting), and PDF (A4, Letter, Legal, A3 or Tabloid; portrait or landscape)
  • 🖥️ 3 capture modes: viewport (above the fold), full page (the whole scrollable page, with lazy images loaded first) and element (just #pricing, header, .product-card and so on)
  • 📱 Device presets: Desktop 1920×1080, Laptop 1440×900, Tablet (iPad), iPhone 15 and Android (Pixel 7), each with the right user agent, touch and mobile emulation. Custom width and height and retina 2×/3× are also available.
  • 🌙 Dark mode via prefers-color-scheme: dark
  • 🍪 No cookie banners: 35+ consent tools (OneTrust, Cookiebot, Usercentrics, Quantcast, Didomi, TrustArc, Sourcepoint, CookieYes, Osano and more) are hidden and page scrolling is unlocked. You can add your own selectors to hide chat widgets, pop-ups or sticky headers.
  • 🚫 Ad and tracker blocking (on by default, can be turned off): about 100 ad and analytics networks are blocked, so ad-heavy pages load up to 5× faster and look cleaner
  • ⏱️ Wait control: wait for load, networkidle (good for SPAs and dashboards) or domcontentloaded, plus an extra delay for animations and charts
  • ⚡ Fast and cheap: one shared Chromium browser captures several pages in parallel. Slow third-party scripts can't stall a capture, and no proxy is used by default.
  • 🧾 Fair billing: you are charged only when a file is saved. Errors, HTTP 4xx/5xx responses and bot-protection pages are free.

Input example

{
"urls": [
"https://apify.com",
"https://en.wikipedia.org/wiki/Web_scraping",
"https://news.ycombinator.com"
],
"format": "png",
"mode": "fullPage",
"device": "desktop",
"darkMode": false,
"hideCookieBanners": true,
"hideSelectors": ["#intercom-container"],
"blockAdsAndTrackers": true,
"waitUntil": "load",
"delayMs": 500,
"timeoutSecs": 30
}
FieldWhat it does
urlsPages to capture, one per line (https:// is added if missing)
formatpng, jpeg, webp, pdf
modeviewport, fullPage, element
selectorCSS selector for element mode
devicedesktop, laptop, tablet, iphone, android, custom
viewportWidth / viewportHeightOverride the preset size (0 = preset)
deviceScaleFactor1–3 for retina output (0 = preset)
darkModeEmulate dark color scheme
hideCookieBannersHide consent pop-ups (default on)
hideSelectorsExtra CSS selectors to hide
blockAdsAndTrackersBlock ad and analytics requests (default on; turn off to capture ads)
waitUntilload, networkidle, domcontentloaded
delayMsExtra wait before capture
qualityJPEG/WebP quality 1–100
maxFullPageHeightCut infinite feeds at N CSS px (default 15,000)
pdfPageFormat / pdfLandscape / pdfMediaPDF paper, orientation, screen or print CSS
timeoutSecsPage load timeout
maxConcurrencyPages captured in parallel (0 = auto, 1 per GB of memory)
proxyConfigurationOptional Apify Proxy or your own proxies (off by default)

Output example

Each capture is stored in the run's key-value store, for example as 0001-apify.com.png. You also get one dataset row per URL:

{
"inputUrl": "https://apify.com",
"url": "https://apify.com/",
"finalUrl": "https://apify.com/",
"statusCode": 200,
"title": "Apify: Full-stack web scraping and data extraction platform",
"format": "png",
"mode": "fullPage",
"device": "desktop",
"width": 1920,
"height": 9876,
"viewportWidth": 1920,
"viewportHeight": 1080,
"deviceScaleFactor": 1,
"darkMode": false,
"pdfPages": null,
"truncated": false,
"fileSizeBytes": 2154312,
"contentType": "image/png",
"key": "0001-apify.com.png",
"fileUrl": "https://api.apify.com/v2/key-value-stores/aBcD1234/records/0001-apify.com.png",
"loadTimeMs": 3120,
"notes": null,
"success": true,
"error": null,
"errorType": null,
"capturedAt": "2026-10-21T08:00:00.000Z"
}

A failed URL gives a row with "success": false, an error message and an errorType (invalid_url, dns, timeout, navigation_failed, http_error, blocked, selector_not_found, capture_failed). These rows are never charged.

The dataset has three views: Screenshots (with image previews), File links and Errors. You can export to JSON, CSV or Excel, or use fileUrl to download each file directly.

Pricing

Pricing is pay per event, a flat price per successful capture:

EventPricePer 1,000
Viewport or element screenshot (PNG/JPEG/WebP, any device)$0.0015$1.50
Full-page screenshot or PDF$0.003$3.00
Actor start (Apify's default start fee, once per run per GB of memory)$0.00005$0.05 per 1,000 runs

Failed, blocked and HTTP-error pages cost nothing. Set Max cost per run and the Actor stops cleanly once that budget is reached.

How this compares to Apify's Website Screenshot Generator (apify/screenshot-url)

This Actorapify/screenshot-url
BillingFlat price per successful capturePlatform compute (2 GB default memory) plus Apify Proxy traffic
Cost predictabilityKnown before you runDepends on page weight, memory and run time
ProxyOff by default (optional)Apify Proxy on by default
FormatsPNG, JPEG, WebP, PDFPNG, PDF
Capture modesViewport, full page, single elementViewport or scroll to bottom
Device presets, retina, dark mode✅ Desktop, laptop, tablet, iPhone, AndroidViewport width only
Cookie banner hiding✅ Built-in list + your selectorsYour own selectors only
Ad and tracker blocking✅ On by default (can be turned off)❌
Failed pagesFree error rowCompute is still billed

apify/screenshot-url is a great open-source example Actor. This Actor is a production screenshot API with predictable per-capture pricing.

Use cases

  • SEO and agency reports: capture client homepages, landing pages and SERP-ranked pages on desktop and mobile for monthly reports and audits
  • Competitor monitoring: schedule daily full-page captures of competitors' pricing, home and feature pages to keep a visual history of every change
  • QA and visual regression: screenshot staging and production on every device preset after a deploy, then diff them in your CI
  • Archiving and compliance: keep timestamped PNG/PDF evidence of web pages, ads, terms and disclosures
  • AI agents and LLM vision: give agents (via the Apify MCP server or API) a screenshot tool to "look" at pages, or feed captures into GPT-4o, Claude or Gemini vision for analysis
  • No-code automation: connect to Zapier, Make or n8n. Send new URLs from a Google Sheet, Airtable or CRM, then post the resulting fileUrl to Slack, Notion, Google Drive or email
  • Social and link previews: generate thumbnails and OG-style previews for directories, newsletters and link pages

How to use it via API

curl -X POST "https://api.apify.com/v2/acts/<ACTOR_ID>/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"urls":["https://example.com"],"format":"png","mode":"fullPage"}'

The response contains the dataset rows. Each row's fileUrl points to the image or PDF. JavaScript and Python clients, schedules and webhooks all work the same way.

FAQ

Does it bypass Cloudflare, CAPTCHAs or logins? No. It captures public pages as a normal browser sees them. Pages that show a bot-protection challenge, or return HTTP 4xx/5xx, produce a free blocked or http_error row instead of a screenshot of the challenge page.

Do I need a proxy? Usually not, and none is used by default. To see a country-specific version of a page, enable Apify Proxy (billed to your account as normal proxy usage) or add your own proxy URLs.

Why is a cookie banner or pop-up still visible? Some sites use custom consent dialogs. Add their CSS selector to Extra elements to hide and they will be removed. Banners are hidden with CSS and never accepted for you.

Which memory should I use? Keep the default 2048 MB. 1024 MB works for simple viewport screenshots, but heavy news and SPA pages, and tall full-page captures, can crash the browser at 1 GB. Crashes give a free out_of_memory error row. The per-screenshot price is the same at any memory. Only the small Actor start fee scales with memory.

Very long pages? Full-page captures are cut at maxFullPageHeight (15,000 CSS px by default) to avoid giant files from infinite feeds. Set it to 0 for no limit. To keep captures reliable, one image is also limited to about 36 megapixels. That is roughly 18,000 px tall at 1920 px wide, or about 10,000 CSS px on an iPhone at 3×. WebP is always limited to 16,383 px per side by the format. The truncated field and notes show when a cut happened.

Are the file links public? fileUrl is the Apify key-value store record URL and works without an API token. If you restrict general resource access in your Apify account settings, the link carries a signature so it still opens. Files follow your plan's data retention.

How many URLs per run? As many as you like. Pages are captured in parallel in one shared browser, one per GB of memory by default (2 at the default 2048 MB). For big batches, raise memory to 4–8 GB and parallelism goes up automatically.

Only capture pages you are allowed to access, and respect the website's terms, copyright and trademarks when you store or republish screenshots. Screenshots can contain personal data. If they do, you are responsible for handling it lawfully (for example under GDPR or CCPA). This Actor does not log in, solve CAPTCHAs or bypass access controls, and it refuses private and internal network addresses. This is not legal advice.

Support

Found a page that renders incorrectly, or want another device, format or option? Open an issue on the Actor's Issues tab with the URL and your input.