🔥 Website Screenshot Generator
Pricing
from $3.00 / 1,000 results
🔥 Website Screenshot Generator
[🥇 high-quality 🏆] Website Screenshot generator for full-page, viewport, and element screenshots. Capture websites as PNG, JPEG, WebP, or PDF with mobile emulation, metadata extraction, and batch processing.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
extractmaster01
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Website Screenshot Generator
Capture high-quality screenshots of any website at scale. Generate full-page screenshots, viewport screenshots, or capture a specific page element. Supports desktop and mobile devices, with output in PNG, JPEG, WebP, or PDF.
Perfect for website monitoring, SEO audits, QA testing, competitor tracking, visual regression testing, website archiving, and thumbnail generation.
Why this Actor
Most screenshot tools give you a raw image and stop there. This one delivers results that are actually ready to use:
- Mobile screenshots that look right — sites respond with their actual mobile layout, not a squished desktop version
- PDFs that match what you see in the browser — no layout surprises, no font changes
- Clean images by default — cookie banners, popups, and overlays are handled before capture
- Metadata included in every result — title, description, Open Graph tags, and canonical URL come with each screenshot at no extra step
What you can capture
- Full page — the entire content from top to bottom, including what's below the fold
- Viewport — only what's visible on screen when the page first loads
- Element — a single part of the page by CSS selector: a chart, a hero image, a pricing card
Features
- 11 device presets — iPhone 15 Pro, iPhone 14, iPhone SE, Pixel 7, Samsung Galaxy S23, iPad Pro, iPad Mini, and 4 desktop sizes; or set any custom width and height
- 4 output formats — PNG, JPEG, WebP, and PDF
- Lazy content support — captures images and content that only appear after scrolling
- Smart wait — knows when the page has truly finished loading before capturing
- Carousel and slider support — captures animated sections at their best visible state
- Cookie banner auto-dismiss — covers OneTrust, Didomi, Cookiebot, CookieYes, Quantcast, and more
- Element hiding — remove any element before capture: chat widgets, floating banners, overlays
- Ad and tracker blocking — cleaner screenshots with distractions removed
- Dark mode support — captures the dark version of any site that supports it
- Custom CSS — override any style before the screenshot is taken
- Authenticated pages — pass session cookies to capture logged-in or personalized content
- Custom HTTP headers — add tokens, flags, or any header your target site needs
- Redirect tracking — records both the original URL and the final destination
- Batch processing — up to 1,000 URLs per run with adjustable concurrency
- Retry on failure — automatically retries flaky or slow pages
- Apify Proxy support — for sites that block automated requests
Use cases
Website monitoring — schedule regular runs to detect visual changes, layout breaks, or content updates. Every run creates a timestamped archive you can compare over time.
Competitive intelligence — capture competitor landing pages, pricing pages, and product listings at scale. No manual browsing.
QA and visual testing — verify how your site looks across iPhone, Android, and desktop before every release.
Thumbnail and preview generation — generate website preview images for link cards, OG images, or any product that needs a visual of a URL.
SEO and content audits — get a screenshot and full metadata for hundreds of URLs in a single run.
Compliance and archiving — save visual records of web pages for legal, regulatory, or historical purposes.
Bug reporting — document rendering issues across viewports and send a link, not a description.
Quickstart
- Add one or more URLs to the
urlsfield - Choose a device preset and output format
- Click Start — results appear in the dataset as they complete
Each run produces a public screenshot URL and a metadata row per page. Export as JSON, CSV, or Excel.
Input
| Field | Type | Default | Description |
|---|---|---|---|
urls | URL[] | — | URLs to capture. Required. |
screenshotType | string | fullPage | fullPage, viewport, or element |
format | string | png | png, jpeg, webp, or pdf |
quality | integer | 85 | Quality for JPEG and WebP (1–100). Ignored for PNG and PDF. |
device | string | Desktop 1920x1080 | Device preset. See table below. Use custom for manual dimensions. |
viewportWidth | integer | 1280 | Width in pixels. Only when device is custom. |
viewportHeight | integer | 1080 | Height in pixels. Only when device is custom. |
selector | string | — | CSS selector. Required when screenshotType is element. |
waitUntil | string | load | load, domcontentloaded, networkidle, networkidle0, networkidle2 |
waitForSelector | string | — | Wait for this element to appear before capturing. |
delay | integer | 0 | Extra wait in ms before capture. Max 3,600,000. |
waitForImages | boolean | false | Wait for all images to load. Recommended for carousels and galleries. |
scrollToBottom | boolean | false | Scroll to the bottom before capturing. |
delayAfterScrolling | integer | 2500 | Wait in ms after scrolling. Used when network idle is off. |
waitUntilNetworkIdleAfterScroll | boolean | false | Wait for the page to settle after scrolling instead of a fixed delay. |
waitUntilNetworkIdleAfterScrollTimeout | integer | 30000 | Max ms to wait after scrolling. |
blockCookieBanners | boolean | true | Auto-dismiss cookie banners before capture. |
selectorsToHide | string | — | CSS selectors to hide before capture. e.g. .chat-widget, #cookie-bar |
blockAds | boolean | false | Remove ads and trackers before capturing. |
darkMode | boolean | false | Capture the site in dark mode. |
javascript | boolean | true | Run JavaScript on the page. Disable for faster captures on static sites. |
extractMetadata | boolean | true | Include title, description, OG tags, canonical URL, and language in results. |
customHeaders | object | {} | HTTP headers to send. e.g. {"Authorization": "Bearer TOKEN"} |
cookies | array | [] | Cookies to inject before navigating. Each needs name, value, and domain. |
injectCss | string | — | CSS to apply before capture. |
timeout | integer | 30000 | Page load timeout in ms (5,000–120,000). |
maxRetries | integer | 10 | Retries per failed URL. |
maxConcurrency | integer | 3 | Simultaneous pages. Higher is faster but uses more memory. |
maxItems | integer | — | Stop after this many screenshots. Leave empty for no limit. |
proxyConfiguration | object | — | Apify Proxy or custom proxy URL. |
Device presets
| Preset | Viewport | Mobile | Touch |
|---|---|---|---|
Desktop 1920x1080 | 1920×1080 | — | — |
Desktop 1440x900 | 1440×900 | — | — |
Desktop 1280x800 | 1280×800 | — | — |
Laptop 1366x768 | 1366×768 | — | — |
iPhone 15 Pro | 393×852 | ✓ | ✓ |
iPhone 14 | 390×844 | ✓ | ✓ |
iPhone SE | 375×667 | ✓ | ✓ |
Pixel 7 | 412×915 | ✓ | ✓ |
Samsung Galaxy S23 | 360×780 | ✓ | ✓ |
iPad Pro 12.9 | 1024×1366 | — | ✓ |
iPad Mini | 768×1024 | — | ✓ |
custom | viewportWidth × viewportHeight | — | — |
Output
Each URL produces one dataset row and one file in the Key-Value Store.
| Field | Type | Description |
|---|---|---|
startUrl | string | Original input URL |
url | string | Final URL after redirects |
screenshotUrl | string | Public direct-download link |
screenshotKey | string | Key in the Key-Value Store |
format | string | png, jpeg, webp, or pdf |
screenshotType | string | fullPage, viewport, or element |
viewport | object | { width, height } used for capture |
device | string | Device preset name |
title | string | Page title |
description | string | Meta description |
ogTitle | string | Open Graph title |
ogImage | string | Open Graph image URL |
ogDescription | string | Open Graph description |
canonicalUrl | string | Canonical URL |
language | string | Page language |
timestamp | string | ISO 8601 capture time |
success | boolean | true on success |
error | string | Error message if success is false |
Sample output
{"startUrl": "https://example.com","url": "https://example.com/","screenshotUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/screenshot_example_com_a1b2c3d4.png","screenshotKey": "screenshot_example_com_a1b2c3d4.png","format": "png","screenshotType": "fullPage","viewport": { "width": 1920, "height": 1080 },"device": "Desktop 1920x1080","title": "Example Domain","description": "This domain is for use in illustrative examples.","ogTitle": null,"ogImage": null,"canonicalUrl": "https://example.com/","language": "en","timestamp": "2026-01-15T12:00:00.000Z","success": true}
Tips
JavaScript-heavy sites and SPAs: Use waitUntil: "networkidle" for React, Vue, and Angular apps. The default (load) works for most sites — switch to networkidle only if content is missing after capture.
Lazy-loaded content: Enable scrollToBottom: true. Add waitUntilNetworkIdleAfterScroll: true for the smartest possible wait — no fixed delay needed.
Carousels, sliders, and hero animations: Enable waitForImages: true to make sure every visual element is ready before the screenshot is taken.
Cookie banners not auto-dismissed: Add the banner's CSS selector to selectorsToHide. For example: .cookie-overlay, #consent-modal.
Authenticated pages: Pass session cookies in the cookies field. Get them from your browser's DevTools after logging in (Application → Cookies).
Mobile screenshots: Pick a device preset. The site will respond as if a real phone is visiting — you get the actual mobile layout, not a resized desktop.
Bot detection: Enable Apify Proxy (residential) in proxyConfiguration for sites that block automated visitors.
Large file sizes: Use format: "webp" for the smallest files, or format: "pdf" for printable output.
Cost control: Set maxItems to limit the total screenshots per run. Adjust maxConcurrency based on available memory.
Capturing one section of a page: Use screenshotType: "element" with a selector like #pricing-table or .hero-section.
Pricing
$3.00 per 1,000 successful screenshots.
You are never charged for pages that fail or time out. The Actor stops automatically when it reaches your spending limit in Apify Console.
Limitations
- Sites with aggressive bot protection may require residential proxies
- Very long pages produce large PNG files — use WebP or PDF for those
- Cookie injection works for session-based authentication only; it cannot fill and submit a login form
API usage
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('YOUR_USERNAME/screenshot-url').call({urls: [{ url: 'https://example.com' },{ url: 'https://news.ycombinator.com' },],screenshotType: 'fullPage',format: 'png',device: 'iPhone 15 Pro',blockCookieBanners: true,waitForImages: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].screenshotUrl);
Scheduling
Go to Schedules in the Apify Console, point it at this Actor, and set your cron expression. Every run produces a new timestamped set of screenshots — useful for visual monitoring over time.
Frequently asked questions
Do I get charged if a page fails? No. Only successful screenshots are charged.
What is the difference between fullPage and viewport?
fullPage captures everything from top to bottom. viewport captures only what is visible when the page first loads.
Can I take mobile screenshots? Yes. Choose any mobile preset and the site will respond with its actual mobile layout.
Why does the PDF look exactly like the screenshot? By design. The PDF preserves the visual appearance of the page as captured, not the browser's print version.
How do I hide a cookie banner?
Automatic dismissal is on by default. For anything not covered, add the selector to selectorsToHide.
Can I screenshot a page behind a login?
Yes, using session cookies. Pass them in the cookies field after grabbing them from your browser.
How fast does it run?
With maxConcurrency: 3, three pages run in parallel. Most complete in 10–40 seconds depending on the site.
What happens to screenshots after the run?
They are stored in the run's Key-Value Store. Each dataset row has a screenshotUrl — a direct public link.
Does it work without a proxy? Yes, for most public websites. Enable proxy only if the site blocks automated visitors.
You might also like
If you found this Actor useful, you might also like:
Apify Store Scraper — Extract Actor listings, pricing, ratings, and metadata from the Apify Store. Ideal for market research, competitor tracking, and finding automation opportunities.
Website Contact Scraper — Extract email addresses, phone numbers, and social media links from any website. Great for lead generation and outreach campaigns.
Google Ads Scraper — Collect Google Ads data at scale. See what competitors are bidding on, what creatives they run, and how their ads are structured.
Feedback
Found a bug or want a feature? Open an issue in the Issues tab. We respond within 2 business days.