Browserless vs Browserbase for AI Agent Webpage Screenshots
Compare Browserless and Browserbase for agent screenshots: capture modes, session state, deployment, debugging, and cost. See when ScreenshotNeo is the simpler fit.
Short answer: Browserless documents a direct REST screenshot endpoint for isolated captures, including full-page and viewport images. Browserbase is presented as managed browser infrastructure organized around sessions and agent workflows. If an agent needs to log in, navigate through several pages, or keep browser state between decisions, compare their session workflows. If the task is simply to capture a page, compare documented capture options, output format, and cost at your expected volume. The available sources do not establish a reliable independent winner for screenshot fidelity, latency, or success rate.
ScreenshotNeo is the screenshot API alternative to try first when you want a single screenshot request without managing browser setup: it removes known consent banners, popups, and chat widgets before capture, bills only clean shots, and its paid plans start at $5 for 3,000 shots. See ScreenshotNeo.
1. What each product is suited to
| Need | Browserless | Browserbase |
|---|---|---|
| One isolated screenshot | Its REST /screenshot endpoint is explicitly documented for this, with full-page or viewport capture and PNG, JPEG, or WebP output. |
Browserbase is session-oriented. The reviewed materials do not establish a specific screenshot endpoint’s format, full-page behavior, or response delivery; verify its current SDK/API documentation before choosing it for this requirement. |
| Several actions before capture | Use its browser connection or MCP browser agent rather than assuming a single REST screenshot request preserves state. MCP sessions are one-shot by default; opt into retention for follow-up calls. | Its published positioning centers on managed browser sessions and agent workflows. Confirm the session and screenshot APIs needed by your implementation. |
| Deployment control | Browserless’s own comparison describes cloud and self-hosted deployment options. This is a vendor-authored comparison; confirm the deployment options available to your plan. | Browserbase presents itself as managed infrastructure. Confirm data residency, retention, and deployment requirements with its current product documentation. |
Browserless’s REST model is one browser launch, one task, and session close per request. That makes it a clear fit for independent captures. For a workflow where an agent must inspect a page, decide what to click, and then capture a later state, use a persistent browser session. Browserbase is built around managed sessions; Browserless offers session and agent paths too. The right comparison depends on the lifecycle your agent actually needs.
2. Compare screenshot output carefully
Do not treat every feature called “screenshot” as interchangeable. Before implementation, pin down these requirements:
- Viewport or full page: Browserless REST supports both. Browserless Agent Run returns a visible-viewport PNG encoded as base64, so it is not the same feature as its full-page REST endpoint.
- Image format: Browserless REST documents PNG, JPEG, and WebP. Browserless Agent Run’s documented output is PNG.
- Delivery: Browserless REST returns binary image data. Agent Run returns a base64-encoded viewport image. Your application must account for the difference.
- Page readiness: Decide whether to wait for navigation, a specific selector, or delayed content. Lazy-loaded images may need scrolling before capture.
- Region: Choose a full page, viewport, selector crop, or fixed clip rectangle.
For Browserbase, verify the current API or SDK’s screenshot format, full-page support, output encoding, and whether capture happens in the same session as prior agent actions. The research reviewed for this comparison does not substantiate those implementation details, so they should not be inferred from the session-based product positioning.
3. A runnable Browserless full-page screenshot
This example calls Browserless’s documented REST endpoint and writes the binary PNG response to a file. Create an API token in your Browserless account and replace the placeholder. The endpoint host can vary by Browserless region/account; use the host shown in your dashboard if it differs.
curl -X POST \
"https://production-sfo.browserless.io/screenshot?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/","options":{"fullPage":true,"type":"png"}}' \
--output screenshot.png
Python version, using requests:
import requests
endpoint = "https://production-sfo.browserless.io/screenshot"
response = requests.post(
endpoint,
params={"token": "YOUR_API_TOKEN"},
headers={"Cache-Control": "no-cache"},
json={
"url": "https://example.com/",
"options": {"fullPage": True, "type": "png"},
},
timeout=90,
)
response.raise_for_status()
with open("screenshot.png", "wb") as image:
image.write(response.content)
Node.js version (Node 18 or later for built-in fetch):
import { writeFile } from "node:fs/promises";
const endpoint = new URL("https://production-sfo.browserless.io/screenshot");
endpoint.searchParams.set("token", "YOUR_API_TOKEN");
const response = await fetch(endpoint, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
},
body: JSON.stringify({
url: "https://example.com/",
options: { fullPage: true, type: "png" },
}),
signal: AbortSignal.timeout(90_000),
});
if (!response.ok) {
throw new Error(`Browserless returned ${response.status}: ${await response.text()}`);
}
await writeFile("screenshot.png", Buffer.from(await response.arrayBuffer()));
These examples produce an image file, not a public URL. Keep the API token on your server; do not expose it in browser-side code or a public repository.
4. Browserless screenshot options and edge cases
The endpoint accepts a URL or inline HTML, plus Puppeteer-style screenshot settings in options. The documented options include:
| Setting | Use | Practical note |
|---|---|---|
fullPage |
Capture the full document instead of the viewport. | Long pages can create very large images. Consider viewport captures or clipping when consumers do not need the entire page. |
type |
Select PNG, JPEG, or WebP output. | Choose a format your downstream image pipeline accepts. JPEG is lossy; PNG is suitable when sharp text or transparency matters. |
quality |
Set lossy image quality where supported. | Quality applies to formats that support it; do not expect it to reduce PNG size. |
clip |
Capture a fixed rectangle using coordinates and dimensions. | Use selector capture when the desired region is an element whose position changes across layouts. |
viewport and device scale factor |
Control page dimensions and pixel density. | Set them explicitly when comparing output across runs. A higher scale factor increases output pixel dimensions and memory use. |
Top-level selector |
Wait for and capture one element by selector. | The endpoint captures the element bounds; make sure the selector is unique and visible. |
Top-level scrollPage |
Scroll before capture to trigger lazy-loaded content. | Combine with full-page capture where the full long page is required. |
gotoOptions |
Customize navigation behavior. | Use a readiness condition appropriate to the page instead of assuming every site settles at the same event. |
rejectResourceTypes, rejectRequestPattern |
Block selected resources or requests. | Blocking images, scripts, or fonts can make the resulting screenshot incomplete. |
bestAttempt |
Continue when asynchronous events fail or time out. | Use when partial output is acceptable, and still inspect the resulting image. |
For inline HTML, send an html field instead of url; the documented API says not to include both in one request. For authenticated pages, custom application state, or multiple interactions, a stateless screenshot request may not be the right abstraction. Evaluate a retained browser session and handle credentials and cookies securely.
5. Browserless MCP and Browserbase session workflows
Browserless offers a Browser Agent MCP tool for navigation and interaction. In MCP server v1.33.0 and later, sessions are one-shot by default. Set keepSessionAlive: true on the first call when the agent will need another call, then pass the returned sessionId on subsequent calls. Close the session when finished; retained sessions have an idle backstop and consume browser time while open. Older versions had different defaults, so check the deployed MCP server version.
Browserbase’s public product material describes creating a managed browser session and connecting an AI model to interpret and act on pages. Its product pages also describe live view, logs, and session replay. Whether those features are available at a particular plan level can change; confirm the current plan and SDK docs. For either provider, document these details in your own integration:
- Where the session is created and how its identifier is passed between agent steps.
- How cookies, local storage, and authentication persist across steps.
- What ends a session, including explicit close, idle expiry, errors, and agent completion.
- How screenshots are returned and stored, including retention and access controls.
- How a failed action is reproduced using logs, live view, or a replay if available.
Browserless Agent Run is a separate workflow from the REST screenshot endpoint and the MCP browser agent. Its documented screenshot is a viewport PNG as base64. Do not select it for a full-page screenshot unless the current API documentation adds that capability.
6. Cost, throughput, and reliability
Cost
Browserbase’s pricing page, accessed for this research on October 3, 2026, listed Free at $0 per month and Developer at $20 per month, with 100 browser hours included and then $0.12 per browser hour. The same page lists other quotas and charges, including proxy usage. These are dated vendor-published figures, not a stable price guarantee; check the current Browserbase pricing page before estimating spend. Browserless pricing depends on plan and usage; check its current pricing page and account-specific unit model rather than extrapolating from another plan or vendor comparison.
Estimate the workload using more than screenshot count. Include session duration, retries, concurrency, proxy traffic, agent/model usage where applicable, and storage or retention. A one-page isolated capture and a multi-step authenticated browsing task have different resource profiles. Calculate a representative month from your own traffic, then leave room for retries and peak concurrency.
Performance and reliability
- Keep the work narrow: capture only the viewport or element required. Full-page images and high pixel density increase transfer size and processing work.
- Wait for a real condition: a selector or known content-ready signal is usually more dependable than an arbitrary long sleep. Dynamic pages may still need a short delay after that condition.
- Reuse state only when needed: persistent sessions support multi-step tasks, but an open session consumes resources. Close it once the workflow ends.
- Retry selectively: retry transient navigation and rate-limit failures with backoff. Do not blindly retry invalid parameters, authorization failures, or deterministic missing selectors.
- Make capture jobs idempotent: store the requested URL, viewport, format, and capture settings with the result so a retry can reproduce the same intended shot.
- Test the target sites: bot defenses, consent flows, personalization, and network timing differ by site. The reviewed sources contain no independent head-to-head measurements for latency, fidelity, uptime, or success rates.
7. Decision guide
- Choose ScreenshotNeo first if you want a website screenshot API with one GET request, clean captures, and no browser infrastructure to configure. Cookie banners, popups, and chat widgets are removed before capture, and bot checks, blank pages, and failed loads are not billed.
- Choose Browserless REST for an isolated capture when its documented full-page/viewport behavior and formats fit, and you want direct control over browser screenshot options.
- Evaluate Browserless MCP/agent or browser sessions when the agent needs to inspect a page, click through it, preserve state, or perform several actions before capture.
- Evaluate Browserbase when managed browser sessions and its agent workflow fit your deployment and observability needs. Validate the screenshot API details against its current SDK/API documentation before relying on a specific format or full-page behavior.
There is no evidence here to support a blanket claim that one of Browserless or Browserbase produces more accurate screenshots or runs faster. Run a like-for-like evaluation on your pages if those qualities determine the decision: use the same URLs, viewport, readiness rule, output format, and retry policy, then inspect failures and results alongside cost.
8. Troubleshooting
| Symptom | Likely cause | What to do |
|---|---|---|
| Saved file contains JSON or an error page instead of an image | The request failed, but the script wrote the response body as though it were image bytes. | Check HTTP status and content type before saving; read the error response and correct token, endpoint, URL, or request body. |
| Unauthorized response | Missing, invalid, or incorrectly scoped Browserless token. | Use the token from the correct account and the endpoint host associated with that account. |
| Screenshot is only the visible area | fullPage was omitted/false, or a viewport-only API was used. |
Set options.fullPage to true on Browserless REST. Agent Run is documented as viewport-only. |
| Lazy images or sections are missing | Content loads only after scrolling into view. | Set top-level scrollPage before full-page capture, and wait for the relevant content to appear. |
| Blank or partially rendered page | Capture occurred before the page-specific content was ready, or scripts/resources failed. | Wait for a meaningful selector or navigation condition; inspect blocked requests and browser logs if available. |
| Selector capture fails | Selector is absent, ambiguous, or appears after the wait window. | Confirm the selector against the live page, make it unique, and wait for the element. Recheck after navigation or responsive layout changes. |
| Multi-step agent loses login or page state | The first Browserless MCP call closed its one-shot session, or later calls did not pass its session ID. | For v1.33.0+, retain on the first call and pass the returned ID on continuation. Check version and close the retained session when done. |
| Timeout or intermittent capture failure | Slow navigation, long-running page scripts, rate limiting, or transient site failure. | Use a suitable navigation condition and bounded timeout; retry transient errors with backoff, not invalid requests. |
| Output size or memory use is unexpectedly high | Full-page capture, large viewport, or high device scale factor. | Reduce capture dimensions or pixel density, capture an element, or choose a compressed supported format. |
| Browserbase screenshot behavior differs from expectation | Implementation assumed a format or full-page capability not confirmed in the reviewed material. | Check the current Browserbase API/SDK docs for exact output and session semantics, then add an integration-level check for the response type. |
9. Or skip the browser setup
ScreenshotNeo takes a screenshot with one GET request. Replace the example URL and provide your API key. See the ScreenshotNeo API documentation for request options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`ScreenshotNeo returned ${res.status}`);
await Bun.write("shot.webp", res);
- Cookie banners, popups, and chat widgets are removed before the shot; each cleanup step can be turned off.
- Bot checks, blank pages, and failed loads are never billed; response headers identify the page verdict and billing status.
- An MCP server lets AI agents use
take_screenshot,get_page_info, andcapture_pdf. - 1,000 screenshots a month are free with no card; paid plans start at $5 for 3,000. Every feature is on every plan.
Start with 1,000 free screenshots a month, no card required.
10. Frequently asked questions
Can Browserless or Browserbase take full-page screenshots?
Browserless’s REST screenshot documentation explicitly supports full-page capture. Browserless Agent Run is viewport-only. The reviewed Browserbase materials do not establish its full-page screenshot behavior, so confirm it in current API documentation.
Does Browserless Agent Run return an image URL?
No. Its documented result is a visible-viewport PNG encoded as base64.
Which one should I use for an agent that logs in?
Compare session persistence, authentication handling, and session lifecycle. Browserless MCP can retain a session across calls when configured; Browserbase is organized around managed sessions. Test your actual login flow and verify the current provider documentation.
Is there an independent performance winner?
No independent head-to-head evidence for screenshot fidelity, speed, reliability, or agent success rate was identified for this comparison. Measure your own representative pages and workload.
