Website Screenshot Generator
codemaster devops · @codemasterdevops
Capture full-page or viewport PNG screenshots from a list of URLs. Export page URLs and image links for visual QA, monitoring, and archives.

About
What does Website Screenshot Generator do?
Website Screenshot Generator captures PNG images of web pages from a list of URLs. Use it to document landing pages, collect visual QA evidence, or archive a set of pages with a consistent viewport.
What website screenshot data can you extract?
Each successful capture saves a PNG in the run's key-value store and adds a dataset row with these fields.
urlis the final page URL after redirects.screenshotUrlis the authenticated Bytewells download URL for the PNG record. In local runs the field is null.screenshotKeyidentifies the PNG in the run's key-value store.
How to use Website Screenshot Generator
- Add URLs to the List of URLs field. For API calls, pass
urlsas URL strings or objects with aurlfield. The legacy singleurlinput is also supported. - Set the viewport and choose full-page or viewport-only capture. Full-page capture is enabled by default.
- Run the Actor. Open the dataset to inspect the metadata, then use the screenshot link or the key-value store to retrieve the PNG.
Example input
{
"urls": [{"url": "https://example.com/"}],
"waitUntil": "load",
"viewportWidth": 1280,
"viewportHeight": 720,
"fullPage": false
}
Example dataset row
{
"url": "https://example.com/",
"screenshotUrl": "https://bytewells.com/api/v2/key-value-stores/STORE_ID/records/screenshot-65e2b3069d6a6834661d3976e381f17c?disableRedirect=true",
"screenshotKey": "screenshot-65e2b3069d6a6834661d3976e381f17c"
}
Capture options
viewportWidthsupports 100 to 3,840 pixels.viewportHeightsupports 100 to 4,320 pixels. The default viewport is 1,280 × 1,080.waitUntilsupportsload,domcontentloaded,networkidle2, andnetworkidle0. Usedelayfor extra rendering time in milliseconds.scrollToBottomcan help trigger lazy-loaded content. SetdelayAfterScrollingor enablewaitUntilNetworkIdleAfterScrollwith a timeout.selectorsToHideaccepts CSS selectors such as#cookie-banner, .newsletter-popup.
Exports and limitations
Export the dataset as JSON or CSV for URL and screenshot metadata. Download PNG files separately from key-value storage. Bytewells serves the images as binary downloads. Use a .png extension when saving them. The Actor captures what its browser can reach and render. Login walls, blocking, and dynamic content can change the result. Repeated URLs may be deduplicated. A batch can return fewer rows when pages fail, so compare the dataset with the input and check the run log.
FAQ
- What does the Actor capture?
- It captures PNG screenshots of web pages. Each successful capture produces a row with the final page URL, screenshot download URL, and storage key.
- Can I capture multiple URLs in one run?
- Yes. Add them to urls as strings or objects with a url field. Distinct pages on the same domain get separate screenshot keys.
- Can I capture only the visible part of the page?
- Yes. Set fullPage to false and use viewportWidth and viewportHeight to control the image dimensions.
- Can I use a narrow viewport for responsive QA?
- Yes. Set viewportWidth and viewportHeight to the dimensions you want to inspect.
- Can I wait for JavaScript or lazy-loaded content?
- Yes. Choose a waitUntil mode, add a delay, or enable scrollToBottom with a post-scroll delay or network-idle wait.
- Can I hide cookie banners or pop-ups?
- Yes. Enter their CSS selectors in selectorsToHide to hide matching elements before capture.
- Where do I download screenshots?
- Open the run key-value store and find the record by screenshotKey, or request screenshotUrl with Bytewells authentication. Save the file with a .png extension.
- Why are there fewer dataset rows than input URLs?
- Each successful capture writes one row. Duplicate requests may be deduplicated, and failed captures can reduce the count. Check the run log.
- Do I need a proxy or a screenshot API key?
- The default configuration uses a direct browser connection and requires no third-party screenshot API key. Proxy use is optional.
Input
Preview of the input form. Rent the Actor to fill it in and start runs from the console.
Fields
urlsList of URLs you want to take screenshots of.
waitUntilControl's when will the browser take a screenshot
delayMilliseconds to wait before taking a screenshot, from 0 to 3600000.
viewportWidthHow wide should the website's viewport be
viewportHeightHow tall should the website's viewport be
scrollToBottomShould the browser scroll to the bottom of the page before taking a screenshot
fullPageEnable to capture the full page height. Disable to capture only the visible viewport (above the fold).
delayAfterScrollingSpecify the delay (in milliseconds) after scrolling to the bottom of the page before taking the screenshot. This option is only used if 'Wait for Network Idle After Scrolling' is not enabled.
waitUntilNetworkIdleAfterScrollChoose whether to wait for the network to become idle after scrolling to the bottom of the page before taking a screenshot. If enabled, this option overrides the 'Delay After Scrolling' option.
waitUntilNetworkIdleAfterScrollTimeoutSpecify the maximum wait time (in milliseconds) for the network to become idle after scrolling to the bottom of the page before taking the screenshot, this option is used to make sure handler doesn't get stuck for some pages. This option is only used if 'Wait for Network Idle After Scrolling' is enabled.
proxySet the proxy configuration of the scraper
selectorsToHideList of selectors to hide before taking a screenshot
API
Bytewells speaks the Apify API. Existing integrations keep working: point apify-client at https://bytewells.com/api and use your Bytewells API token (Console → Settings → API access). The Actor ID is codemasterdevops/screenshot-url (or codemasterdevops~screenshot-url in URLs).
JavaScript · apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.BYTEWELLS_TOKEN,
baseUrl: 'https://bytewells.com/api',
});
const input = {
"urls": [
{
"url": "https://example.com/"
}
],
"waitUntil": "load",
"delay": 0,
"viewportWidth": 1280,
"viewportHeight": 1080,
"scrollToBottom": false,
"fullPage": true,
"delayAfterScrolling": 2500,
"waitUntilNetworkIdleAfterScroll": false,
"waitUntilNetworkIdleAfterScrollTimeout": 30000,
"proxy": {
"useApifyProxy": false
}
};
const run = await client.actor('codemasterdevops/screenshot-url').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python · apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["BYTEWELLS_TOKEN"], api_url="https://bytewells.com/api")
run_input = {
"urls": [
{
"url": "https://example.com/"
}
],
"waitUntil": "load",
"delay": 0,
"viewportWidth": 1280,
"viewportHeight": 1080,
"scrollToBottom": False,
"fullPage": True,
"delayAfterScrolling": 2500,
"waitUntilNetworkIdleAfterScroll": False,
"waitUntilNetworkIdleAfterScrollTimeout": 30000,
"proxy": {
"useApifyProxy": False
}
}
run = client.actor("codemasterdevops/screenshot-url").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)HTTP · curl
curl -X POST "https://bytewells.com/api/v2/acts/codemasterdevops~screenshot-url/runs" \
-H "Authorization: Bearer $BYTEWELLS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls":[{"url":"https://example.com/"}],"waitUntil":"load","delay":0,"viewportWidth":1280,"viewportHeight":1080,"scrollToBottom":false,"fullPage":true,"delayAfterScrolling":2500,"waitUntilNetworkIdleAfterScroll":false,"waitUntilNetworkIdleAfterScrollTimeout":30000,"proxy":{"useApifyProxy":false}}'Runs are billed as compute from your credit balance. Paid Actors need an active rental or trial; otherwise the API answers 402 rental-required.
Related
More Actors from the same publisher.

Best Buy Products Scraper
codemaster devops · @codemasterdevops
Extract Best Buy product names, SKUs, available prices, images, and US reviews for catalog research and price tracking.
E-commerceAutomationDeveloper tools$19.99/mo3-day free trial
Shopify Products Scraper
codemaster devops · @codemasterdevops
Export public Shopify prices, SKUs, stock status, options, and images in one row per variant. Compare catalogs across stores.
E-commerceAutomationDeveloper toolsUsage-based
Bing Scraper - Search Results & SERP Data
codemaster devops · @codemasterdevops
Scrape Bing search results, titles, links, and snippets. Run multiple queries with market, language, and page controls for SEO and competitor research.
SEO toolsMarketingDeveloper toolsUsage-based
Google Play Reviews Scraper - App Ratings & Feedback
codemaster devops · @codemasterdevops
Extract public Google Play app reviews, ratings, dates, helpful votes, and available developer replies for app research and competitor analysis.
MarketingSEO toolsDeveloper tools$19.99/mo3-day free trial
Google Trending Now Scraper – Trending Searches by Country
codemaster devops · @codemasterdevops
Get current Google trending searches, approximate search traffic, and news links. Monitor up to 10 countries per run without a Google API key.
SEO toolsMarketingAutomationUsage-based
Pinterest Scraper – Extract Profiles & Pin Data
codemaster devops · @codemasterdevops
Scrape public Pinterest profiles and pins. Extract image URLs, descriptions, board details, source links, and available engagement stats.
Social mediaMarketingE-commerce$19.99/mo3-day free trial