Website Screenshot Generator
Pricing
from $0.24 / 1,000 capture extracteds
Website Screenshot Generator
Capture bulk website screenshots and downloadable PDFs with full-page, element, mobile, dark-mode, and overlay-hiding controls.
Pricing
from $0.24 / 1,000 capture extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
4
Monthly active users
11 days ago
Last modified
Categories
Share
Capture downloadable screenshots and PDFs from public web pages in bulk, with full-page, element, mobile, dark-mode, overlay-hiding, timing, and proxy controls.
Use it to create visual QA evidence, SEO audit snapshots, client reports, web archives, or browser-rendered page captures that can be downloaded from Apify key-value store records and tracked in a dataset.
At a glance
- Bulk page capture: Save PNG, JPEG, or PDF outputs for one or many public URLs.
- Viewport control: Capture desktop, mobile, tablet, or custom browser dimensions.
- Full-page screenshots: Capture the visible viewport or the full scrollable page.
- Element screenshots: Use a CSS selector to capture only the first matching visible element.
- Cleaner captures: Hide cookie banners, ads, sticky headers, and other matching elements before capture.
- Rendering controls: Wait for client-rendered elements, choose light or dark mode, and tune JPEG quality.
- Automation-ready records: Save output keys, public API record URLs, status codes, dimensions, page titles, and errors.
- Failure-safe batches: Preserve completed captures and write a
RUN_SUMMARYbefore the run time budget expires.
Ready-to-run examples
Open an example, review the input, and run it as-is or adjust the URLs:
- Full-page website screenshot: Capture a whole public page as a PNG.
- Mobile landing page screenshots: Use a mobile viewport for responsive QA.
- CSS selector element screenshot: Capture a specific visible page element.
- Web page to PDF capture: Save public pages as PDF files.
- Bulk URL screenshot capture: Capture several URLs in one run.
What can it do?
Website Screenshot Generator launches a browser, visits each public URL, waits for your chosen page-load milestone, saves a screenshot or PDF to the default key-value store, and writes one dataset row per requested URL.
- Capture images: Save viewport or full-page PNG/JPEG screenshots.
- Capture PDFs: Render pages to A4 PDF with backgrounds.
- Capture elements: Save screenshots for a selector such as
h1,.hero, ormain. - Wait for rendering: Choose
domcontentloaded,load, ornetworkidle, then add a small delay for late widgets. - Wait for content: Require a CSS selector to become visible before taking the capture.
- Remove overlays: Hide selected cookie banners, ads, or sticky elements without modifying the source website.
- Track failures: Error rows include the URL, final URL when known, dimensions, format, timestamp, and error message.
Common workflows
- Visual regression baselines: Capture public pages before and after releases or redesigns.
- SEO audit evidence: Save screenshots of landing pages, search templates, public forms, or documentation pages.
- Client deliverables: Generate PNG/JPEG screenshots or PDF snapshots for reports.
- Content monitoring: Schedule captures and compare page appearance over time.
- Agent visual context: Pair screenshots with extracted page text for QA, research, and RAG review workflows.
What data do you get?
The actor saves screenshots/PDFs in the default key-value store and writes a dataset row for each requested URL.
| Field | Description |
|---|---|
url | Requested public URL |
finalUrl | Final browser URL after redirects |
statusCode | HTTP response status code when available |
title | Browser page title |
screenshotKey | Key-value store key for PNG/JPEG captures |
screenshotUrl | API URL for the saved screenshot record |
pdfKey | Key-value store key for PDF captures |
pdfUrl | Direct API URL for the saved PDF record |
width | Capture width in pixels |
height | Capture height in pixels |
fullPageHeight | Measured document height for full-page image requests |
truncated | Whether a full-page image exceeded maxFullPageHeight and was safely clipped |
format | Output format: png, jpeg, or pdf |
capturedAt | ISO timestamp for the capture attempt |
error | Error message when capture failed |
Pricing
This Actor uses pay-per-event pricing. A run is charged once for startup and once for each screenshot or PDF that is successfully saved. Failed capture attempts are not charged as successful captures.
| Charge | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Run start, once per run | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
| 1 successful capture | $0.0004688 | $0.00040765 | $0.00031797 | $0.00024459 | $0.00016306 | $0.00011414 |
| 1,000 successful captures | $0.4688 | $0.40765 | $0.31797 | $0.24459 | $0.16306 | $0.11414 |
Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| Page URLs | startUrls | Required public HTTP/HTTPS pages to capture. | [{"url":"https://example.com"}] |
| Screenshot type | screenshotType | Capture viewport or fullPage images. Ignored for PDF output. | fullPage |
| Output format | outputFormat | Choose png, jpeg, or pdf. | png |
| Viewport | viewport | Set browser width, height, device scale, and mobile mode. | {"width":1366,"height":768,"isMobile":false} |
| Wait until | waitUntil | Choose page load milestone before capture. | load |
| Extra delay in milliseconds | delayMs | Wait after load for animations or late-rendered widgets. | 1000 |
| Element selector | selector | Capture only the first matching visible element for image output. | main |
| Wait for selector | waitForSelector | Wait until client-rendered content becomes visible. | .results |
| Hide elements | hideSelectors | Hide matching overlays before capture. | [".cookie-banner",".sticky-ad"] |
| JPEG quality | jpegQuality | Set JPEG quality from 1 to 100. | 85 |
| Color scheme | colorScheme | Emulate light, dark, or no-preference. | dark |
| Maximum full-page height | maxFullPageHeight | Cap tall screenshots and report truncation instead of risking oversized-image failures. | 20000 |
| Timeout per page | captureTimeoutSecs | Bound each navigation and capture attempt. | 60 |
| Retries per page | maxRetries | Retry transient proxy, navigation, and rendering failures. | 2 |
| Capture time budget | runTimeSecs | Stop starting new work early enough to save partial results and a summary. | 570 |
| Maximum concurrent pages | maxConcurrency | Control browser pages captured in parallel. | 2 |
| Proxy configuration | proxyConfiguration | Apify Proxy settings. Datacenter proxy is used by default because direct browser egress is unavailable in the cloud runtime. | {"useApifyProxy":true} |
Example input
{"startUrls": [{ "url": "https://example.com" },{ "url": "https://docs.apify.com" }],"screenshotType": "fullPage","outputFormat": "png","viewport": {"width": 1366,"height": 768,"deviceScaleFactor": 1,"isMobile": false},"waitUntil": "load","delayMs": 1000,"hideSelectors": [".cookie-banner"],"maxFullPageHeight": 20000,"captureTimeoutSecs": 60,"maxRetries": 2,"maxConcurrency": 2,"proxyConfiguration": {"useApifyProxy": true}}
Example output
{"url": "https://example.com/","finalUrl": "https://example.com/","statusCode": 200,"title": "Example Domain","screenshotKey": "0001-example-com.png","screenshotUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/0001-example-com.png","pdfKey": null,"pdfUrl": null,"width": 1366,"height": 768,"fullPageHeight": 768,"truncated": false,"format": "png","capturedAt": "2026-07-03T10:00:00.000Z","error": null}
Tips for reliable captures
- Start with one URL: Confirm the site renders correctly before adding a large list.
- Use
loadfirst: Switch tonetworkidleonly when the page needs extra network quiet time. - Add a small delay: Use
delayMsfor animations, cookie banners, or client-rendered content. - Prefer a selector for app content:
waitForSelectoris more predictable than a long fixed delay. - Hide known overlays: Add their CSS selectors to
hideSelectors; the Actor does not try to guess consent choices. - Keep concurrency modest: Lower
maxConcurrencyfor very long pages, PDFs, or memory-heavy sites. - Use the default proxy: Cloud captures use Apify Proxy because direct browser egress can be rejected by the runtime. Country and proxy-group choices remain configurable.
- Check the key-value store: Screenshot and PDF files are stored there; the dataset keeps their keys and URLs.
- Check
RUN_SUMMARY: It reports requested, successful, failed, and time-budget-stopped counts for automation.
Limits and practical notes
- The actor captures public HTTP/HTTPS pages.
- Private, loopback, link-local, and reserved network destinations are rejected, including redirects and browser subrequests.
- Private, login-gated, paywalled, or bot-blocked pages may fail or show limited content.
- CSS selector captures require the target element to be visible within the timeout.
- PDF output ignores
screenshotTypeandselector. - Full-page image captures taller than
maxFullPageHeightare clipped and returntruncated: true; this prevents browser failures on effectively unbounded pages. - A batch can finish with partial results when individual pages fail or the capture time budget is reached. The Actor fails only when no page was captured successfully.
- Some sites render different content by country, cookie state, viewport, or bot detection.
API usage
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~website-screenshot-generator/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"startUrls":[{"url":"https://example.com"}],"screenshotType":"fullPage","outputFormat":"png"}'
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/website-screenshot-generator').call({startUrls: [{ url: 'https://example.com' }],screenshotType: 'fullPage',outputFormat: 'png'});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("fetch_cat/website-screenshot-generator").call(run_input={"startUrls": [{"url": "https://example.com"}],"screenshotType": "fullPage","outputFormat": "png",})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
MCP and AI agents
Use this actor from MCP-compatible tools through Apify MCP Server.
MCP URL:
https://mcp.apify.com/?tools=fetch_cat/website-screenshot-generator
Claude CLI:
$claude mcp add --transport http apify 'https://mcp.apify.com/?tools=fetch_cat/website-screenshot-generator'
MCP client configuration:
{"mcpServers": {"apify": {"type": "http","url": "https://mcp.apify.com/?tools=fetch_cat/website-screenshot-generator"}}}
Example prompts:
- "Capture full-page screenshots for these public landing pages."
- "Save a PDF snapshot of this documentation page."
- "Capture the hero section from this URL using a CSS selector."
FAQ
Are the image and PDF files downloadable?
Yes. Each successful row includes screenshotUrl or pdfUrl, and the file also appears in the run's key-value store.
Can it capture mobile and dark-mode pages?
Yes. Set a mobile viewport and isMobile: true; use colorScheme: "dark" for sites that honor the preferred color scheme.
Are failed pages charged as successful captures?
No. The capture event is charged only when the output file and its dataset row are saved successfully. The one-time run-start charge still applies.
Why was a full-page image truncated?
The page exceeded maxFullPageHeight. The row reports the measured fullPageHeight and returns truncated: true so automation can identify the clipped image.
Can cookie banners always be removed automatically?
No universal method can reliably remove every consent interface. Add the site's known CSS selectors to hideSelectors for a deterministic capture.
Legality and responsible use
This actor captures publicly accessible web pages.
Use screenshots and PDFs responsibly, follow the target website's terms, Apify's terms, and applicable laws, and do not use the actor to bypass access controls.
Related actors
Explore related actors from the same Apify account:
- Website Content Crawler Lite
- Web Page to Markdown Extractor
- Website Contact Finder
- Google News Scraper
- Bing SERP & Search Results Scraper
Support
If a URL produces an error row, start with a single page, use waitUntil: "load", add a small delayMs, and inspect statusCode, finalUrl, and error.
For a reproducible support report, include the run ID or run URL, the exact input JSON, the expected output, the actual output the Actor returned, and one reproducible public URL when it is safe to share. Do not include passwords, session cookies, private URLs, or other secrets.
Privacy and data handling
This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses the inputs you provide and the public records needed to produce the documented dataset to produce the output dataset and sends requests to the website URLs you provide; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.
