Website Screenshot avatar

Website Screenshot

Pricing

Pay per event

Go to Apify Store
Website Screenshot

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

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

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.

FieldTypeDescription
urlstringThe original URL that was captured
screenshotKeystringKey-Value Store key (e.g., screenshot-0)
screenshotUrlstringDirect download URL for the screenshot image
viewportWidthnumberBrowser viewport width in pixels
viewportHeightnumberBrowser viewport height in pixels
formatstringImage format used (png or jpeg)
scrapedAtstringISO 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.

EventCost
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 caseURLsCost
Screenshot a single page1$0.013
Capture 10 competitor landing pages10$0.085
Daily monitoring of 50 pages50$0.405
Weekly audit of 100 product pages100$0.805
Full site screenshot for 500 URLs500$4.005
Monthly batch of 1,000 pages1,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

  1. Go to the Website Screenshot input page.
  2. Enter one or more URLs in the URLs field.
  3. Choose your Viewport Width and Viewport Height (default: 1280x720).
  4. Toggle Full Page if you want to capture the entire scrollable page.
  5. Select Image Format — PNG for lossless quality, JPEG for smaller files.
  6. (Optional) Add Hide Selectors like #cookie-banner or .popup-overlay to remove unwanted elements.
  7. (Optional) Set a Delay in milliseconds if the page has animations that need time to finish.
  8. Click Start and wait for the run to complete.
  9. Download your screenshots from the Key-Value Store tab, or use the screenshotUrl links from the dataset output.

Input parameters

ParameterTypeDefaultDescription
urlsarrayrequiredList of website URLs to capture
maxUrlsinteger100Maximum number of URLs to process (1-1,000)
viewportWidthinteger1280Browser viewport width in pixels (320-3,840)
viewportHeightinteger720Browser viewport height in pixels (200-2,160)
fullPagebooleanfalseCapture entire scrollable page instead of just the viewport
formatstring"png"Output image format: png or jpeg
qualityinteger80JPEG compression quality (1-100). Ignored for PNG
waitUntilstring"load"Page load event to wait for: load, domcontentloaded, or networkidle
delayinteger0Milliseconds to wait after page load before capturing (0-30,000)
hideSelectorsarray[]CSS selectors of elements to hide before capture
proxyobjectnoneProxy 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-popup to the hideSelectors field to get clean screenshots
  • 📐 Use fullPage for long pages — enable the fullPage option 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 networkidle for heavy pages — the networkidle wait 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 maxUrls to 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 ApifyClient
client = 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().items
for 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.

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.txt by 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 networkidle to 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.