Recommended Free Tools
Send one authenticated POST request to Browserless’s /screenshot REST endpoint for each URL, then run those independent requests concurrently within the session limit of your plan. Save each successful binary response to its own file. Browserless documents each REST request as opening an independent browser session, so there is no single multi-URL screenshot request to substitute for the per-page calls.
Set up Browserless requests for multiple URLs
- Get an API token from your Browserless account dashboard. The REST endpoint accepts it as a
tokenquery parameter. - For every page, send a JSON
POSTrequest tohttps://production-sfo.browserless.io/screenshot?token=YOUR_API_TOKEN_HERE. A basic full-page PNG request body is{"url":"https://example.com/","options":{"fullPage":true,"type":"png"}}. - Run one request per URL. Use a distinct output filename for every result.
- Check each HTTP response before writing it as an image. Treat failed requests separately rather than saving an error response as a screenshot.
- Limit the number of simultaneous calls to the concurrency supported by your Browserless plan and job runner. Browserless does not publish one universal maximum in the concurrent sessions guide, so confirm your plan’s limit before submitting a large batch.
Browserless documents parallel shell requests and language patterns such as JavaScript Promise.all and Python ThreadPoolExecutor for this workflow. The examples below use bounded concurrency rather than launching every URL at once.
Run a concurrent batch in Python
Install the dependency with python -m pip install requests. Set your token in an environment variable, provide the target URLs, and adjust MAX_WORKERS to stay within your account’s concurrency allowance.
import os
from concurrent.futures import ThreadPoolExecutor, as_completed
from pathlib import Path
import requests
TOKEN = os.environ["BROWSERLESS_TOKEN"]
ENDPOINT = "https://production-sfo.browserless.io/screenshot"
URLS = [
"https://example.com/",
"https://example.org/",
]
MAX_WORKERS = 2 # Set this within your Browserless plan limit.
def capture(index, url):
response = requests.post(
ENDPOINT,
params={"token": TOKEN},
json={"url": url, "options": {"fullPage": True, "type": "png"}},
timeout=90,
)
response.raise_for_status()
path = Path(f"screenshot-{index}.png")
path.write_bytes(response.content)
return url, path
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as pool:
futures = [pool.submit(capture, i, url) for i, url in enumerate(URLS, start=1)]
for future in as_completed(futures):
try:
url, path = future.result()
print(f"Saved {url} to {path}")
except requests.RequestException as exc:
print(f"Request failed: {exc}")
Successful outputs are written as screenshot-1.png, screenshot-2.png, and so on. A failed request raises an exception and is reported instead of being mistaken for a valid PNG.
#1 Best Overall
- CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
- WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
- A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents
Run a concurrent batch in Node.js
The following uses the built-in fetch API available in current Node.js releases. It bounds concurrency with a small worker pool, checks HTTP status, and writes each response to a unique file.
import { writeFile } from "node:fs/promises";
const token = process.env.BROWSERLESS_TOKEN;
if (!token) throw new Error("Set BROWSERLESS_TOKEN first");
const urls = ["https://example.com/", "https://example.org/"];
const endpoint = "https://production-sfo.browserless.io/screenshot";
const maxWorkers = 2; // Set within your Browserless plan limit.
let next = 0;
async function capture(index, url) {
const requestUrl = new URL(endpoint);
requestUrl.searchParams.set("token", token);
const response = await fetch(requestUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
url,
options: { fullPage: true, type: "png" },
}),
signal: AbortSignal.timeout(90000),
});
if (!response.ok) {
throw new Error(`${url}: HTTP ${response.status} ${await response.text()}`);
}
await writeFile(`screenshot-${index}.png`, Buffer.from(await response.arrayBuffer()));
console.log(`Saved ${url} to screenshot-${index}.png`);
}
async function worker() {
while (next < urls.length) {
const index = next++;
try {
await capture(index + 1, urls[index]);
} catch (error) {
console.error(`Capture failed for ${urls[index]}:`, error);
}
}
}
await Promise.all(
Array.from({ length: Math.min(maxWorkers, urls.length) }, () => worker())
);
Choose image dimensions and capture behavior
Viewport or full page
Use the default viewport capture when the deliverable should show the visible browser area. Set options.fullPage to true to capture the full document. Browserless’s FAQ notes that lazy-loaded content may require scrollPage: true before a full-page capture.
Format, quality, and region
The screenshot API supports image type, quality, clipping, viewport dimensions, and device scale factor. Set these options in each request’s options object according to the output you need. The example uses PNG; choose another supported type when that better fits your downstream workflow.
Rank #2
- CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
- 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
- SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
- INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
- THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
Capture a selector
If the useful content is a specific element rather than the entire page, use the API’s selector capture support instead of saving a full-page image and cropping afterward. The selector and other capture settings belong to the request’s screenshot options.
When to use a browser connection instead
The REST endpoint is the simpler choice for a direct URL-to-image batch: it returns image bytes without requiring a WebSocket connection. If a page requires interaction or more explicit navigation and wait behavior, connect through Puppeteer, Playwright, or BAP, navigate the page, and then invoke the browser screenshot method. Browser launch configuration also applies to REST calls and can be passed as query parameters or as a URL-encoded JSON launch payload.
Handle failures and batch reliability
- Do not assume every response is an image. Check the HTTP status and handle request exceptions before writing response bytes.
- Keep concurrency bounded. Parallel requests can reduce elapsed batch time when the plan permits them, but each request opens its own browser session. A suitable plan is a prerequisite; the documentation does not state one maximum for all accounts.
- Retry selectively. If your job needs retries, retry failed requests deliberately rather than blindly repeating every successful capture. Use bounded attempts and avoid retrying authentication or request-configuration errors unchanged.
- Keep filenames unique. Derive paths from a stable index or a sanitized identifier so two URLs cannot overwrite the same output.
- Set a timeout appropriate to the pages. Pages that load slowly can exceed a short client timeout; the examples use a 90-second client timeout that you can adapt to your job requirements.
Browserless’s documentation provides no measured performance benchmark for this workflow. Actual batch duration depends on page behavior, account concurrency, and the job runner; sample URL counts in documentation are examples, not speed results.
Rank #3
- Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
- Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
- Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
- In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
- Ultra-thin bezels: Maximize your viewing experience with thin bezels.
Troubleshooting common problems
Authentication or token errors
Verify that the token is present, correctly copied from the Browserless dashboard, and sent as the token query parameter. Do not put the token in the JSON body in place of that parameter.
Responses are not valid image files
Check the response status before saving the body. An HTTP error body is not a PNG, even if your code writes it with a .png extension.
Some URLs fail while others succeed
Report outcomes per URL, as in the examples, so one failed capture does not hide the successful files. Inspect the failing response, correct URL-specific or request-specific issues, and retry only the requests that need another attempt.
Rank #4
- CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
- SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
- MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
- KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
- INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient
Full-page image omits lazy content
Enable scrollPage: true for pages that load content as the visitor scrolls, then capture the full page again.
Large batches stall or exceed capacity
Reduce the worker count and confirm the concurrency allowed by your plan. Browserless documents that plan limits govern simultaneous sessions but does not specify a universal number.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Or skip the browser setup
ScreenshotNeo can return a screenshot or PDF with one GET request. For a full-page WebP screenshot of a URL:
Free tools Windows power users keep installed
One-click scans. No signup required.
Best Value
- 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
- 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
- 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for request options. Before the capture, it accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers say which page verdict and billing status applied. Its MCP server offers take_screenshot, get_page_info, and capture_pdf for AI agents. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots.
Sign up for ScreenshotNeo’s free plan to get 1,000 screenshots a month with no card.
Frequently Asked Questions
Does one Browserless REST request accept a list of URLs?
The documented multi-URL approach is one independent `/screenshot` REST request for each URL.
Can I take full-page screenshots with Browserless?
Yes. Set `options.fullPage` to `true`; pages with lazy-loaded content may also need `scrollPage: true`.
Do I need a WebSocket connection for a basic batch?
No. The REST screenshot endpoint returns image bytes directly; a browser connection is useful when pages need interaction or explicit navigation and wait behavior.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

