Website Screenshot API: Full Page PNG, JPEG & PDF avatar

Website Screenshot API: Full Page PNG, JPEG & PDF

Pricing

from $4.08 / 1,000 screenshot or pdf delivereds

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

Website Screenshot API: Full Page PNG, JPEG & PDF

Bulk website screenshots and HTML to PDF: full-page PNG, JPEG or PDF, element capture, mobile/retina, wait for selector, cookie banners hidden, page text for LLMs. Direct file links. No API key, no login. MCP-ready for AI agents. Pay per result, errors are free. $4.80 per 1,000 screenshots.

Pricing

from $4.08 / 1,000 screenshot or pdf delivereds

Rating

0.0

(0)

Developer

ABM

ABM

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Price: $4.80 per 1,000 screenshots ($0.0048 per file) + $0.001 per run. You pay only for files actually delivered. Failed pages, timeouts, blocked sites and HTTP error pages are free. A run that produces no file costs nothing.

This Actor captures any public web page, or your own raw HTML, as a PNG, JPEG or PDF with a real Chromium browser. You get full-page or viewport captures, single-element captures, mobile device emulation, wait-for-selector and automatic cookie banner hiding. Send one URL or thousands in one run. No API key, no login, no monthly rental.

Every file is saved in the run's key-value store. The dataset gets one row per file with a direct download link (fileUrl), the page title, the HTTP status and the file size. With extractText on, each row also includes the clean visible text of the page, ready for LLMs and RAG.

What it does

  • PNG, JPEG and PDF: pick one or more formats. The page loads once, and every format comes from that one load.
  • Full-page screenshots: the page is scrolled first so lazy-loaded images appear. Very tall pages are cropped at maxPageHeight.
  • Element capture: elementSelector captures only the matching element, e.g. #pricing.
  • Wait for an element: waitForSelector waits for a chart, a map or app content before capturing.
  • Cookie banners hidden: OneTrust, Cookiebot, Didomi, Usercentrics, Quantcast, Sourcepoint, Complianz, CookieYes and many more are hidden with CSS. Nothing is clicked or accepted. Add your own elements with hideSelectors.
  • HTML to PDF / PNG: paste HTML (html) or send a batch (htmlPages) for invoices, reports, certificates and social cards.
  • Screen & device: custom viewport, retina (2x/3x), dark mode, iPhone/Pixel/iPad emulation.
  • PDF options: paper size, landscape, margins, backgrounds, screen or print CSS, or one long page without page breaks.
  • LLM-ready text (extractText): the visible page text in pageText, free of charge.
  • Scheduled runs (onlyNew): skip pages you already captured in earlier runs, so a growing URL list only costs you for new pages.
  • Reliable: automatic retries on timeouts, network errors and HTTP 429/5xx. One failing page never stops the batch. Failed rows have status: "failed" and a readable errorMessage, and they are free.

How much does it cost?

EventPriceWhen
screenshot$0.0048One file (PNG, JPEG or PDF) saved and listed in the dataset
actor-start$0.001Once per run, charged only with the first delivered file

Examples:

  • 1,000 URLs in PNG = $4.80 + $0.001 = $4.801
  • 1 URL in PNG + PDF = 2 × $0.0048 + $0.001 = $0.0106
  • 100 HTML invoices to PDF = $0.481

Platform usage (compute) is included. Errors and empty runs are free. If you set a maximum cost per run, the Actor stops cleanly when it reaches that limit. It never delivers files beyond your budget.

Input example

{
"urls": ["https://example.com", "https://apify.com"],
"formats": ["png", "pdf"],
"fullPage": true,
"viewportWidth": 1280,
"viewportHeight": 800,
"waitUntil": "load",
"waitForSelector": "",
"delayMs": 1000,
"hideCookieBanners": true,
"pdfFormat": "A4",
"extractText": false,
"onlyNew": false
}

HTML to PDF in batch:

{
"htmlPages": [
{"name": "invoice-001", "html": "<html><body><h1>Invoice #001</h1><p>Total: $120</p></body></html>"},
{"name": "invoice-002", "html": "<html><body><h1>Invoice #002</h1><p>Total: $80</p></body></html>"}
],
"formats": ["pdf"],
"pdfMargin": "15mm"
}

Output example

One dataset item per file:

{
"url": "https://example.com",
"sourceType": "url",
"name": "example.com/",
"status": "success",
"format": "png",
"fullPage": true,
"elementSelector": null,
"device": null,
"viewportWidth": 1280,
"viewportHeight": 800,
"fileKey": "0001-example-com.png",
"fileUrl": "https://api.apify.com/v2/key-value-stores/aBcD1234/records/0001-example-com.png",
"contentType": "image/png",
"fileSizeBytes": 21873,
"finalUrl": "https://example.com/",
"pageTitle": "Example Domain",
"httpStatus": 200,
"capturedAt": "2026-10-15T09:12:44+00:00",
"durationMs": 2310,
"errorMessage": null,
"pageText": "Example Domain\nThis domain is for use in illustrative examples in documents...",
"pageTextLength": 127
}

pageText and pageTextLength are null unless extractText is on.

A failed page (free):

{
"url": "https://example.com/missing",
"status": "failed",
"format": "png",
"fileUrl": null,
"errorMessage": "HTTP 404 returned by the page."
}

Main input fields

FieldTypeDefaultDescription
urlsstring[]–Pages to capture (https:// added if missing)
html / htmlPagesstring / object[]–Raw HTML to render ({name, html} objects for batches)
formatspng | jpeg | pdf []["png"]One file per format per page
fullPagebooleantrueWhole scrollable page or viewport only
elementSelectorstring–Capture only this element (PNG/JPEG)
viewportWidth / viewportHeightinteger1280 / 800Browser size in CSS px
deviceScaleFactor1–31Retina density
devicestringdesktopiPhone 13, iPhone 14 Pro Max, Pixel 7, Galaxy S9+, iPad Mini, iPad Pro 11
colorSchemelight | darklightPreferred color scheme
waitUntildomcontentloaded | load | networkidleloadLoad condition
waitForSelectorstring–Wait until this element is visible
delayMsinteger1000Extra wait before capture
hideCookieBannersbooleantrueHide consent pop-ups with CSS
hideSelectorsstring[]–Extra elements to hide
pdfFormat, pdfLandscape, pdfMargin, pdfPrintBackground, pdfUseScreenMedia, pdfSinglePage–A4, false, 0, true, false, falsePDF layout
maxPageHeightinteger20000Crop limit for full-page captures
captureErrorPagesbooleanfalseAlso capture HTTP 4xx/5xx pages (charged)
navigationTimeoutSecs, maxRetries, maxConcurrencyinteger60, 2, 2Reliability and speed
onlyNewbooleanfalseSkip pages already captured in earlier runs (same format)
extractTextbooleanfalseAdd the visible page text (pageText) for LLMs

Use with AI agents (MCP)

This Actor works as a tool for Claude, Cursor, ChatGPT and other AI agents through the Apify MCP server. An agent sends a list of URLs and gets back JSON rows, each with a direct fileUrl to the image or PDF. With extractText: true, it also gets the page's visible text in pageText, so the agent can read the page and keep a visual record from a single call.

Integrations

  • API: run it with POST https://api.apify.com/v2/acts/<this-actor>/run-sync-get-dataset-items?token=... and get the rows (with file links) in the response.
  • Make, Zapier, n8n: use the Apify app/node, then pass fileUrl to Google Drive, Slack, email or S3.
  • Google Sheets: export the dataset, or schedule a run and sync the rows. fileUrl opens the file directly.
  • Schedules + onlyNew: capture only newly added pages each day, for example new product or article URLs.

Use cases

  • Website monitoring & archiving: daily full-page snapshots of your pages, competitors' pricing pages or landing pages.
  • SEO & marketing reports: captures of landing pages, ads and campaign proof for clients.
  • HTML to PDF: invoices, receipts, reports, certificates and contracts generated from templates.
  • Social images & thumbnails: render an HTML card at 1200×630 and get a PNG.
  • QA & visual regression: desktop, mobile and dark-mode captures of every page of a site.
  • AI agents & RAG: a screenshot plus clean page text in one call.
  • Compliance & legal evidence: timestamped captures with HTTP status and final URL.

FAQ

How do I download the files? Open fileUrl from each dataset row, or open the run's Key-value store tab. Through the API, use GET /v2/key-value-stores/{storeId}/records/{fileKey}.

Are failed pages charged? No. You pay only for files saved and listed with status: "success". The $0.001 run fee is charged with the first delivered file. A run where every page fails costs nothing.

Can I get a PNG and a PDF of the same page? Yes: "formats": ["png", "pdf"]. The page loads once and you pay for 2 files.

How does onlyNew work? Each URL (or HTML document) and format captured successfully is remembered in your named key-value store website-screenshot-pdf-state. Later runs with onlyNew on skip them without loading or charging them. Leave it off when you want a fresh snapshot of the same pages each run. To start over, delete that store.

Does it accept cookie banners or log in? No. Banners are only hidden visually. The Actor never logs in, never solves captchas and never bypasses anti-bot protections. It captures what a regular visitor sees.

A site returns 403 or a captcha page. What can I do? Some sites block automated browsers. The capture is reported as failed and is free. Turn on captureErrorPages if you want an image of the error page anyway (charged).

Images are missing from my full-page capture. Keep scrollToBottom on, increase delayMs, or use waitUntil: "networkidle".

My raw HTML has broken images or styles. Use absolute URLs (https://...) for images, fonts and stylesheets, or inline them (data URIs, <style>).

How long are files kept? Files follow your Apify storage retention. Unnamed run storages are kept according to your plan's data retention. Download or move any files you need to keep.

Limits

  • Public pages only: no login, no captcha solving, no anti-bot bypass, no proxy. Sites that block data-center browsers will fail (for free).
  • Full-page captures are cropped at maxPageHeight (default 20,000 px, max 50,000 px). Infinite-scroll feeds only show what loaded.
  • Single-page PDFs are limited to 19,200 px in height (the Chromium page-size limit).
  • elementSelector applies to PNG/JPEG only. PDFs always contain the whole document.
  • Cookie banners are hidden using a list of known selectors. Uncommon custom banners may remain, so add them with hideSelectors.
  • Rendering uses Chromium, so pages that rely on Safari- or Firefox-specific behavior may look slightly different. Device emulation changes the viewport and user agent, not the engine.
  • pageText is capped at 100,000 characters (pageTextLength gives the full length).
  • fileUrl links work without a token unless your Apify account restricts access to storages. In that case, append ?token=YOUR_TOKEN.