Website Screenshot API
Pricing
from $1.20 / 1,000 screenshot captureds
Website Screenshot API
Website Screenshot — Full Pages, Elements, HTML & PDF Prints: `screenshot-captured` previous/requested $0.0015; `pdf-rendered` previous/requested $0.003; `browser-started` requested $0.001 (only if active); active Apify record sets fees; usage included; start extra; failed results uncharged.
Pricing
from $1.20 / 1,000 screenshot captureds
Rating
0.0
(0)
Developer
Logan Parker
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Features
Share
Website screenshot captures permitted public pages or supplied HTML as PNG, JPEG, WebP or PDF, with full-page, viewport, element and clip options, device presets and dark mode. AI agents can call and pay through Apify MCP.
The active Apify pricing record determines your bill; for the previous/requested schedules, screenshot-captured previous/requested $0.0015; pdf-rendered previous/requested $0.003; browser-started requested $0.001 (only if active); usage is included and failed results are free.
Example result
Example record for the minimal input under How to use it, as this Actor returned it in its deploy check on 2026-10-16 (the signature on outputUrl, a read grant for that one file, is shortened to … here):
{"url": "https://docs.apify.com/platform/actors/publishing/monetize","finalUrl": "https://docs.apify.com/actors/publishing/monetize","ok": true,"status": 200,"title": "Monetize Actors | Platform | Apify Documentation","format": "png","width": 1280,"height": 4010,"key": "screenshot-000-f7f775a538.png","outputUrl": "https://api.apify.com/v2/key-value-stores/kAhMa5nfRVExhhgNl/records/screenshot-000-f7f775a538.png?signature=…","warnings": ["blocked_subresources"]}
How to use it
Start a run in Apify Console, by API or from an agent with an input like this one — it is the input Apify runs every day to test this Actor:
{"urls": ["https://docs.apify.com/platform/actors/publishing/monetize"], "format": "png"}
Start with the minimal JSON example above, then adjust the fields in the table below. Read the Example result and Output fields sections for the returned record, Errors for failure codes, and Events and prices for result events and the separate platform start.
| Field | Type | Required | Default | Meaning |
|---|---|---|---|---|
urls | array of strings | one of | — | Page URLs, 1–50 per run. |
html | string | one of | — | Raw HTML to render instead of URLs (≤ 2 MB). |
format | enum png · jpeg · webp · pdf | no | png | pdf prints the page. |
quality | integer | no | 85 | JPEG and WebP quality, 1–100. |
omitBackground | boolean | no | false | PNG and WebP: transparent where the page sets no background. |
fullPage | boolean | no | true | Capture the whole scroll height. |
device | enum desktop · desktop-hd · desktop-1440 · laptop · square · tablet · ipad-pro · mobile · iphone · iphone-se · android | no | desktop | Viewport preset: 1280×800, 1920×1080, 1440×900, 1366×768, 1080×1080; mobile-type 820×1180, 1024×1366, 390×844, 393×852, 375×667, 412×915. |
width | integer | no | — | Custom viewport width, 240–3,840 CSS pixels, over the preset's. |
height | integer | no | — | Custom viewport height, 240–4,320 CSS pixels, over the preset's. |
deviceScaleFactor | integer | no | 1 | 1, 2 or 3: retina-style images with 2× or 3× the pixels. |
selector | string | no | — | Capture only this element. |
clip | object | no | — | Capture only this rectangle of the page: {"x": 0, "y": 0, "width": 800, "height": 600} in page pixels. Not with selector or pdf. |
hideSelectors | array of strings | no | — | Up to 20 CSS selectors hidden in the capture at your request (for example a chat widget). |
waitForSelector | string | no | — | Wait for this element before capture (≤ 15 s). |
delayMs | integer | no | 0 | Extra wait, ≤ 10,000. |
waitUntil | enum ready · load · networkidle | no | ready | ready: the document, its fonts and half a second without requests, at most 5 s; load or networkidle wait for that first, at most 15 s more. |
darkMode | boolean | no | false | Emulate a dark colour scheme. |
blockAds | boolean | no | true | Do not load ad, tracker and analytics hosts (see Sources and terms); false loads everything. |
blockCookieBanners | boolean | no | false | Do not load consent-management platforms, so their cookie banners are not drawn; nothing is accepted on your behalf. |
blockImages | boolean | no | false | Do not load images. |
locale | string | no | — | Browser language, for example de-DE. |
timezone | string | no | — | IANA time zone, for example Europe/Berlin. |
Give urls or html, not both. Every limit above is enforced by the input schema and again in code. Images are captured at a device scale factor of 1 unless you set deviceScaleFactor, so a desktop image is 1,280 pixels wide.
Events and prices
The active Apify pricing record determines your bill; each schedule below is conditional on that exact record being active. A pending record does not authorise its charges. Before submission, while pending, and after activation, use the actual active record, not the requested calendar, to determine the bill.
Requested activation: 2026-11-20T00:00:00Z. This is a request until confirmed by the record; the record supplies the actual effective instant.
Previous schedule — only if that record is active
apify-actor-start: FREE $0.00005, BRONZE $0.00005, SILVER $0.00005, GOLD $0.00005, PLATINUM $0.00005, DIAMOND $0.00005; screenshot-captured: FREE $0.0015, BRONZE $0.0015, SILVER $0.00135, GOLD $0.0012, PLATINUM $0.0012, DIAMOND $0.0012; pdf-rendered: FREE $0.003, BRONZE $0.003, SILVER $0.0027, GOLD $0.0024, PLATINUM $0.0024, DIAMOND $0.0024.
- 1 screenshot in a run: 1 × 0.0015 + 0 + 0.00005 = $0.00155.
- 10 screenshots in a run: 10 × 0.0015 + 0 + 0.00005 = $0.01505, or $0.001505 each.
- Hypothetical 100-capture comparison (the input limit is 50): 100 × 0.0015 + 0 + 0.00005 = $0.15005, or $0.0015005 each.
For this schedule only, against an Actor at $0.00089 per screenshot plus usage at 4 GB and $0.20 per compute unit, this schedule is cheaper at more than 2.9700 seconds for one screenshot, 2.7675 seconds per screenshot for 10, or 2.7473 seconds per screenshot for 100 (hypothetical; the input limit is 50).
Requested schedule — only if that record is active
| Event | Title | Charged when | FREE / BRONZE | SILVER | GOLD / PLATINUM / DIAMOND |
|---|---|---|---|---|---|
screenshot-captured | Screenshot captured | One image captured. | $0.0015 | $0.00135 | $0.0012 |
pdf-rendered | Page printed to PDF | One page printed to PDF; charged instead of screenshot-captured. | $0.003 | $0.0027 | $0.0024 |
browser-started | Browser started (once per run) | Once per run, with the run's first successful capture: starting the browser on Apify's servers. Not charged when no capture succeeds. | $0.001 | $0.0009 | $0.0008 |
- 1 screenshot in a run: 1 × 0.0015 + 0.001 + 0.00005 = $0.00255.
- 10 screenshots in a run: 10 × 0.0015 + 0.001 + 0.00005 = $0.01605, or $0.001605 each.
- Hypothetical 100-capture comparison (the input limit is 50): 100 × 0.0015 + 0.001 + 0.00005 = $0.15105, or $0.0015105 each.
For this schedule only, against an Actor at $0.00089 per screenshot plus usage at 4 GB and $0.20 per compute unit, this schedule is cheaper at more than 7.4701 seconds for one screenshot, 3.2175 seconds per screenshot for 10, or 2.7923 seconds per screenshot for 100 (hypothetical; the input limit is 50).
Platform event in the requested schedule: apify-actor-start: FREE $0.00005, BRONZE $0.00005, SILVER $0.00005, GOLD $0.00005, PLATINUM $0.00005, DIAMOND $0.00005.
The requested start at default memory is (1 event, $0.00005, at the default 512 MB).
Worked event subtotal, requested schedule at FREE: if 10 screenshot-captured events are charged, 10 × $0.0015 = $0.015 for that event alone. All other charged events and the platform start event add their listed fees; this subtotal is not a run total. The configured maximum-charge floor is $0.01. Platform usage is included; failed results are uncharged.
Call it from an agent
Through Apify's MCP server (https://mcp.apify.com), tool call-actor:
{"actor": "hermeskd/website-screenshot", "input": {"urls": ["https://docs.apify.com/platform/actors/publishing/monetize"], "format": "png"}, "callOptions": {"maxTotalChargeUsd": 0.05, "timeout": 600}, "waitSecs": 30}
The call returns the run's status and its defaultDatasetId. Read the records with get-dataset-items:
{"datasetId": "<defaultDatasetId from the call>", "limit": 50}
Each record's outputUrl is the image or PDF itself (also readable with get-key-value-store-record and the record's key). As a dedicated tool, add https://mcp.apify.com?tools=hermeskd/website-screenshot to your MCP client. maxTotalChargeUsd caps what the run can charge; when it is reached the remaining inputs come back as charge_limit_reached records and are not charged.
Output fields
One record per input; the file is stored in the run's default key-value store.
| Field | Meaning |
|---|---|
url | Input URL or html:. |
finalUrl | The page's URL after redirects; html: for raw HTML. |
ok | Success flag. |
status | HTTP status. |
title | The page's title. |
format | png, jpeg, webp or pdf. |
width | Image width in pixels; null for pdf. |
height | Image height in pixels; null for pdf. |
pages | Pages in the PDF print (pdf only). |
key | Record key. |
outputUrl | API record URL. |
warnings | height_capped when a full page taller than 16,384 px (16,383 px in WebP, the format's limit) was cut to that height; blocked_subresources when the fetch policy refused something the page asked for (a frame or resource on a deny-listed host, a private address or a robots-disallowed path, a prefetch hint), which was not loaded; ads_blocked when ad, tracker or analytics hosts were not loaded (blockAds); consent_blocked when a consent-banner platform was not loaded (blockCookieBanners); images_blocked when images were not loaded (blockImages). |
error | {code, message}. |
Limits and run time
- 1–50 URLs per run, or one HTML document up to 2 MB.
- Full-page captures stop at 16,384 px of height, 16,383 px in WebP (the format's limit); warning
height_capped. - Navigation waits up to 30 seconds for the page's own document. The capture is then taken once the page's fonts have loaded and its network has gone quiet (no request starting or finishing for half a second; a connection that merely stays open does not hold the capture), and never more than 5 seconds after the document: the page's
loadevent is not waited for, and requests still in flight are left unfinished — so content a page draws later than that (a late ad, a chat bubble, an analytics widget) can be missing; to wait for a specific element usewaitForSelector. With the desktop device the page's own timers are paused from the moment of capture (afterwaitForSelectoranddelayMs), so the image and thetitleshow the page at the same instant.waitForSelectorwaits up to 15 seconds;delayMsadds up to 10 seconds. At most 2 page loads a second go to one host. A host's name is looked up once per run and given 10 seconds; each of its addresses is given 10 seconds to connect, 30 in all; a request past those limits fails like any other failed request. - Default run memory 512 MB (from 512 to 4,096 MB): pages are captured one at a time at the default, one per 1,024 MB of run memory when a caller raises it (at most three at once); records keep the input order. Select at least 1,024 MB for large full-page captures; the larger benchmark pages retain that allocation. The lower default is measured for a typical documentation-page call.
- Typical run time: a few seconds per page after the browser starts. The default run timeout is 600 seconds.
deviceScaleFactormultiplies the pixels: the 16,384-px height cap applies to the image, so a retina full page is cut at 8,192 or 5,461 CSS pixels of the page.
Errors
Errors are records with ok: false and error.code; none is charged.
error.code | Meaning |
|---|---|
download_failed | Navigation failed. |
http_error | Non-2xx status. |
selector_not_found | selector or waitForSelector absent, or not valid CSS. |
robots_disallowed | robots.txt forbids it. |
blocked_host | Deny-listed host, or a private or local address; or a redirect to a host on a blocking list (the message names the switch that allows it). |
login_required | Sign-in wall; not attempted. |
timeout | Not finished within the run's time budget. |
internal_error | Unexpected failure. |
charge_limit_reached | The run reached its maximum total charge before this input; it was not processed. |
invalid_input | The run input passed the input schema but cannot be used (for example both urls and html, or neither); the message names the field. One record per input given, or one with url: null when none was given; nothing is processed. |
The run fails only when every input failed with an Actor-side code (internal_error, timeout), so a broken Actor is visible. Every other run succeeds — including one where nothing was captured because of the caller's own inputs (bad URL, robots, deny-list, not found, invalid input, the charge limit), or where those and Actor-side failures are mixed.
Sources and terms
Public pages the caller names, under the Hermes fetch policy. Process only pages you have the right to capture. robots.txt is obeyed for the user-agent HermesBot (and *): with urls, for the page and every frame in it, on every redirect hop and on any later navigation, before the browser requests it; with html, every URL in the caller's HTML is one the caller names, so every request the page makes — documents, frames, scripts, styles, images, fonts, data — is checked. A page whose own document is refused, at load or later, ends as robots_disallowed or blocked_host and is not charged; a refused frame or resource is left out and the record carries blocked_subresources. Popup windows, target=_blank links and forms never open a second page; prefetch and prerender hints are removed from caller HTML. Platforms whose terms forbid automated access, and people-search sites, are on a deny-list: they are refused as pages and are not loaded as embedded resources. Private and local addresses are refused for every request the browser makes, after DNS and on every redirect. The browser keeps its own user-agent string with HermesBot/1.0 (+https://apify.com/hermeskd) appended. No login, cookies, credentials, CAPTCHA solving, evasion or proxies are used.
Blocking is request blocking only, at the same guard that applies the fetch policy: a request to a listed host is refused before any connection is made, and the page itself is never edited, so a capture shows what the site sends a browser that does not load those hosts. The site of every URL you give is never blocked. Ads and trackers (blockAds, on by default): HaGeZi's DNS Blocklists (the hagezi/dns-blocklists project on GitHub), Multi LIGHT, version 2026.1027.0945.32 (72,304 domains; "blocks ads, trackers, metrics, telemetry, and some badware"), bundled unmodified under the GNU General Public License v3.0 with its licence text beside it in the image; a domain on it is blocked with its subdomains. Cookie banners (blockCookieBanners): the hosts of 14 consent-management platforms, among them OneTrust, Cookiebot, Usercentrics, Sourcepoint, Didomi and Quantcast Choice; Hermes never clicks "accept". hideSelectors is the one option that changes the page, and only as you ask.
Not affiliated
This Actor is not affiliated with Apify's own screenshot Actors, with Google (Chromium), with HaGeZi or the consent platforms named above, or with any site it renders. Chromium and Playwright are used under their open-source licences.
Related Hermes Actors
- AI Crawler Checker API — check declared robots.txt permissions for six AI crawlers at URL paths.
- Article Extraction API — an article's clean text, title and publish date, without the rest of the page.
- Career Site Job Search — Verified Greenhouse & Lever Boards — search open jobs in the Hermes directory of Greenhouse and Lever boards, each confirmed live.
- Speech to Text API — speech to text with SRT and VTT subtitles.
- Video Converter API — audio and video conversion: MP4 to MP3, trim, GIF.
- Broken Link Checker API — broken links, 404s and redirects on a site.
- Company ATS Finder — Which Hiring System & Job Board It Uses — which hiring system and job board a company uses.
- SEC Filings API — Read recent company financial filing metadata from the official SEC JSON API
- DOI Lookup API — crossref doi metadata.
- CVE Lookup API — look up NVD CVE dates, status, numeric CVSS scores and severity.
- JSON Deduplication API — json dataset cleaner.
- DNS Lookup API — DNS records and SPF, DKIM and DMARC checks.
- DOCX to Markdown API — Word, Excel, PowerPoint and other office files to Markdown.
- Domain Availability API — whether domain names are available, from registry RDAP.
- USGS Earthquake API — Read numeric USGS earthquake metadata for known event identifiers.
- ECB Exchange Rates API — Read latest ECB daily currency reference rates and calculated cross pairs.
- Bulk File Downloader API — files and images from URLs, saved with a public link each.
- GitHub Repo Stats API — Read numeric metrics for known public GitHub repositories.
- Greenhouse Job Board Scraper — Open Jobs, Live, Any Company — every open job on a company's Greenhouse board.
- Hacker News API — read numeric Hacker News story scores, timestamps and comment counts by ID.
- HTTP GET Request API — public http get.
- HTTP Security Headers Checker API — Check seven declared HTTP security header families without returning raw values.
- Background Removal API — Remove image backgrounds with the small U2NetP model and return transparent PNG pixels as base64
- Image Converter API — image format converter.
- Image Metadata Remover API — GPS location, camera serial numbers and other private metadata removed from photos, losslessly.
- Image to Text API — OCR: the text in images.
- Image Upscaler API — image upscaling 2x or 4x, and photo restoration.
- Lever Jobs Scraper — Postings from Any Lever Site, US & EU — every published job on a company's Lever site, global or EU.
- Lighthouse API — Lighthouse scores and Core Web Vitals.
- npm Package Metadata API — read latest npm package versions, license tokens and dependency counts.
- Website Change Detection API — what changed on a page since the last check.
- PDF to Markdown API — PDF to Markdown and text, with OCR for scanned pages.
- Public Holidays API — build offline public-holiday calendars for five countries and bounded years.
- Remote Jobs Scraper — Remote OK Listings, Salary Filter, Links — current remote jobs from Remote OK, with salary and listing links.
- Research Paper Search API — Search OpenAlex for work-level paper metadata without authors, affiliations, abstracts or full text
- RSS to JSON API — every item of an RSS, Atom or JSON feed.
- SEO Audit API — an on-page SEO audit: meta tags, schema, headings and links.
- Sitemap Extractor API — the URLs in a site's sitemaps.
- Text to Speech API — Convert short nonpersonal texts to offline formant WAV speech for agents
- Time Zone Converter API — Convert one offset-qualified instant to named IANA time zones using pinned data.
- URL to Markdown API — a public job page as clean Markdown where the site allows it (deny-listed job sites are refused).
- Extract Video Frames API — frames, thumbnails and scenes from a video.
- Website Color Palette API — Extract declared website CSS color literals and counts from public HTML and bounded linked stylesheets
- Favicon Extractor API — declared website icons, theme colors and manifest links.
- Website Technology Detection API — the technologies a website runs, detected live.
- Website Crawler API — bounded whole-site Markdown with robots and crawl-delay enforced
Changelog
- 1.0 (2026-10-27) — twelve new options: custom viewport
widthandheight,deviceScaleFactor(retina), eight more device presets,quality,omitBackground,clip,hideSelectors,blockImages,blockCookieBanners,localeandtimezone, andwaitUntil. Default changed: ads and trackers are now blocked (blockAds, on unless you set it false), which also makes captures faster. Proposed charge:browser-started, $0.001 once per run with its first successful capture; as checked on 2026-10-28, it is not active or scheduled in the public pricing history. The per-screenshot and per-PDF prices are unchanged. - 1.0 (2026-10-26) — store listing rewritten for the people and agents searching for this job: title, description, search-engine title and description, categories, and the README in the order a searcher reads it (what it does, a real result, how to use it, prices, the agent call);
screenshot-capturedprice cut from $0.002 to $0.0015. - 1.0 (2026-10-16) — input the Actor cannot use is answered with
invalid_inputrecords and the run succeeds; a run fails only when every input failed on the Actor's side. - 1.0 (2026-10-14) — first release: PNG, JPEG, WebP and PDF; full page, viewport and element capture; three device presets; dark mode.