Screenshot Saver
Pricing
from $5.00 / 1,000 results
Go to Apify Store
Screenshot Saver
Capture screenshots of websites and save to cloud storage. Supports multiple URLs, full page capture, custom viewports, and various output destinations.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Coding Frontned
Maintained by CommunityActor stats
2
Bookmarked
10
Total users
0
Monthly active users
14 days ago
Last modified
Categories
Share
Capture screenshots of websites and save to cloud storage. Supports multiple URLs, full page capture, custom viewports, and various output destinations.
Features
- Direct URL mode — scrape specific pages by providing target URLs
- Cloud-ready — runs on Apify with scheduling, proxy rotation, and webhook support
Use Cases
- Data collection and research automation at scale
- Building structured datasets from public web content
- Monitoring for new listings, updates, or changes over time
- Competitive intelligence and market benchmarking
Input
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
urls | array | — | ✓ | List of URLs to capture screenshots of. |
format | string | png | Screenshot format. PNG is lossless, JPEG is smaller, PDF renders the whole page as a document. Options: png, jpeg, pdf | |
fullPage | boolean | True | Capture the entire scrollable page height, not just the visible viewport. | |
windowWidth | integer | 1920 | Browser window width in pixels. Use 375 for mobile, 768 for tablet, 1920 for desktop. | |
windowHeight | integer | 1080 | Browser window height in pixels. | |
quality | integer | 80 | JPEG compression quality (1–100). Lower = smaller file size. Only applies when format is 'jpeg'. | |
waitUntil | string | networkidle2 | When to consider the page fully loaded before taking the screenshot. Options: domcontentloaded, load, networkidle0, networkidle2 | |
waitForSelector | string | — | CSS selector to wait for before taking the screenshot. Useful for dynamic pages. Example: '#main-content' or '.product-list' | |
waitForTimeout | integer | 0 | Additional time to wait (in milliseconds) after the page loads before taking the screenshot. Useful for animations or lazy-loading content. | |
scrollToBottom | boolean | True | Slowly scroll to the bottom of the page before taking the screenshot, triggering lazy-loaded images and content. | |
clickSelector | string | — | CSS selector of an element to click before taking the screenshot. Useful for closing cookie banners, opening menus, or dismissing popups. Example: '.cookie-accept', '#close-popup' | |
selectorsToHide | string | — | Comma-separated CSS selectors of elements to hide before taking the screenshot. Example: '.cookie-banner, .ads, .newsletter-popup' | |
injectCss | string | — | Custom CSS to inject into the page before taking the screenshot. Example: 'body { background: white; } .banner { display: none; }' | |
injectJs | string | — | Custom JavaScript to execute on the page before taking the screenshot. Example: 'document.querySelector(".sidebar").remove();' | |
captureSelector | string | — | CSS selector of a specific element to screenshot instead of the whole page. Example: '#product-card' or '.data-table'. Overrides fullPage setting. | |
mobileEmulation | string | `` | Emulate a specific mobile device. Overrides windowWidth/windowHeight settings. Options: ``, iPhone 15 Pro, iPhone SE, Pixel 7, iPad Pro, Galaxy S23, Samsung Galaxy Tab S8 | |
deviceScaleFactor | number | 1 | Device pixel ratio for retina/HiDPI screenshots. Use 1 for standard, 2 for retina quality. | |
blockResources | array | [] | Block specific resource types to speed up page loading. Useful for getting a text-only or CSS-only view. | |
username | string | — | Username for HTTP Basic Authentication (for password-protected pages). | |
password | string | — | Password for HTTP Basic Authentication. | |
cookies | array | — | Array of cookies to set before navigating. Use to bypass cookie consent or inject session tokens. Example: [{"name": "session", "value": "abc123", "domain": ".example.com"}] | |
headers | object | — | Additional HTTP headers to send with every request. Example: {"Authorization": "Bearer token123", "X-Custom": "value"} | |
proxy | object | {'useApifyProxy': True} | Proxy settings. Use Apify Proxy for better success rates on protected sites. | |
maxItems | integer | 20 | Maximum number of items to scrape | |
proxyConfiguration | object | Apify Residential | Proxy settings. Residential proxy is strongly recommended |
Output
Each scraped item includes:
| Field | Description |
|---|---|
timestamp | Timestamp |
startUrl | Start url |
url | Direct URL to the listing/item page |
screenshotUrl | Screenshot url |
screenshotKey | Screenshot key |
format | Format |
statusCode | Status code |
pageTitle | Page title |
error | Error |
Sample Output
{"timestamp": "timestamp_value","startUrl": "startUrl_value","url": "https://example.com/item/123","screenshotUrl": "screenshotUrl_value","screenshotKey": "screenshotKey_value","format": "format_value","statusCode": "statusCode_value","pageTitle": "pageTitle_value"}
Notes
- Proxy: Residential proxy is highly recommended — set
proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ["RESIDENTIAL"] } - Rate limits: Keep
maxItemsreasonable per run to avoid IP bans or rate throttling - Scheduling: Use Apify Scheduler to run this actor on a recurring basis for a consistently fresh dataset