tidewell/website-screenshot-pdf
tidewell--website-screenshot-pdfThis tool calls the Actor "tidewell/website-screenshot-pdf" and retrieves its output results. Actor description: Returns a public file URL plus page title, HTTP status, size and timings for each screenshot (PNG, JPEG, WebP) or PDF of a URL, taken in Chrome on desktop, tablet or mobile. Full page or viewport, cookie banners rejected, ads blocked, element capture. $2 per 1,000 screenshots; failures are free.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "tidewell--website-screenshot-pdf"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | Optional raw HTML to render as an extra capture (HTML to image / HTML to PDF). Relative links won't resolve; use absolute URLs for images and CSS. | |
| urls | No | Pages to capture, one per line. 'https://' is added when missing. Duplicates are removed. Each URL is captured once per device below. Example values: ["https://apify.com","https://en.wikipedia.org/wiki/Web_scraping"] | |
| format | No | PNG is lossless, JPEG and WebP are smaller (use Quality). PDF renders the page as a printable document (see the PDF section). Example values: "png" | png |
| delayMs | No | Wait this long after everything else, just before the capture. Helps with animations and late widgets. Example values: 500 | |
| devices | No | Capture every URL on each selected device. Desktop 1920x1080, Laptop 1366x768, Tablet (iPad Air) 820x1180 @2x, Mobile (iPhone 15) 393x852 @2x, Android (Pixel 9) 412x915 @2x. 'Custom' uses the viewport width and height below. Each device is one charged capture. Example values: ["desktop","mobile"] | |
| quality | No | 1-100. Ignored for PNG and PDF. Example values: 80 | |
| blockAds | No | Blocks requests to ~150 ad, analytics and tracking networks and collapses common ad slots. Faster captures, cleaner pages. | |
| customJs | No | Runs in the page before the capture, as the body of an async function (await works). Example: document.querySelector('#tab-2').click(); await new Promise(r => setTimeout(r, 500)); | |
| darkMode | No | Emulate prefers-color-scheme: dark. Only sites that support dark mode change. | |
| fullPage | No | Capture the whole scrollable page. Off captures only the visible viewport (above the fold). Example values: true | |
| pdfScale | No | Zoom of the rendered page, 0.1-2. Example values: 1 | |
| selector | No | Capture just the first visible element matching this selector, e.g. '#pricing' or 'main article'. The capture fails (free) if no element matches. Images only. | |
| waitSecs | No | Max seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget. | |
| customCss | No | Injected into the page before the capture, e.g. 'header { position: static !important; }'. | |
| maxHeight | No | Full-page screenshots of endless pages are cut at this height (CSS pixels), with a warning in the row. Example values: 20000 | |
| pdfFormat | No | 'Single long page' puts the whole page on one tall page, exactly as it looks on screen (up to 200 inches). Example values: "A4" | A4 |
| pdfMargin | No | Same margin on all sides, with a unit: px, mm, cm or in, e.g. '10mm' or '0.5in'. 0 for none. Example values: "10mm" | 10mm |
| userAgent | No | Override the device's user agent. Leave empty for a normal Chrome (or iPhone / iPad / Android) user agent. | |
| waitUntil | No | 'Load' suits most sites. 'Network idle' waits until no requests for 500 ms (best for SPAs and charts; capped at 20 s, then captured anyway). 'DOM ready' is fastest. Example values: "load" | load |
| maxRetries | No | Retries for timeouts, connection errors and HTTP 429/5xx. Retries are free. Example values: 1 | |
| pdfLandscape | No | Landscape orientation. | |
| pdfMediaType | No | 'Screen' renders the page as it looks in the browser. 'Print' uses the site's print stylesheet, if it has one. Example values: "screen" | screen |
| hideSelectors | No | Elements to remove before the capture, one selector per line, e.g. '#chat-widget', '.newsletter-popup'. | |
| viewportWidth | No | 200-3840. Default for Custom: 1280. | |
| maxConcurrency | No | How many pages to capture at once. Also limited by memory (about 512 MB per page). Example values: 4 | |
| viewportHeight | No | 200-4320. Default for Custom: 800. For full-page captures this only affects the layout, not the image height. | |
| waitForSelector | No | Wait until an element matching this CSS selector is visible, e.g. '.chart canvas'. If it never appears the capture fails and is not charged. | |
| captureErrorPages | No | By default a page that answers 404, 500, 403 etc. is reported as failed and not charged. Turn on to capture (and pay for) error pages too. | |
| deviceScaleFactor | No | Pixel density, 0.5-4. Leave empty for the device's own (desktop and laptop 1, tablet and phones 2). 3 matches a real iPhone. 2 gives a crisp retina image twice the width. | |
| disableAnimations | No | Stop CSS animations and transitions and ask for reduced motion, so captures are consistent. Example values: true | |
| keyValueStoreName | No | Leave empty to use the run's own store. A named store (e.g. 'site-archive') keeps files beyond the data retention period and collects captures from many runs. | |
| pdfPrintBackground | No | Include background colours and images (as on screen). Example values: true | |
| proxyConfiguration | No | Optional. Use Apify Proxy to capture pages as seen from another country, or when a site blocks datacenter traffic. Example values: {"useApifyProxy":false} | |
| dismissCookieBanners | No | Best effort: clicks 'Reject all' / 'Only necessary' on 25+ consent platforms (OneTrust, Cookiebot, Didomi, Quantcast, Usercentrics, Google, Sourcepoint, TrustArc...) and in 14 languages. Never clicks 'Accept all'. If there is no reject button, the banner is hidden instead. Example values: true | |
| navigationTimeoutSecs | No | Maximum time for the page to load. If the page is usable when it runs out, it is captured anyway with a warning. Example values: 45 | |
| scrollToLoadLazyContent | No | For full-page captures and PDFs, scroll through the page first so lazy-loaded images and sections appear. Example values: true |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tip | No | Advisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key | |
| runId | Yes | Actor run ID | |
| stats | No | Run statistics | |
| status | Yes | Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED | |
| actorId | Yes | Stable Apify Actor ID from the run record | |
| summary | Yes | Past-tense summary of the run state | |
| exitCode | No | Actor process exit code; populated for terminal states (especially FAILED) | |
| nextStep | Yes | One primary follow-up action with identifiers interpolated | |
| storages | Yes | Dataset and key-value store metadata, keyed by alias. "default" is always the primary entry. | |
| actorName | No | "username/actor-name" | |
| startedAt | No | ISO timestamp when the run started | |
| finishedAt | No | ISO timestamp when the run finished (terminal states only) | |
| statusMessage | No | Pass-through from Apify run.statusMessage | |
| apifyConsoleUrl | No | Personalized Apify Console link to the run; present only for Console sessions |