Website Screenshot & PDF - Fixed Price per File
Pricing
from $3.00 / 1,000 screenshot storeds
Website Screenshot & PDF - Fixed Price per File
Bulk website screenshots (PNG/JPEG) and PDFs at a fixed price per file. Full-page or element capture, devices, best-effort cookie handling.
Pricing
from $3.00 / 1,000 screenshot storeds
Rating
0.0
(0)
Developer
Tidyfetch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Website Screenshot & PDF, fixed price per file
Give it a list of URLs and get back a PNG, JPEG or PDF for each one at a flat price per stored file: $3 per 1,000 PNG/JPEG files or $5 per 1,000 PDF files, plus $0.005 per run. A multi-page PDF counts as one file. Platform usage is included, so a screenshot costs the same whether the page loads in 1 second or 40.
It was built around problems that the most-used screenshot Actor on the Store has left open since 2024: sticky headers repeated across a full-page capture, cookie banners covering the content, emoji rendered as boxes, no way to limit the height, no way to capture only part of a page, and usage-based charges for URLs that produced no file. This Actor addresses each of them; cookie-banner handling is best-effort (see Limits). Login, CAPTCHA solving and proxies are not supported.
What you get
For every URL, one file in the run's key-value store and one row in the dataset:
{"url": "https://example.com","key": "0001-example-com.png","downloadUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/0001-example-com.png","format": "png","width": 1280,"height": 4321,"bytes": 183920,"status": "ok","error": null,"durationMs": 2310,"notes": ["cookie-banner:selector:#onetrust-accept-btn-handler", "frozen-elements:2"]}
status is ok, error (that URL failed, including HTTP 4xx/5xx answers; the others continue), skipped-robots (robots.txt disallows the path, or the site's robots.txt could not be fetched) or skipped-budget (your run's maximum charge was reached). Only ok rows are charged, and an ok row always carries a stored file. If the platform's charging call itself fails after the file was stored, the row stays ok with charged: 0 and a chargeError field, so you never lose an output you did not pay for.
How it differs from apify/screenshot-url
- Fixed price per file (see below) instead of paying for platform usage; a slow page costs the same as a fast one.
- Cookie banners are accepted or hidden automatically: OneTrust, Cookiebot, Quantcast, TrustArc, Didomi, Usercentrics, Sourcepoint, Osano, CookieYes, Klaro, iubenda, HubSpot, Complianz, Borlabs, Termly, Axeptio, tarteaucitron, Shopify, Squarespace, Wix, Webflow and generic
#cookie-banner-style markup, plus "Accept all"-style buttons in 15 languages. What cannot be clicked is hidden with CSS. - Sticky and fixed headers appear once, at the top, in full-page captures. Bottom-anchored floating widgets (chat bubbles, cookie bars) are hidden.
- Emoji and CJK text render correctly: the image ships Noto Color Emoji and Noto CJK fonts.
maxHeightPxcaps the document height of full-page PNG/JPEG captures (default 20,000 CSS px) so infinite-scroll pages do not produce a giant image. It does not apply to PDFs orclipSelectorcaptures, and device scaling can make the image taller in real pixels.clipSelectorcaptures a single element (#pricing,main article).- Device emulation (
iPhone 13,Pixel 7,iPad Pro 11, ... any Playwright device name) and dark mode (prefers-color-scheme: dark). - Lazy-loaded images are triggered by scrolling through the page before capture.
- PDF output with paper size, orientation, background printing and screen/print media choice.
respectRobotsTxt(on by default) skips URLs that the site'srobots.txtdisallows forUser-agent: *, without charging. Only the wildcard group is evaluated (the page is fetched with a normal browser user agent). Arobots.txtthat answers 5xx or times out is treated as "disallow everything for now" as RFC 9309 requires; a 404 means "no rules". If the page redirects, every redirect target is checked against its own site'srobots.txtbefore anything is stored; a disallowed target gives askipped-robotsrow and is neither stored nor charged. The browser follows redirects itself, so that target may still receive the one request that revealed it.- HTTP error answers (404, 500, ...) are reported as
error, not stored and not charged. Turn oncaptureErrorPagesif you want the error page captured; those captures are charged like any other output. - One failed URL never fails the run; you get an
errorrow and the rest continue. - Failed or skipped URLs get no per-file charge; the $0.005 run fee applies to every run. Storing and charging are serialised, so the run's maximum charge is a hard cap even with several pages rendering in parallel.
- "Successful" means a file was rendered and stored. The content is not validated: a login screen, a CAPTCHA page or an access notice that answers HTTP 200 is captured and charged like any other page.
Pricing
| Event | Price | When |
|---|---|---|
run-started | $0.005 | once per run |
screenshot | $0.003 | per PNG or JPEG successfully stored |
pdf | $0.005 | per PDF successfully stored |
Examples: 1 PNG = $0.008; 100 full-page PNGs = $0.005 + 100 x $0.003 = $0.305; 1 PDF = $0.010. A run where every URL fails or is skipped costs only the $0.005 run fee. Set a maximum total charge on the run if you want a hard cap; URLs beyond it are reported as skipped-budget.
Prices may be lower on higher Apify plan tiers; the Actor page shows the exact figures for your account.
Input
| Field | Default | Meaning |
|---|---|---|
urls | required | Array of URLs (strings or { "url": ... }). Up to 1,000 per run. |
format | png | png, jpeg or pdf. |
fullPage | true | Whole scrollable page instead of the first viewport. |
maxHeightPx | 20000 | Document height cap in CSS px for full-page PNG/JPEG (200-30,000). Ignored for PDF and clipSelector. |
viewportWidth / viewportHeight | 1280 / 800 | Browser size in CSS px when no device is set. |
device | none | Playwright device name (sets viewport, scale factor, touch, user agent). |
darkMode | false | Emulate prefers-color-scheme: dark. |
clipSelector | none | CSS selector; only the first match is captured. Not for PDF. |
hideCookieBanners | true | Accept or hide consent banners. |
freezeStickyElements | true | Fixed/sticky elements become static; bottom-anchored ones are hidden. |
delayMs | 500 | Extra wait after load (0-30,000). |
waitUntil | load | load, domcontentloaded or networkidle. |
timeoutSecs | 60 | Navigation and screenshot timeout (5-300); the URL is reported as error when exceeded. Rendering may take up to 15 s more; the robots.txt check and storing are outside this limit. |
jpegQuality | 80 | 1-100, JPEG only. |
blockResources | false | Drop video/audio, websockets and analytics/ad/chat hosts; images, CSS, fonts and scripts are kept. |
respectRobotsTxt | true | Skip URLs (and redirect targets) disallowed for User-agent: *, and all URLs of a site whose robots.txt answers 5xx or is unreachable. |
captureErrorPages | false | Capture (and charge) pages that answer HTTP 4xx/5xx instead of reporting them as error. |
scrollForLazyLoad | true | Scroll through the page before a full-page capture. |
maxConcurrency | 2 | Pages rendered in parallel (1-10). |
ignoreHttpsErrors | true | Ignore certificate errors while rendering. The robots.txt check does not ignore them, so with respectRobotsTxt on, a site with an invalid certificate may come back as skipped-robots. |
pdfFormat / pdfLandscape / pdfPrintBackground / pdfEmulateScreenMedia | A4 / false / true / false | PDF only. |
Limits and known behaviour
- Pages that need a login, a CAPTCHA solve or geo-specific proxies are out of scope for this version. There is no proxy option yet.
maxHeightPxis limited to 30,000 px; very tall captures use a lot of memory, so raise the run's memory for many parallel tall pages.- Cookie-banner handling is best-effort. The Actor only presses accept buttons inside a consent banner (a container named after cookies or consent, a dialog whose text is about cookies, or a consent-manager frame), never an "OK" or "I agree" elsewhere on the page. A banner built with an unknown library may remain visible or only be hidden with CSS; send the URL as an issue and it will be added.
- Page content is not checked: login walls, CAPTCHA pages and access notices returned with HTTP 200 are captured and charged.
- Device emulation runs in Chromium even for iPhone/iPad descriptors (Safari-only rendering differences are not reproduced).
- PDF output uses the page's print stylesheet by default; turn on
pdfEmulateScreenMediafor a what-you-see rendering. - The download URL points to the run's key-value store, which follows the platform's data retention for your plan.
Using the result
The downloadUrl in each dataset row returns the file directly (Content-Type is image/png, image/jpeg or application/pdf). In integrations, read the dataset, filter status == "ok" and fetch downloadUrl.
Legal
You are responsible for the URLs you submit. The Actor fetches only the page you give it, does not log in, does not fill forms, and respects robots.txt by default.
About
This Actor was written by an AI coding agent (Claude Code) under human direction and review; a human maintainer reviews issues and the replies to them.
Changelog
See the Changelog tab (CHANGELOG.md).