Website Screenshot
Pricing
Pay per event
Website Screenshot
Take screenshots of any website URL using a real Chromium browser. Full-page capture, custom viewport, PNG/JPEG, hide cookie banners with CSS selectors. Pay per screenshot.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Actor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
What does Website Screenshot do?
Website Screenshot captures pixel-perfect screenshots of any website URL using a real Chromium browser. Paste one or hundreds of URLs, choose your viewport size, format, and options — and get downloadable PNG or JPEG images stored in Apify's Key-Value Store with direct download links.
It handles JavaScript-heavy pages, single-page apps, lazy-loaded content, and dynamic rendering — because it runs a full browser, not a simple HTTP fetcher. You can hide cookie banners, popups, and ads with CSS selectors before the screenshot is taken.
Who is Website Screenshot for?
- 📊 Marketers — capture competitor landing pages, ad creatives, and campaign pages at scale for visual audits and competitive analysis
- 🔍 SEO analysts — monitor SERP appearance, check Open Graph previews, and track visual changes across pages
- 🧪 QA teams — automate visual regression testing across browsers and viewport sizes, catch layout bugs before users do
- 💻 Developers — generate thumbnails, preview images, and social cards for web applications
- 📋 Compliance teams — archive website states for regulatory snapshots and legal evidence
- 🏢 Agencies — produce client-facing reports with visual proof of deliverables and site changes
Why use Website Screenshot?
- Real Chromium browser — renders JavaScript, CSS animations, web fonts, and SPAs exactly like a user sees them
- Cookie banner hiding — pass CSS selectors to remove consent dialogs, popups, and overlays before capture
- Full-page screenshots — capture the entire scrollable page, not just the viewport
- PNG or JPEG output — lossless PNG for pixel-perfect quality, JPEG with adjustable compression for smaller files
- Custom viewports — simulate desktop, tablet, or mobile screens from 320px to 3840px wide
- Batch processing — screenshot up to 1,000 URLs in a single run
- Direct download links — every screenshot gets a permanent public URL from the Key-Value Store
- Pay-per-screenshot pricing — no monthly subscription, pay only for what you capture
- API and integrations — trigger via REST API, Node.js, Python, schedule runs, or connect to 5,000+ apps via Zapier and Make
What data do you get?
Each screenshot produces a dataset row with metadata and a direct link to the image file.
| Field | Type | Description |
|---|---|---|
url | string | The original URL that was captured |
screenshotKey | string | Key-Value Store key (e.g., screenshot-0) |
screenshotUrl | string | Direct download URL for the screenshot image |
viewportWidth | number | Browser viewport width in pixels |
viewportHeight | number | Browser viewport height in pixels |
format | string | Image format used (png or jpeg) |
scrapedAt | string | ISO 8601 timestamp of when the screenshot was taken |
The actual screenshot images are stored in the run's Key-Value Store. The screenshotUrl field gives you a direct, publicly accessible link to download each image.
How much does it cost to capture website screenshots?
This Actor uses pay-per-event pricing — you pay only for what you capture. No monthly subscription. All platform costs (compute, proxy, storage) are included in the price.
| Event | Cost |
|---|---|
| Actor start | $0.005 per run |
| Per screenshot | $0.008 per screenshot |
That's $8.00 per 1,000 screenshots plus a one-time $0.005 start fee.
Real-world cost examples:
| Use case | URLs | Cost |
|---|---|---|
| Screenshot a single page | 1 | $0.013 |
| Capture 10 competitor landing pages | 10 | $0.085 |
| Daily monitoring of 50 pages | 50 | $0.405 |
| Weekly audit of 100 product pages | 100 | $0.805 |
| Full site screenshot for 500 URLs | 500 | $4.005 |
| Monthly batch of 1,000 pages | 1,000 | $8.005 |
Cost comparison: Cloud screenshot services like ScreenshotAPI, Urlbox, or Screenshotlayer charge $20-$100+/month for fixed quotas. With Website Screenshot, you pay per use with no minimum commitment.
How to capture website screenshots
- Go to the Website Screenshot input page.
- Enter one or more URLs in the URLs field.
- Choose your Viewport Width and Viewport Height (default: 1280x720).
- Toggle Full Page if you want to capture the entire scrollable page.
- Select Image Format — PNG for lossless quality, JPEG for smaller files.
- (Optional) Add Hide Selectors like
#cookie-banneror.popup-overlayto remove unwanted elements. - (Optional) Set a Delay in milliseconds if the page has animations that need time to finish.
- Click Start and wait for the run to complete.
- Download your screenshots from the Key-Value Store tab, or use the
screenshotUrllinks from the dataset output.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
urls | array | required | List of website URLs to capture |
maxUrls | integer | 100 | Maximum number of URLs to process (1-1,000) |
viewportWidth | integer | 1280 | Browser viewport width in pixels (320-3,840) |
viewportHeight | integer | 720 | Browser viewport height in pixels (200-2,160) |
fullPage | boolean | false | Capture entire scrollable page instead of just the viewport |
format | string | "png" | Output image format: png or jpeg |
quality | integer | 80 | JPEG compression quality (1-100). Ignored for PNG |
waitUntil | string | "load" | Page load event to wait for: load, domcontentloaded, or networkidle |
delay | integer | 0 | Milliseconds to wait after page load before capturing (0-30,000) |
hideSelectors | array | [] | CSS selectors of elements to hide before capture |
proxy | object | none | Proxy configuration (Apify Proxy or custom) |
Output example
{"url": "https://example.com","screenshotKey": "screenshot-0","screenshotUrl": "https://api.apify.com/v2/key-value-stores/abc123/records/screenshot-0","viewportWidth": 1280,"viewportHeight": 720,"format": "png","scrapedAt": "2026-03-22T14:30:00.000Z"}
Each screenshot image is stored in the Key-Value Store and accessible via the screenshotUrl link. You can open this URL in any browser to view or download the image directly.
Tips and best practices
- 🍪 Hide cookie banners — add selectors like
#cookie-consent,.cc-banner,[class*="cookie"], or.gdpr-popupto thehideSelectorsfield to get clean screenshots - 📐 Use fullPage for long pages — enable the
fullPageoption to capture entire landing pages, blog posts, or documentation pages beyond the viewport - 📸 Choose JPEG for smaller files — JPEG screenshots at quality 80 are typically 3-5x smaller than PNG with minimal visual difference, ideal for batch jobs
- ⏱️ Add delay for dynamic content — pages with lazy-loaded images, animations, or AJAX content may need 2,000-5,000ms delay to render fully
- 🌐 Use
networkidlefor heavy pages — thenetworkidlewait option ensures all network requests complete before capture, best for dashboards and data-heavy pages - 📱 Simulate mobile screens — set viewport to 375x812 (iPhone) or 768x1024 (iPad) to capture responsive layouts
- 🔒 Use proxy for geo-restricted content — enable Apify Proxy to capture pages that vary by location or block datacenter IPs
- 📋 Limit URLs with maxUrls — when testing with a large URL list, set
maxUrlsto 5-10 first to validate settings before running the full batch
Integration and workflow ideas
Website Screenshot fits into automated workflows for monitoring and quality assurance:
- 📅 Scheduled visual monitoring — run daily or weekly to capture competitor pages, track design changes, or archive regulatory compliance snapshots
- 🔄 CI/CD visual regression — trigger via API after deployments to capture screenshots and compare against baselines
- 📧 Alerting pipelines — combine with image comparison tools to detect visual regressions and send Slack or email alerts
- 📊 Reporting dashboards — feed screenshot URLs into Google Sheets, Notion, or client reports for visual proof of work
- 🔗 Zapier and Make — connect to 5,000+ apps: save screenshots to Google Drive, attach to Trello cards, post to Slack channels
- 🗂️ Archival workflows — capture website states for legal evidence, compliance audits, or historical record keeping
Use via API
You can trigger Website Screenshot programmatically using the Apify API. Each example captures a screenshot of two URLs with custom viewport settings.
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/website-screenshot').call({urls: ['https://example.com', 'https://news.ycombinator.com'],viewportWidth: 1440,viewportHeight: 900,fullPage: true,format: 'png',});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((item) => {console.log(`${item.url} → ${item.screenshotUrl}`);});
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_API_TOKEN')run = client.actor('automation-lab/website-screenshot').call(run_input={'urls': ['https://example.com', 'https://news.ycombinator.com'],'viewportWidth': 1440,'viewportHeight': 900,'fullPage': True,'format': 'png',})dataset_items = client.dataset(run['defaultDatasetId']).list_items().itemsfor item in dataset_items:print(f"{item['url']} → {item['screenshotUrl']}")
cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~website-screenshot/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://example.com", "https://news.ycombinator.com"],"viewportWidth": 1440,"viewportHeight": 900,"fullPage": true,"format": "png"}'
After the run completes, fetch the dataset results:
$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN"
Use with Claude AI (MCP)
This actor is available as a tool in Claude AI through the Model Context Protocol (MCP). Add it to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com"}}}
Example prompts
- "Take a full-page screenshot of our homepage and our top 3 competitors and show me the results"
- "Capture a mobile screenshot of https://example.com at 375x812 and hide the cookie banner"
- "Screenshot these 20 landing pages at 1440px wide and save them as JPEG"
Learn more in the Apify MCP documentation.
Is it legal to screenshot websites?
Website Screenshot captures publicly visible web pages — the same content any visitor sees in their browser. The actor:
- 🔓 Only accesses publicly available pages — it does not bypass authentication, paywalls, or access controls
- 🤖 Respects
robots.txtby default when proxy is configured - 📸 Creates screenshots the same way a user would with their browser's built-in screenshot feature
- 🏛️ Is commonly used for legitimate purposes like archival, monitoring, competitive analysis, and QA testing
Always ensure your use case complies with the target website's Terms of Service and applicable laws in your jurisdiction. For compliance-sensitive use cases, consult legal counsel.
Frequently asked questions
Can I capture screenshots of pages that require login?
Not currently. Website Screenshot captures publicly visible pages only. It does not support cookie injection or authentication flows. For authenticated pages, consider using a custom Apify actor with login handling.
Why is my screenshot blank or incomplete?
This usually means the page hasn't fully loaded before capture. Try these fixes:
- Set waitUntil to
networkidleto wait for all network requests to finish - Add a delay of 3,000-5,000ms to allow JavaScript rendering to complete
- Check if the page blocks datacenter IPs — enable Apify Proxy to use residential IPs
What's the maximum page size for full-page screenshots?
Chromium limits screenshots to approximately 16,384 pixels in height. Very long pages may be truncated. For extremely long pages, consider splitting the capture into viewport-sized segments.
Can I capture screenshots at Retina/HiDPI resolution?
The actor captures at 1x device pixel ratio by default. To simulate Retina displays, double your viewport dimensions (e.g., use 2560x1440 instead of 1280x720) to get higher-resolution output.
How long are screenshots stored?
Screenshots are stored in the run's Key-Value Store and follow Apify's standard data retention policy. On the free plan, data is retained for 7 days. On paid plans, retention extends to 30 days or more depending on your subscription.
Can I use custom proxies instead of Apify Proxy?
Yes. In the Proxy Configuration field, you can provide custom proxy URLs instead of using Apify Proxy. This is useful for accessing geo-restricted content through specific proxy providers.
What formats can I export the screenshots in?
The actor outputs screenshots in PNG (lossless, larger file size) or JPEG (lossy, smaller file size with adjustable quality). Choose PNG when pixel accuracy matters, JPEG when file size and speed are priorities.
How do I hide multiple elements on a page?
Add multiple CSS selectors to the hideSelectors array. Each selector targets specific elements to remove before capture:
{"hideSelectors": ["#cookie-banner", ".popup-overlay", "[class*='gdpr']", ".sticky-header"]}
The screenshot shows a mobile layout even though I set a desktop viewport. Why?
Some websites use JavaScript-based responsive design that checks the user agent string rather than viewport width. The actor uses Chromium's default desktop user agent, so this is uncommon. If it happens, the site may be detecting the headless browser — try enabling Apify Proxy.
Legality
This actor accesses publicly available data through official or public APIs. API usage is subject to each service's Terms of Service and rate limits. Always review the API provider's usage policies before running at scale.
Related actors
- 🌐 Google Search Scraper — scrape Google search results for any query
- 📱 Instagram Scraper — extract posts, profiles, and hashtag data from Instagram
- 💬 Reddit Scraper — scrape Reddit posts, comments, and subreddit data
- 🏠 Zillow Scraper — extract property listings and details from Zillow