Website Screenshot Generator avatar

Website Screenshot Generator

Pricing

from $1.20 / 1,000 screenshots

Go to Apify Store
Website Screenshot Generator

Website Screenshot Generator

Generate full-page or viewport screenshots of websites in PNG or JPEG format. Fast, reliable screenshots with customizable viewport size, wait time, and element hiding.

Pricing

from $1.20 / 1,000 screenshots

Rating

0.0

(0)

Developer

Murat Uzun

Murat Uzun

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

14 days ago

Last modified

Share

What is Website Screenshot Generator?

Website Screenshot Generator is a powerful API for taking full-page or viewport-sized screenshots of websites in PNG or JPEG format. Built with Playwright and Node.js, it runs reliably on the Apify platform and handles dynamic content rendering, JavaScript execution, and CSS transformations. Perfect for web scraping projects, SEO audits, visual regression testing, and archiving web content.

What data does Website Screenshot Generator extract?

For each screenshot captured, the actor returns:

FieldTypeDescription
urlStringThe original URL that was requested
finalUrlStringThe final URL after any redirects
screenshotUrlStringPublic URL of the screenshot in the key-value store
widthIntegerWidth of the screenshot in pixels
heightIntegerHeight of the screenshot in pixels
bytesIntegerSize of the screenshot file in bytes
formatStringFormat of the screenshot (png or jpeg)
scrapedAtStringISO 8601 timestamp when the screenshot was taken

How to use Website Screenshot Generator

  1. Prepare your input — Choose URLs to screenshot, select format (PNG/JPEG), viewport size, and any elements to hide
  2. Run the actor — Start a run with your configuration
  3. Download screenshots — Access images via the provided URLs in the default dataset
  4. Handle errors — Failed URLs are not charged and never appear in the dataset; they are listed with the reason in the run's ERRORS key-value record

Example input

{
"urls": [
"https://example.com",
"https://github.com",
"https://news.ycombinator.com"
],
"fullPage": true,
"format": "png",
"viewportWidth": 1280,
"viewportHeight": 800,
"waitMs": 1000,
"hideSelectors": [".modal", "#cookiebanner"]
}

Example output

{
"url": "https://example.com",
"finalUrl": "https://example.com/",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/xyz/records/example-com-abc123ef.png",
"width": 1280,
"height": 5432,
"bytes": 285643,
"format": "png",
"scrapedAt": "2026-09-28T12:34:56.789Z"
}

Input parameters

URLs

urls (array, required) — Array of website URLs to screenshot

  • Type: Array of strings
  • Default: ["https://example.com"]
  • Example: ["https://example.com", "https://github.com"]
  • Aliases: Also accepts url (single string), startUrls (array of objects with url property)

Screenshot options

fullPage (boolean) — Capture entire page height instead of just the viewport

  • Type: Boolean
  • Default: false
  • Note: Full page screenshots are clipped at 20,000 px to avoid extremely large files

format (string) — Output image format

  • Type: Enum: png, jpeg
  • Default: png

quality (integer) — JPEG compression quality (only for JPEG format)

  • Type: Integer between 1-100
  • Default: 80

Viewport options

viewportWidth (integer) — Browser viewport width in pixels

  • Type: Integer between 320-3840
  • Default: 1280

viewportHeight (integer) — Browser viewport height in pixels

  • Type: Integer between 240-2160
  • Default: 800

Timing options

waitUntil (string) — Page load event to wait for before taking screenshot

  • Type: Enum: load, domcontentloaded, networkidle
  • Default: load
  • Values:
    • load — Wait for page load event (fastest)
    • domcontentloaded — Wait for DOM to be parsed (useful for static content)
    • networkidle — Wait for network activity to settle (most reliable for dynamic content)

waitMs (integer) — Additional time to wait after page load event

  • Type: Integer between 0-30000 (milliseconds)
  • Default: 1000
  • Use case: Allow time for JavaScript animations or deferred content loading

Advanced options

hideSelectors (array) — CSS selectors to hide before taking screenshot

  • Type: Array of strings
  • Default: []
  • Example: [".modal", "#cookiebanner", ".cookie-consent"]
  • Use case: Hide cookie banners, modals, or other overlays to get a clean screenshot

Pricing

Website Screenshot Generator charges $0.002 per screenshot. This includes:

  • One screenshot per charged event
  • Full-page rendering with JavaScript execution
  • Viewport and device emulation
  • CSS manipulation and element hiding

Note: Runs on 2 GB memory (Chrome rendering) cost 2 apify-actor-start events in addition to the screenshot charges. Default input {} costs 2 start events + 1 screenshot = 3 events total at $0.002/screenshot.

Website Screenshot Generator vs. alternatives

FeatureWebsite ScreenshotHeadless BrowserAPI Screenshot Service
Speed3-8s per screenshot5-15s setup + per screenshot2-5s (no control)
JavaScript Rendering✓ Full support✓ Full support✓ Usually supported
Viewport Control✓ Customizable✓ Customizable✗ Limited
JPEG Quality✓ 1-100✓ Configurable✗ Fixed
Hide Elements✓ CSS-based✓ JavaScript-based✗ Not available
Batch Processing✓ 10+ URLs/run✗ Single use✗ Per-screenshot cost
Cost per Screenshot$0.002~$0.001 (1GB) + setup$0.01-0.05
Login Pages✗ No auth support✗ No auth support✗ No auth support

Using Website Screenshot Generator with AI agents and MCP

The Website Screenshot Generator is discoverable and callable via the Apify MCP server for Claude and other AI agents. When called by an agent:

  • The actor accepts flexible input: url, urls, startUrls, targetUrls, or websites all map to the canonical urls field
  • Default input {} succeeds with 1 screenshot of https://example.com
  • Screenshots are stored as public URLs in the key-value store, making them accessible to downstream agents or workflows

MCP example (for agents)

// An agent can call this actor with minimal input
const actor = await client.actor('webdatatools~website-screenshot');
const run = await actor.call({
url: 'https://example.com',
format: 'jpeg',
quality: 90
});
const { defaultDatasetId } = run;
const items = await apifyClient.dataset(defaultDatasetId).listItems();
console.log(items[0].screenshotUrl); // Use the screenshot

FAQ

Q: Can I screenshot pages behind login walls? A: No. The actor takes screenshots as an anonymous user. Sites that require login will return a login page or challenge page.

Q: Does this tool bypass paywalls or bot protection? A: No. Sites with bot walls (Cloudflare, DataDome, AWS WAF) may render a challenge page or block the request. There is no proxy or residential IP option; screenshots are taken directly from the Apify datacenter.

Q: Is this legal? A: Screenshots of publicly accessible web pages for personal use, archival, or testing are generally legal. Always respect the site's terms of service and robots.txt.

Technical

Q: Why is my screenshot blank or showing an error? A: Common causes:

  • The site detects bot activity and blocks the request
  • The site requires login
  • The site uses aggressive anti-bot measures
  • The page takes longer than 60 seconds to load

Try increasing waitMs or switching waitUntil to networkidle.

Q: How do I hide multiple elements? A: Pass multiple selectors in hideSelectors:

{
"urls": ["https://example.com"],
"hideSelectors": [".cookiebanner", "#modal", "[role='complementary']"]
}

Q: What is the maximum screenshot height? A: Full-page screenshots are clipped at 20,000 pixels to prevent extremely large files. Taller pages are cut off at this limit.

Q: Can I use this with n8n, Make, or Zapier? A: Yes, via the Apify integration in each platform. Set the input parameters in the actor configuration and map the dataset output.

Integrations

Q: How do I use this with a workflow tool? A: Website Screenshot Generator works with any tool that supports Apify actors:

  • n8n: Add an "Apify" node, select "website-screenshot", and configure the input
  • Make: Add the Apify module and set the actor input
  • Zapier: Use a Zapier task to call the Apify API with actor ID webdatatools~website-screenshot

All tools receive the dataset rows in the output, including the screenshotUrl.

Part of the webdatatools web-intelligence suite — every Actor is pay-per-event, reads public data without a login, and returns one clean row per entity:

Browse the whole suite at webdatatools, or call ten of these Actors straight from Claude, Cursor or Cline with the webdatatools MCP server.

Website & domain intelligence

Content for AI, LLMs and RAG

Search, video and social

Leads, jobs and company data

Developer, app and research data

Support

For issues, feature requests, or feedback: