Can an AI agent use Browserless?

As of 6 Oct 2026, an AI agent gets into Browserless on its own and does 100% of the core work.

Level 4 · Runs on its ownAn agent does the core work and can stop paying on its own.
  • Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
  • Access: Sign-up in a browser.
  • Use: 100% of the work.
  • Pay: Payment not reached.
  • Leave: Leaves on its own: Cancels on its own, deletes its account.

To reach L5 · Autonomous: pay without a person.

What the levels mean

Driven 6 Oct 20261 drive so farRules of 15 Oct 2026Claim this page

Written and checked by our agents from this drive's record. How we write.

Who gets in

  • Agents on a serverGet in on their own.
  • Signed agentsThe sign-up page opens.
  • Agents in a person's browserNot measured yet.

Sign-up page checked 12 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from

What an agent can do in Browserless.

On its own

  • Take screenshots and PDFs of any web page
  • Read the fully loaded content of a page, including JavaScript-rendered parts
  • Pull specific pieces of data off a page into structured results
6 more
  • Run its own custom browser scripts on Browserless's servers
  • Fill out and submit web forms automatically
  • Search the web, map a site's pages, and crawl an entire site
  • Use residential proxies by country
  • Run a plain-English browsing task and get a written answer back
  • Check its own account balance, usage, and error logs

What it can't, and why

  • Sign up for an account without using the web sign-up formno automated registration exists, only the dashboard form
  • Get an API key without opening the dashboardkeys are only shown on the account page
  • Pay for a paid plan by itselfno agent payment method; the dashboard's Continue to Checkout did not open a checkout
2 more
  • Cancel or delete the account without the web dashboardno API exists for cancel or delete
  • Keep saved login data across a restarted browser sessioncookies and storage were empty after reconnecting, unlike the docs promised
On its own, in a browser

Can an AI agent sign up for Browserless on its own?

Yes, in a browser, without a human. Web form /signup/email?plan=free: email -> 6-digit OTP -> name/company/ToS. No CAPTCHA met, no card. No signup API, auth.md or device flow.

Official server · 8 of 12 calls worked

Does Browserless have an MCP server, and can an agent connect to it?

Yes. Browserless has an official MCP server. The server is hosted, lists 16 tools and speaks the older 25 Nov 2025 MCP spec.

A new agent can get in on its own: in the drive of 6 Oct 2026, our agent signed up, verified and got its key without a person. Through the MCP server, 8 of our agent's 12 attempts worked.

What the drive found

APIOpenAPIMCP · officialCLISDKllms.txt–Webhooks–Sandbox
On its own, in a browser

How does an AI agent get a Browserless API key?

In the drive of 6 Oct 2026, our agent got its Browserless API key in a browser, without a person. API token only on dashboard home (masked until revealed); no key-create API. MCP OAuth (DCR) also needs a browser login.

On its own, in a browser

Can an AI agent delete its Browserless account?

Yes, in a browser, without a human. Delete Account appears after cancelling; confirmed in web UI; old token then returns 401 Invalid API key. No API/CLI/MCP route.

Not tested in this drive: paying. Every checkpoint, in detail

For the team behind Browserless.

Where agents stop in Browserless today, and the fixes that get them further, highest impact first.

Payment not reached

The fixes, highest impact first

  1. Let agents get an API token headlessStep-by-step guide
  2. Move MCP to the 28 Jul 2026 spec and CIMDStep-by-step guide
  3. Add an agent payment rail for unitsStep-by-step guide
3 more fixes
  1. Fix session state restore on reconnect
  2. Return clear plan-gate errors
  3. Offer cancel and delete via API
  • Claim it free and reply next to the result.
  • A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
  • Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
See the example report
Details

Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.

Already claimed it? Open it in your dashboard.

Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.

Embed the badge on your site

Driven · L4 · Runs on its own badge

Behind the level.

The part scores and the measures behind them.

Part scores and the measures · paid plans

Part scores

Agent-ready setup

  • llms.txt: found
  • OpenAPI: found
  • MCP server: found
  • CLI: found

Not measured in this drive: Holds up, Docs match (part of an Audit).

The measures

  1. Work done100
  2. Reliability82
  3. Crash test–

Needs a paid plan

Not counted in the level. Our drive used free plan.

Needs a paid plan
CapabilityPlan
Record a video of a browser sessionPrototyping

For agents and builders.

The drive as data, every checkpoint and all 53 attempts.

How an agent connects · 5 tips
  • Start with docs.browserless.io/llms.txt; REST APIs with ?token= on production-sfo.browserless.io are the simplest route
  • /scrape fails the whole request (408) when one selector is missing; BQL returns partial data with per-field errors
  • The MCP server needs initialize (2025-11-25) and Mcp-Session-Id; browserless_agent's sessionId is in the prose text
  • Use browserless_logs with the requestId from an error body to debug
  • The dashboard API key field is masked until you click reveal
Every checkpoint, in detail · 9 checkpoints
  1. DocsHeadlessllms.txt (text/markdown) with agent instructions, llms-full.txt, .md pages, Accept: text/markdown negotiation, OpenAPI 3.0.0 at www.browserless.io/swagger.json
  2. Sign upIn a browserWeb form /signup/email?plan=free: email -> 6-digit OTP -> name/company/ToS. No CAPTCHA met, no card. No signup API, auth.md or device flow.
  3. VerifyIn a browserOTP mail arrived in ~1 min (valid 15 min), read headless from our inbox, typed into the web form
  4. KeyIn a browserAPI token only on dashboard home (masked until revealed); no key-create API. MCP OAuth (DCR) also needs a browser login.
  5. First callHeadlessPOST /screenshot?token= 200 image/png
  6. First actionHeadlessPOST /session created a persistent session, connected via Puppeteer, DELETE stop URL removed it
  7. PayNot reachedNo 402/x402/MPP/L402/UCP; paid routes answer 401. Not in x402 Bazaar or mpp.dev. Upgrade page found (/account/upgrade, Prototyping $35/mo); Continue to Checkout did not open a checkout in our agent's browser. No billing API/CLI.
  8. CancelIn a browserFree plan, nothing recurring. Cancel Account is web UI only, behind a 3-question required survey and a confirm step.
  9. DeleteIn a browserDelete Account appears after cancelling; confirmed in web UI; old token then returns 401 Invalid API key. No API/CLI/MCP route.
The attempt log · 53 attempts
Attempt log
CapabilityRouteResultEvidence
MCP discover: POST server/discover 2026-07-28 to https://mcp.browserless.io/mcp unauthenticatedmcpdone ✓401 application/json, WWW-Authenticate: Bearer resource_metadata="https://mcp.browserless.io/.well-known/oauth-protected-resource"; JSON-RPC error -32000 No Browserless API token provided
cards and well-known: Probe server-card, ai-catalog, agent-card, PRM, AS metadata, api-catalog, ucp, auth.md, SKILL.mdapidone ✓mcp.browserless.io/mcp/server-card 404; www /.well-known/ai-catalog.json 404 html; /.well-known/mcp/server-card.json 200 application/json (schema 2025-09, streamable-http + stdio npx @browserless.io/mcp); agent-card.json & agent.json 404; api-catalog 200 application/linkset+json -> swagger.json; mcp PRM 200 {authorization_servers:[https://mcp.browserless.io]}; mcp AS metadata has registration_endpoint (DCR), no client_id_metadata_document_supported, PKCE S256+plain, iss param supported; www AS metadata issuer data.browserless.io/auth/v1 (no device grant); ucp/auth.md/SKILL.md 404
robots/aipref/markdown/openapi: robots.txt Content-Usage, markdown negotiation, llms.txt, OpenAPI versionapidone ✓robots.txt: Content-Signal: search=yes, ai-input=yes, ai-train=no (Cloudflare Content Signals scheme, parses), no aipref Content-Usage line, no Content-Usage header; docs Accept: text/markdown -> content-type text/markdown, vary: Accept-Encoding, Accept; .md URL 200 text/markdown; docs.browserless.io/llms.txt 200 text/markdown (88 KB); www.browserless.io/swagger.json openapi 3.0.0, 87 paths, no x-payment-info
pay step probes: Probe 402 rails, well-knowns, registries, pricingapidone ✓Unauthenticated POST production-sfo /screenshot and /chromium/bql -> 401 text/html (no 402, no PAYMENT-REQUIRED, no WWW-Authenticate Payment); x402./mpp./agents.browserless.io resolve (wildcard) but TLS cert does not match -> no service; /.well-known/ucp 404; swagger.json has no x-payment-info; x402 Bazaar and mpp.dev/api/services: no browserless entries; llms-full.txt has 0 mentions of x402/402/machine payments/Stripe Projects; pricing page: Free $0 (1k units, no credit card per sign-up page), Prototyping $25/mo billed annually, Starter, Scale; Switch plans or cancel anytime
docs: Read llms.txt, markdown docs, OpenAPIapidone ✓docs.browserless.io/llms.txt 200 text/markdown with explicit agent instructions; .md pages; swagger.json 3.0.0
signup: Sign up for free plan headlessnoneblockedNo documented signup API/CLI/agent registration; www /.well-known/oauth-authorization-server lists only authorization_code+refresh_token; sign-up is a web form (/signup/email?plan=free) with email OTP (Supabase-style auth/v1 in JS bundle)
signup: Sign up via web form in browser: email -> 6-digit OTP -> name/company/ToS -> Create my accountbrowserdone ✓Landed on https://www.browserless.io/account/home showing Units 0 / 1k, Free plan, API Key section
verify: Verify email with OTP code from inboxbrowserdone ✓Mail [Action required] Verify your email address from no-reply@browserless.io arrived within ~1 min, 6-digit code, expires in 15 minutes; code accepted in form
credentials: Copy API token from dashboard homebrowserdone ✓account/home API Key field (password input), 49-char token; saved to secrets.env
The first call: POST /screenshot with tokenapidone ✓200 image/png 59156 bytes, PNG 800x600 of example.com (out/shot.png)
screenshot: Screenshot example.comapidone ✓POST /screenshot 200 image/png 59156 bytes; file reports PNG 800x600
pdf: PDF from raw HTMLapidone ✓POST /pdf {html} 200 application/pdf 13089 bytes; PDF 1.4, 1 page
rendered HTML: Rendered HTML of example.comapidone ✓POST /content 200 text/html 2374 bytes, <title>Example Domain</title>
scrape: Extract h1 and links from example.comapifailedPOST /scrape elements [h1,a] -> 408 application/json {error: Timed out waiting for selector "h1" (requestId ...)}
scrape: Extract title and links from example.comapidone ✓200 application/json data[title].results[0].text=Example Domain; data[a] href https://iana.org/help/example-domains (matches /content HTML)
function: Run puppeteer code returning title + links + computed valueapidone ✓POST /function application/javascript -> 200 {data:{title:Example Domain,links:[https://iana.org/help/example-domains],sum:42},type:application/json}; earlier attempt with h1 selector returned 400 text/plain with stack trace and requestId
BQL: BQL goto + textapipartial ✓POST /chromium/bql 200 data.goto {status:200,time:862}; h:null with errors[0] Timeout of 30000ms waiting for DOM selector h1 (path [h])
form fill: BQL: type name, pick radio, check box, submit httpbin.org/forms/post, read echoed formapidone ✓POST /chromium/bql 200; result page <pre> shows form {custname: [redacted], size: medium, topping: cheese}
BQL: BQL multi-step script with type/click/checkbox/textapidone ✓Same /chromium/bql call: each mutation alias returned {time}, text(pre) returned server-echoed form data
search: Search browserless.io docs, 3 resultsapidone ✓POST /search 200 application/json success:true, data.web 3 results with title/url/description/position; unresponsiveEngines lists brave timeout
map: Map URLs of docs.browserless.io (limit 5)apidone ✓POST /map 200 {success:true,links:[docs.browserless.io/search, /, /ai-integrations/agent-browser, ...]} 5 links; example.com returned links:[] (single-page site)
export: Export example.com with resources as zipapidone ✓POST /export includeResources:true 200 application/zip 4537 bytes; unzip: index.html (2372) + s.js (1963)
lighthouse: Lighthouse audit example.comapidone ✓POST /performance 200 application/json 542 KB; categories performance 1, accessibility 0.96, best-practices 1, seo 0.8, agentic-browsing 1
download: Trigger a browser download and get the fileapidone ✓POST /download (code clicks a data: link with download attr) 200 text/plain 25 bytes: AgentDrives download test
connect puppeteer: puppeteer-core connect to wss://production-sfo.browserless.io/chromium, open example.comsdkdone ✓browser.version Chrome/153.0.8010.12; page.title Example Domain
The first action: Create a persistent browser session (POST /session ttl 180000)apidone ✓POST /session 200 {id,connect,cloudEndpointId,ttl,stop,browserQL}; connected via connect URL; DELETE stop&force=true 200 {success:true, message: Session ... was successfully removed}
persistent session: Set localStorage + cookie in session, browser.close, reconnect, read backsdkfailed ✓Two tries: after reconnect to session.connect and goto https://example.com, localStorage.getItem(ad)=null and document.cookie empty (first try used disconnect, second browser.close as in docs)
liveURL: Get a live view URL mid-session via CDP Browserless.liveURLsdkpartialcdp.send(Browserless.liveURL) returned {liveURLId, timeout:30000, liveURL: https://production-sfo.browserless.io/e/...}
MCP version: server/discover with token, then initialize offering 2026-07-28mcpdone ✓server/discover with Bearer token -> 400 JSON-RPC -32000 Bad Request: No valid session ID provided (legacy); initialize -> 200 text/event-stream, mcp-session-id header, protocolVersion 2025-11-25, serverInfo browserless-mcp 1.36.0, capabilities tools/resources/prompts/logging/completions
account: MCP browserless_account billingmcpdone ✓Plan Free (cloud-unit-based), period ends 2026-11-06, Remaining 977, Used 13, Included 1000 - matches dashboard 0/1k at start + our calls
usage: MCP browserless_usage timeframe daymcpdone ✓Used 13 units; Successful 8, Errored 1, peak concurrency 1 - consistent with our REST calls
logs: MCP browserless_logs filtered by requestId of the failed /scrapemcpdone ✓requestId 5bbe9897... returns 5 entries ending target_error/operation_timeout 30690ms Error: Timed out waiting for selector h1, 2 units - same id as the 408 body
active sessions: MCP browserless_sessions action activemcppartialNo browsers are running on this account right now (called when no session was open)
skills: MCP browserless_skill site ebay.commcppartialReturned 2 ebay.com recipes (ebay.com/find-a-product-ef49sf, ebay.com/search-products) with load ids; recipe not loaded yet
agent run: Agent Run: read the link text on example.comapidone ✓POST /agent/run 200 {id:run_9f7d8e54be18,status:pending}; GET /agent/run/{id} after ~13 s status succeeded, data.answer The link text is Learn more., final_url https://example.com/, 4 units - matches /scrape result (a text Learn more)
crawl: Crawl example.com limit 2apidone ✓POST /crawl 200 {success:true,id:crawl_75778f778945,url}; GET /crawl/{id} status completed total 1, data[0] metadata title Example Domain statusCode 200, contentUrl presigned S3 JSON
unblock: POST /unblock content:trueapipartial200 {browserWSEndpoint:null, content:<html>...Example Domain}
captcha solve: BQL solve(type: recaptcha) on Google public reCAPTCHA demo pageapidone ✓POST /chromium/bql 200 data.solve {found:true, solved:true, time:20821}
proxy: BQL with proxy=residential&proxyCountry=us, read ipinfo.io/jsonapidone ✓200; ipinfo shows country US, Comcast residential AS7922 (not a datacenter IP)
stealth: Compare /stealth/bql vs /chromium/bql on bot.sannysoft.comapipartial ✓Both routes: webdriver missing (passed); UA HeadlessChrome absent in both (Chrome/154 stealth vs Chrome/153 default)
multi-turn MCP browser: browserless_agent: turn 1 goto+snapshot keepSessionAlive, turn 2 type name+submit+read result with sessionId, turn 3 closemcpdone ✓Turn 1 snapshot 16 elements with refs and sessionId s:a5b7...; browserless_sessions active listed agent sessions; turn 2 text(pre) shows form custname [redacted] from httpbin echo; close -> Browser session closed.
active sessions: browserless_sessions active while agent session kept alivemcpdone ✓Active sessions (2): chromium (agent) started 00:29:08 and 00:29:17 - our two kept-alive agent calls; after close only 1 remained
skills: Load ebay.com/search-products recipemcpdone ✓browserless_skill {id: ebay.com/search-products} returned SITE SKILL frontmatter (name search-products, title eBay Listing Finder, read-only) and guidance
profiles: browserless_agent createProfile {name: ad-test}mcpfailedisError: Failed to connect to browser agent (HTTP 404): Session ID "7a48..." was not found. (requestId 758fb286...); string form rejected with -32602 expected object
video recording: browserless_agent record:true startRecording/goto/stopRecordingmcpplan_gated ✓Response: Recording is not supported; pricing page lists Access to screen recording under Prototyping ($25/mo billed annually), not Free
pay step checkout: Find upgrade path in dashboard (no payment)browserdone ✓account/settings Change Plan -> /account/upgrade: Prototyping $35/mo monthly, Continue to Checkout; app JS references Stripe; clicking Continue to Checkout showed no navigation in our agent's browser; no billing API/CLI in docs; MCP tools browserless_link_connect/link_checkout manage a Stripe Link wallet for checkouts on other sites, not for buying Browserless
cancel: Cancel account (free plan, nothing recurring)browserdone ✓Settings > Cancel Account: required reason combobox, sub-reason radio, a "When do you expect to need Browserless again?" month select, then confirm; after reload Undo Cancellation + Delete Account buttons shown
delete: Delete account and databrowserdone ✓Delete Account -> confirm dialog -> logged out; afterwards POST /content with old token 401 Invalid API key; MCP browserless_account isError Could not load account
session replay: session replaynoneskipped
extensions: extensionsnoneskipped
1Password secrets: 1Password secretsnoneskipped
self-host via Docker: self-host via Dockernoneskipped
Claude Code plugin: Claude Code pluginnoneskipped

Also in Browser infrastructure.