[{"data":1,"prerenderedAt":712},["ShallowReactive",2],{"tool-browserbase-stagehand-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":22,"sources":26,"cover":56,"og":57,"expertise":58,"locales":59,"lang":60,"title":63,"description":64,"coverAlt":65,"url":25,"pricing":66,"kind":9,"metaTitle":67,"takeaways":68,"faq":74,"toc":87,"blocks":112,"others":489},"browserbase-stagehand","2026-09-30",10,"web",[9,10,11,12,13],"Browser automation","Web agents","Headless browsers","Playwright","MCP",[15,16,17,18,19,20,21],"browserbase","stagehand","stagehand vs playwright","browserbase pricing","ai web agent framework","headless browser api","browserbase alternatives",[23],{"name":24,"url":25},"Browserbase","https:\u002F\u002Fwww.browserbase.com",[27,30,33,36,39,42,45,48,51,54],{"title":28,"url":29},"Browserbase pricing","https:\u002F\u002Fwww.browserbase.com\u002Fpricing",{"title":31,"url":32},"Browserbase plans and pricing docs","https:\u002F\u002Fdocs.browserbase.com\u002Fguides\u002Fplans-and-pricing",{"title":34,"url":35},"Stagehand documentation","https:\u002F\u002Fdocs.stagehand.dev\u002F",{"title":37,"url":38},"Stagehand quickstart","https:\u002F\u002Fdocs.stagehand.dev\u002Fv4\u002Ffirst-steps\u002Fquickstart",{"title":40,"url":41},"Stagehand v4 announcement","https:\u002F\u002Fwww.browserbase.com\u002Fblog\u002Fstagehand-v4",{"title":43,"url":44},"Stagehand repository","https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fstagehand",{"title":46,"url":47},"Browser Use comparison of the two vendors","https:\u002F\u002Fbrowser-use.com\u002Fposts\u002Fbrowser-use-vs-browserbase",{"title":49,"url":50},"Browser Use pricing","https:\u002F\u002Fwww.browser-use.com\u002Fpricing",{"title":52,"url":53},"Skyvern pricing","https:\u002F\u002Fskyvern.com\u002Fpricing",{"title":12,"url":55},"https:\u002F\u002Fplaywright.dev\u002F","\u002Fimages\u002Fblog\u002Fbrowserbase-stagehand\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fbrowserbase-stagehand\u002Fog.jpg","ai-engineer",[60,61,62],"en","de","hu","Browserbase and Stagehand reviewed: rented Chrome for AI agents","Browserbase rents managed Chrome by the minute and Stagehand adds natural-language steps on top. What it costs, where the meters run and when plain Playwright wins.","Abstract pipeline artwork for the Browserbase and Stagehand review","From $20 per month · OSS library free","Browserbase review: hosted Chrome for agents · Balázs Csorba",[69,70,71,72,73],"Stagehand is MIT-licensed and free at version 4.1.0, while Browserbase bills browser minutes from $0.12 an hour once the 100 hours in the $20 Developer plan run out.","Server-side caching of act and observe applies only when the script runs with env set to BROWSERBASE, so a local run pays model tokens for every repeated instruction.","Concurrency runs 3 sessions on Free and 25 on Developer, with session creation capped at 5 and 25 per minute, so a burst of short sessions hits a rate limit before any hour is spent.","Proxy traffic is the second meter: 1 GB included on Developer and 5 GB on Startup, then $12 and $10 a gigabyte, which is what surprises teams running residential IPs.","A comparison published by Browser Use on 21 September 2026 put Browserbase at 42% against its own 81% on one stealth benchmark, so detection should not be priced into a fixed SLA.",[75,78,81,84],{"q":76,"a":77},"How much does Browserbase cost once the included hours run out?","Developer is $20 a month for 100 browser hours and then $0.12 an hour; Startup is $99 for 500 hours and then $0.10. Proxy traffic bills separately at $12 and $10 a gigabyte, and Model Gateway tokens are charged at market price on top of the browser hour.",{"q":79,"a":80},"Is Stagehand free to use?","The library is MIT-licensed and published on npm as 4.1.0, so the SDK itself costs nothing and it can run against local Chrome with your own model key. Caching, stealth tiers, proxies and session recording are hosted Browserbase features and stay behind the plan limits.",{"q":82,"a":83},"Should a team use Stagehand or plain Playwright?","Playwright wins wherever every selector is known in advance, because it needs no model tokens and no subscription. Stagehand earns its place on pages nobody has mapped, where act and extract trade brittle selectors for inference, and the documentation itself recommends mixing both.",{"q":85,"a":86},"Does Stagehand still depend on Playwright?","Not since version 3, which dropped the dependency to drive Chromium directly over the Chrome DevTools Protocol; version 4 moved target tracking and frame dispatch into an extension loaded beside the page. Playwright-style page and locator methods remain in the API.",[88,91,94,97,100,103,106,109],{"id":89,"title":90},"what-it-is","What it is",{"id":92,"title":93},"how-it-works","How it works",{"id":95,"title":96},"getting-started","Getting started",{"id":98,"title":99},"pricing","Pricing",{"id":101,"title":102},"identity-and-detection","Identity and detection",{"id":104,"title":105},"where-it-shingles","Where it shingles",{"id":107,"title":108},"verdict","Verdict",{"id":110,"title":111},"sources","Sources",[113,117,120,123,131,165,166,169,178,181,185,188,207,210,256,257,264,266,269,286,287,290,338,341,355,356,359,369,372,373,376,422,425,426,429,442,446,447],{"type":114,"content":115},"paragraph",[116],"Browserbase sells rented Chrome: sessions that start quickly, run behind a proxy network, and can be driven over the Chrome DevTools Protocol by Playwright, Puppeteer or Selenium. Stagehand is the SDK the same company keeps on top of it, adding three natural-language primitives to that control surface. The position taken here: this is the right pair for production browser agents that have to survive sites changing underneath them, and the wrong pair for anyone who wants a fixed monthly cost, because every interesting feature is metered separately.",{"type":114,"content":118},[119],"It sits where an agent framework needs hands. LangChain, CrewAI and Mastra decide; Stagehand clicks. What it replaces is the in-house browser farm: a pool of headless instances, a proxy subscription, a captcha service and a session recorder, all of which Browserbase folds into one hourly rate. The competition it faces hardest is not another cloud browser but a plain Playwright suite running on a machine somebody already pays for.",{"type":121,"level":122,"id":89,"text":90},"heading",2,{"type":114,"content":124},[125,126,130],"Two products ship under one vendor. Browserbase is the infrastructure: managed Chromium, proxies, session recording, identity features and HTTP endpoints for search, fetch and extraction. Stagehand is the automation library, MIT-licensed, published as ",{"tag":127,"children":128},"code",[129],"4.1.0"," on npm, with TypeScript, Python and Go SDKs of equal scope.",{"type":132,"ordered":133,"items":134},"list",false,[135,141,143,145,159,161,163],[136,137,140],"Vendor: Browserbase, Inc.; Stagehand is maintained in the open at ",{"tag":127,"children":138},[139],"github.com\u002Fbrowserbase\u002Fstagehand"," under the MIT licence.",[142],"Browser time: billed by the minute with a one-minute minimum per session; the free plan allows 15 minutes per session, paid plans 6 hours.",[144],"Concurrency: 3 sessions free, 25 on Developer, 100 on Startup, 250+ on Scale, with session creation capped at 5, 25, 50 and 150 per minute.",[146,147,150,151,154,155,158],"Stagehand API: ",{"tag":127,"children":148},[149],"act",", ",{"tag":127,"children":152},[153],"extract"," and ",{"tag":127,"children":156},[157],"observe"," for model-driven steps, plus Playwright-style page and locator methods for everything that should not involve a model.",[160],"Runtime: drives Chromium over CDP directly, with no Playwright dependency since v3, and runs its extension inside the browser since v4.",[162],"Languages: TypeScript, Python and Go, with Node 22.18 or newer required by the npm package.",[164],"Add-ons: a hosted MCP server, Search and Fetch endpoints, session recording, residential proxies, and a Model Gateway that bills models at market price.",{"type":121,"level":122,"id":92,"text":93},{"type":114,"content":167},[168],"A session is a Chromium instance somewhere else. The SDK opens a CDP connection to it, and since version 4 the state that used to be mirrored in the client — target tracking, frame contexts, dispatch — lives in an extension loaded next to the page, so the client reads the truth instead of a copy of it. Model calls happen only where the code asks for them: an act or extract request builds a trimmed view of the page, sends it to a model, and turns the answer into CDP commands.",{"type":170,"attrs":171,"inner":175,"caption":176},"diagram",{"viewBox":172,"role":173,"aria-labelledby":174},"0 0 720 290","img","bb-t bb-d","\u003Ctitle id=\"bb-t\">The Browserbase and Stagehand request path\u003C\u002Ftitle>\u003Cdesc id=\"bb-d\">Four boxes run left to right: your script, the Stagehand SDK, the extension loaded inside the browser, and the browser session itself. Two panels sit below: model calls, issued only for act, extract and observe; and billing, which counts browser minutes, proxy gigabytes and gateway tokens. Three lines state that server-side caching answers repeat instructions only on hosted sessions, that the stealth tier and captcha solving come from the plan rather than the script, and that a local run launches Chrome on the machine and uses the developer own model key.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"bb-a\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Ctext x=\"20\" y=\"26\" class=\"d-title\">BROWSERBASE + STAGEHAND\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"26\" text-anchor=\"end\" class=\"d-label\">one CDP connection, model calls optional\u003C\u002Ftext>\u003Crect x=\"40\" y=\"60\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"110\" y=\"92\" text-anchor=\"middle\" class=\"d-text\">your script\u003C\u002Ftext>\u003Cpath d=\"M182 86H214\" class=\"d-line\" marker-end=\"url(#bb-a)\" \u002F>\u003Crect x=\"216\" y=\"60\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"286\" y=\"92\" text-anchor=\"middle\" class=\"d-text\">stagehand sdk\u003C\u002Ftext>\u003Cpath d=\"M358 86H390\" class=\"d-line\" marker-end=\"url(#bb-a)\" \u002F>\u003Crect x=\"392\" y=\"60\" width=\"140\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"462\" y=\"92\" text-anchor=\"middle\" class=\"d-text\">extension\u003C\u002Ftext>\u003Cpath d=\"M534 86H566\" class=\"d-line\" marker-end=\"url(#bb-a)\" \u002F>\u003Crect x=\"568\" y=\"60\" width=\"112\" height=\"52\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"624\" y=\"92\" text-anchor=\"middle\" class=\"d-text\">browser\u003C\u002Ftext>\u003Crect x=\"40\" y=\"132\" width=\"300\" height=\"56\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"54\" y=\"154\" class=\"d-title\">MODEL CALLS\u003C\u002Ftext>\u003Ctext x=\"54\" y=\"176\" class=\"d-small\">act, extract, observe only when asked\u003C\u002Ftext>\u003Crect x=\"380\" y=\"132\" width=\"300\" height=\"56\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"394\" y=\"154\" class=\"d-title\">BILLING\u003C\u002Ftext>\u003Ctext x=\"394\" y=\"176\" class=\"d-small\">browser minutes, proxy GB, gateway tokens\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"220\" class=\"d-small\">server-side cache answers repeat instructions only when env is BROWSERBASE\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"242\" class=\"d-small\">stealth tier and captcha solving come from the plan, not from the script\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"264\" class=\"d-small\">a local run launches Chrome on the machine and uses your own model key\u003C\u002Ftext>",[177],"One connection from the script to the browser, with the model consulted only where the code asks for it.",{"type":114,"content":179},[180],"The split matters for cost as much as for architecture. Deterministic steps — a selector you already know — cost nothing beyond the browser minute. Model-driven steps cost a completion each, and the vendor's caching layer exists because teams were paying for the same click twice.",{"type":121,"level":182,"id":183,"text":184},3,"ai-primitives","The three primitives",{"type":114,"content":186},[187],"The pitch is that a script can decide, step by step, how much of a page it understands. The documentation is explicit that the design is hybrid: natural language where the DOM is unfamiliar, code where the selector is stable.",{"type":132,"ordered":133,"items":189},[190,195,200,205],[191,194],{"tag":127,"children":192},[193],"act(\"click the login button\")"," executes one natural-language instruction and self-heals when the markup moves.",[196,199],{"tag":127,"children":197},[198],"extract(prompt, schema)"," returns typed data validated against a Zod or Pydantic schema rather than free text.",[201,204],{"tag":127,"children":202},[203],"observe(instruction)"," returns candidate actions carrying real selectors, which is also the way to keep credentials out of the prompt.",[206],"page and locator give goto, click, fill, screenshot and frame traversal with no inference involved.",{"type":114,"content":208},[209],"The order the documentation recommends is observe first, then act: discovery costs one completion, and the resulting action can be cached and replayed as a plain command. That is where the running cost of an agent on Browserbase actually lives — not in the browser hour, but in repeated inference on pages that have not changed.",{"type":211,"variant":212,"title":213,"body":214},"callout","tip","Caching only exists on the hosted plan",[215,232,235,236,237,243,244,245,246],[216,217,218,219,217,218,220,221,222,223,217,224,225,226,225,227,222,228,229,224,230,231,224],"S","e","r","v","-","s","i","d"," ","c","a","h","n","g","o","f",[233,234],"tag","children",[224,226,228,223,224],[233,234],[224,226,238,238,239,222,217,221,224,240,227,217,228,224,241,227,217,224,221,225,218,222,238,241,224,218,242,228,221,224,240,222,241,227,224],"p","l","w","t","u",[233,234],[224,221,217,241,224,241,230,224],[233,234],[247,224,241,227,217,224,223,230,225,242,248,217,228,241,226,241,222,230,228,224,222,221,224,249,239,242,228,241,224,241,227,226,241,224,222,241,224,227,226,221,224,228,230,224,217,231,231,217,225,241,224,239,230,225,226,239,239,250,251,224,252,224,239,230,225,226,239,224,218,242,228,224,241,227,217,218,217,231,230,218,217,224,238,226,250,221,224,248,230,223,217,239,224,241,230,253,217,228,221,224,231,230,218,224,217,219,217,218,250,224,218,217,238,217,226,241,224,222,228,221,241,218,242,225,241,222,230,228,254,224,240,227,222,239,217,224,241,227,217,224,221,226,248,217,224,222,228,221,241,218,242,225,241,222,230,228,224,230,228,224,226,224,227,230,221,241,217,223,224,221,217,221,221,222,230,228,224,222,221,224,226,228,221,240,217,218,217,223,224,231,218,230,248,224,225,226,225,227,217,251,224,255,217,226,248,221,224,241,227,226,241,224,248,230,219,217,224,231,218,230,248,224,226,224,239,226,238,241,230,238,224,241,230,224,241,227,217,224,225,239,230,242,223,224,241,217,228,223,224,241,230,224,240,226,241,225,227,224,241,227,217,224,248,230,223,217,239,224,249,222,239,239,224,231,226,239,239,224,231,226,221,241,217,218,224,241,227,226,228,224,241,227,217,224,249,218,230,240,221,217,218,224,249,222,239,239,224,218,222,221,217,221,251],";","m","b","y",".","A","k",",","T",{"type":121,"level":122,"id":95,"text":96},{"type":114,"content":258},[259,260,263],"The quickstart runs against local Chrome with a model key of your own; swapping the browser for ",{"tag":127,"children":261},[262],"browserbase.launch()"," is the only change needed to move the same script into the cloud. The snippet below does both halves of the job: a natural-language step and a typed extraction, with a deterministic click at the end.",{"type":127,"code":265},"import { browserbase, Stagehand } from \"@browserbasehq\u002Fstagehand\";\nimport { z } from \"zod\u002Fv4\";\n\nconst browser = await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY! });\nconst stagehand = await Stagehand.create({ browser, cache: true });\nconst [page] = await browser.context.pages();\n\nawait page.goto(\"https:\u002F\u002Fexample.com\u002Fpricing\");\n\n\u002F\u002F natural language step, answered from cache when it repeats\nawait stagehand.act(\"open the plan comparison table\");\n\n\u002F\u002F typed extraction: validated against the schema, not just prompted\nconst { data } = await stagehand.extract(\n  \"extract every plan and its monthly price\",\n  z.object({ plans: z.array(z.object({ name: z.string(), price: z.string() })) }),\n);\nconsole.table(data.plans);\n\n\u002F\u002F deterministic step: a real selector, no model involved\nawait page.locator('a[href=\"\u002Fdocs\"]').click();\n\nawait stagehand.close();\nawait browser.close();",{"type":114,"content":267},[268],"Note what the last two calls do: the extraction is validated against a schema, so a missing price is an exception rather than a sentence to parse, and the final click never reaches a model at all. The pattern worth copying is the ratio — inference for the parts of the page nobody has mapped, locators for the parts that are known.",{"type":211,"variant":270,"title":271,"body":272},"warn","Three requirements before it runs",[273],[255,227,217,224,228,238,248,224,238,226,225,253,226,229,217,224,218,217,274,242,222,218,217,221,224,275,230,223,217,224,276,276,251,277,278,224,230,218,224,228,217,240,217,218,224,226,228,223,224,238,222,228,221,224,279,230,223,224,241,230,224,241,227,217,224,280,251,280,251,281,224,239,222,228,217,254,224,249,217,225,226,242,221,217,224,228,217,240,217,218,224,248,222,228,230,218,221,224,249,218,217,226,253,224,241,227,217,224,217,281,241,218,226,225,241,224,241,250,238,217,221,251,224,252,224,239,230,225,226,239,224,249,218,230,240,221,217,218,224,225,226,228,228,230,241,224,242,221,217,224,241,227,217,224,282,230,223,217,239,224,283,226,241,217,240,226,250,254,224,221,230,224,226,224,248,230,223,217,239,224,228,226,248,217,224,226,228,223,224,253,217,250,224,227,226,219,217,224,241,230,224,249,217,224,238,226,221,221,217,223,224,217,281,238,239,222,225,222,241,239,250,251,224,284,228,224,285,218,230,240,221,217,218,249,226,221,217,224,241,227,217,224,229,226,241,217,240,226,250,224,249,222,239,239,221,224,226,241,224,248,226,218,253,217,241,224,238,218,222,225,217,224,230,228,224,241,230,238,224,230,231,224,241,227,217,224,249,218,230,240,221,217,218,224,227,230,242,218,254,224,240,227,222,225,227,224,248,226,253,217,221,224,241,227,217,224,248,230,223,217,239,224,249,222,239,239,224,226,224,221,217,225,230,228,223,224,248,217,241,217,218,224,241,230,224,240,226,241,225,227,224,218,226,241,227,217,218,224,241,227,226,228,224,226,228,224,222,228,225,239,242,223,217,223,224,217,281,241,218,226,251],"q","N","2","1","8","Z","4","x","M","G","O","B",{"type":121,"level":122,"id":98,"text":99},{"type":114,"content":288},[289],"Four plans, three of them public. Browser hours, proxy bandwidth, agent runs and Search or Fetch calls each get a monthly allocation and then an overage rate; nothing is hard-capped, so a heavy month bills more rather than failing.",{"type":291,"head":292,"rows":301},"table",[293,295,297,299],[294],"Plan",[296],"Price",[298],"Included browser time",[300],"Concurrency and session limit",[302,311,320,329],[303,305,307,309],[304],"Free",[306],"$0",[308],"1 hour, no proxies",[310],"3 concurrent, 15-minute sessions, 5 sessions a minute",[312,314,316,318],[313],"Developer",[315],"$20 a month",[317],"100 hours, then $0.12 an hour",[319],"25 concurrent, 6-hour sessions, 25 a minute",[321,323,325,327],[322],"Startup",[324],"$99 a month",[326],"500 hours, then $0.10 an hour",[328],"100 concurrent, 6-hour sessions, 50 a minute",[330,332,334,336],[331],"Scale",[333],"Custom",[335],"Usage-based",[337],"250+ concurrent, 6+ hour sessions, 150+ a minute",{"type":114,"content":339},[340],"The arithmetic is easy to get wrong. Three hundred raw browser hours a month on Developer is $20 plus 200 hours of overage at $0.12, or $44; the same 500 hours on Startup are covered by the subscription. Proxy traffic is the second variable: 1 GB is included at Developer and 5 GB at Startup, then $12 and $10 a gigabyte respectively, which is the line that catches teams running residential IPs through login flows.",{"type":211,"variant":270,"title":342,"body":343},"What the hourly rate does not include",[344],[285,218,230,240,221,217,218,224,241,222,248,217,224,218,230,242,228,223,221,224,242,238,224,241,230,224,226,224,248,222,228,242,241,217,224,240,222,241,227,224,226,224,230,228,217,220,248,222,228,242,241,217,224,248,222,228,222,248,242,248,224,238,217,218,224,221,217,221,221,222,230,228,254,224,226,228,223,224,221,217,221,221,222,230,228,224,225,218,217,226,241,222,230,228,224,222,221,224,218,226,241,217,220,239,222,248,222,241,217,223,224,221,217,238,226,218,226,241,217,239,250,224,231,218,230,248,224,225,230,228,225,242,218,218,217,228,225,250,254,224,221,230,224,226,224,249,242,218,221,241,224,230,231,224,221,227,230,218,241,224,221,217,221,221,222,230,228,221,224,225,226,228,224,227,222,241,224,345,224,238,217,218,224,248,222,228,242,241,217,224,230,228,224,241,227,217,224,231,218,217,217,224,238,239,226,228,224,249,217,231,230,218,217,224,226,228,250,224,227,230,242,218,224,222,221,224,225,230,228,221,242,248,217,223,251,224,346,226,241,226,224,218,217,241,217,228,241,222,230,228,224,222,221,224,347,224,223,226,250,221,224,230,228,224,348,218,217,217,224,226,228,223,224,346,217,219,217,239,230,238,217,218,224,226,228,223,224,349,350,224,223,226,250,221,224,230,228,224,216,241,226,218,241,242,238,251,224,216,284,351,224,276,224,225,230,219,217,218,221,224,217,219,217,218,250,224,238,239,226,228,247,224,352,353,354,252,252,224,240,222,241,227,224,226,224,285,252,252,254,224,226,224,346,354,252,224,226,228,223,224,216,216,284,224,226,218,217,224,230,228,239,250,224,230,228,224,216,225,226,239,217,251],"5","D","7","F","3","0","C","H","I","P",{"type":121,"level":122,"id":101,"text":102},{"type":114,"content":357},[358],"Getting a browser past a site that does not want automation is a product line in its own right here, and it is tiered by plan rather than sold separately.",{"type":132,"ordered":133,"items":360},[361,363,365,367],[362],"Stealth: none on Free, Basic on Developer and Startup, Advanced with Verified identity on Scale.",[364],"Captcha solving: automatic on every paid plan, absent on Free.",[366],"Proxies: managed residential traffic is metered by the gigabyte, and a custom proxy provider can be configured instead.",[368],"Compliance: SOC 2 on all plans; HIPAA with a BAA, a DPA and SSO only on the Scale plan.",{"type":114,"content":370},[371],"This is the part to be sceptical about. Anti-bot defence is rented rather than solved: the tiers describe what the vendor applies, not a success rate, and the published numbers come from vendors with an interest in the answer. A comparison published by Browser Use on 21 September 2026 put Browserbase on Basic Stealth at 42% against its own 81% on one stealth benchmark, and at 70.3% against 84.8% on another. The engineering conclusion is not that Browserbase is weak, but that detection is a moving target nobody should price into a fixed SLA.",{"type":121,"level":122,"id":104,"text":105},{"type":114,"content":374},[375],"The weaknesses are structural rather than incidental. Every component outside the SDK is proprietary: a year of local Stagehand still leaves no self-hosted equivalent of the proxy pool, the stealth layer, the captcha solver or the session recorder, because the free plan itself stops at 1 hour and 3 concurrent sessions. The pricing carries three meters — browser hours, proxy gigabytes and model tokens — and publishes no estimate of what a realistic agent workload costs per completed task. On-premises deployment is not offered; the documentation answers that question with regions and consulting.",{"type":291,"head":377,"rows":386},[378,380,382,384],[379],"Tool",[381],"What it sells",[383],"Billing unit",[385],"Where it wins",[387,396,404,413],[388,390,392,394],[389],"Browserbase and Stagehand",[391],"Hosted browser fleet plus an MIT SDK with AI primitives",[393],"Browser hours from $0.12, proxy GB from $10, tokens at market price",[395],"Long-lived sessions with proxies, captcha solving and cached repeat actions",[397,398,400,402],[12],[399],"A library you run yourself, plus an MCP server and a CLI for agents",[401],"Your infrastructure; the software is free",[403],"Deterministic flows and CI suites where every selector is known",[405,407,409,411],[406],"Browser Use",[408],"Managed browsers and an agent product, open source at the core",[410],"$0.02 a browser hour with no subscription, $5 a GB for proxies",[412],"The cheapest raw browser time and pay-as-you-go without commitment",[414,416,418,420],[415],"Skyvern",[417],"A workflow product: perception loop, credentials, 2FA, human review",[419],"Credits: $29 a month for 30,000, $149 for 150,000",[421],"Unattended portal workflows where the whole run is the unit",{"type":114,"content":423},[424],"Read against those, the honest summary is that Browserbase competes on operational maturity and loses on unit price: Browser Use lists browser time at $0.02 an hour against $0.10 to $0.12 of overage, a fivefold gap that only matters once the included hours run out. Playwright stays free and unbeatable when nothing in the flow needs to understand a page it has never seen.",{"type":121,"level":122,"id":107,"text":108},{"type":114,"content":427},[428],"Buy Browserbase for the fleet and treat Stagehand as an optional layer on top of it, not as the reason to subscribe. The SDK is free to keep, the infrastructure is not, and the metering scheme rewards teams that know which steps need a model.",{"type":132,"ordered":430,"items":431},true,[432,434,436,438,440],[433],"Use it when agent flows have to log in, survive redesigns and run unattended across sites nobody on the team controls.",[435],"Use it when the alternative is assembling proxies, captcha solving and session recording in house; those components are what the hourly rate buys.",[437],"Skip it when every page in the workflow is known in advance: a Playwright suite and a cheap virtual machine will be both faster and cheaper.",[439],"Skip it when the budget has to be fixed per task; browser minutes plus proxy traffic plus gateway tokens never total a predictable number without instrumentation.",[441],"Start on Developer rather than Free: 1 hour and 15-minute sessions are enough to write the script and not enough to test it.",{"type":443,"content":444},"quote",[445],"Browserbase is browser time with the boring parts included; Stagehand is a free library that spends tokens only where it is allowed to. Judge the first on price per completed flow and the second on how few completions each flow needs.",{"type":121,"level":122,"id":110,"text":111},{"type":132,"ordered":430,"items":448},[449,453,457,461,465,469,473,477,481,485],[450,452],{"tag":226,"href":29,"children":451},[28]," — plan limits, overage rates and the capability table",[454,456],{"tag":226,"href":32,"children":455},[31]," — browser allocations, session duration and creation caps, retention and compliance by plan",[458,460],{"tag":226,"href":35,"children":459},[34]," — the act, extract and observe primitives and the Playwright-style page API",[462,464],{"tag":226,"href":38,"children":463},[37]," — local launch, schema-typed extraction and the swap to browserbase.launch()",[466,468],{"tag":226,"href":41,"children":467},[40]," — the extension architecture, the cache rename and the measured round-trip numbers",[470,472],{"tag":226,"href":44,"children":471},[43]," — MIT licence, install commands and the hosted MCP server",[474,476],{"tag":226,"href":47,"children":475},[46]," — the September 2026 stealth, latency and price figures used in this review",[478,480],{"tag":226,"href":50,"children":479},[49]," — browser-hour and proxy rates in the comparison table",[482,484],{"tag":226,"href":53,"children":483},[52]," — credit allowances and concurrency in the comparison table",[486,488],{"tag":226,"href":55,"children":487},[12]," — the free alternative and its MCP server and CLI",[490,546,593,647],{"slug":491,"published":5,"minutes":492,"category":7,"tags":493,"keywords":498,"about":505,"sources":513,"cover":537,"og":538,"expertise":58,"locales":539,"lang":60,"title":540,"description":541,"coverAlt":542,"url":543,"pricing":544,"kind":545},"webmcp",11,[494,495,496,497,13],"WebMCP","Agent tools","JSON Schema","Chrome",[491,499,500,501,502,503,504],"webmcp vs mcp","document.modelContext registerTool","webmcp declarative api","browser agent tools","webmcp origin trial","webmcp chrome 149",[506,508,511],{"name":494,"url":507},"https:\u002F\u002Fgithub.com\u002Fwebmachinelearning\u002Fwebmcp",{"name":509,"url":510},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",{"name":496,"url":512},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Schema",[514,517,520,523,526,529,532,534],{"title":515,"url":516},"Chrome for Developers: WebMCP (get started)","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp",{"title":518,"url":519},"Chrome for Developers: Imperative API","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fimperative-api",{"title":521,"url":522},"Chrome for Developers: Declarative API","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fdeclarative-api",{"title":524,"url":525},"Chrome for Developers: WebMCP versus MCP","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fcompare-mcp",{"title":527,"url":528},"Chrome for Developers: WebMCP tool security","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fsecure-tools",{"title":530,"url":531},"Chrome for Developers: Build effective tools","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fai\u002Fwebmcp\u002Fbuild-tools",{"title":533,"url":507},"WebMCP explainer and specification draft",{"title":535,"url":536},"WebMCP implementation status","https:\u002F\u002Fgithub.com\u002Fwebmachinelearning\u002Fwebmcp\u002Fblob\u002Fmain\u002Fimplementation-status.md","\u002Fimages\u002Fblog\u002Fwebmcp\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fwebmcp\u002Fog.jpg",[60,61,62],"WebMCP: publishing tools instead of pixels","WebMCP lets a page publish typed, callable tools to an in-browser agent. What the standard does, how much of it ships today, and where a plain MCP server is still the better call.","A page registering typed tools with the browser, a browser agent calling one of them, and the tool running inside the page and updating its own interface.","https:\u002F\u002Fgithub.com\u002Fwebmcp","Emerging standard, open","Browser protocol",{"slug":547,"published":548,"minutes":6,"category":7,"tags":549,"keywords":552,"about":560,"sources":564,"cover":586,"og":587,"expertise":58,"locales":588,"lang":60,"title":589,"description":590,"coverAlt":591,"url":562,"pricing":592,"kind":9},"playwright","2026-05-27",[550,9,13,551],"End-to-end testing","Cross-browser",[547,553,554,555,556,557,558,559],"playwright vs selenium","playwright mcp","browser automation testing","playwright test runner","playwright for ai agents","playwright vs cypress","playwright cloud pricing",[561,563],{"name":12,"url":562},"https:\u002F\u002Fplaywright.dev",{"name":509,"url":510},[565,568,571,574,577,580,583],{"title":566,"url":567},"Playwright documentation: installation","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fintro",{"title":569,"url":570},"Playwright MCP introduction","https:\u002F\u002Fplaywright.dev\u002Fmcp\u002Fintroduction",{"title":572,"url":573},"Playwright CLI introduction","https:\u002F\u002Fplaywright.dev\u002Fagent-cli\u002Fintroduction",{"title":575,"url":576},"Playwright Test agents","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Ftest-agents",{"title":578,"url":579},"npm package metadata for @playwright\u002Ftest","https:\u002F\u002Fregistry.npmjs.org\u002F@playwright\u002Ftest\u002Flatest",{"title":581,"url":582},"Microsoft Learn: Playwright Workspaces free trial","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fapp-testing\u002Fplaywright-workspaces\u002Fhow-to-try-playwright-workspaces-free",{"title":584,"url":585},"Azure App Testing pricing","https:\u002F\u002Fazure.microsoft.com\u002Fen-us\u002Fpricing\u002Fdetails\u002Fapp-testing\u002F","\u002Fimages\u002Fblog\u002Fplaywright\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fplaywright\u002Fog.jpg",[60,61,62],"Playwright: one browser API for tests, scripts and agents","Playwright drives Chromium, Firefox and WebKit from one Apache-2.0 API: a test runner, an agent-facing CLI and an MCP server. What it costs and where it falls short.","A Playwright test run: a spec file, a runner fanning out to three browser engines, and an agent reading accessibility snapshots.","Apache-2.0 · cloud paid",{"slug":594,"published":548,"minutes":6,"category":7,"tags":595,"keywords":600,"about":607,"sources":614,"cover":638,"og":639,"expertise":58,"locales":640,"lang":60,"title":641,"description":642,"coverAlt":643,"url":644,"pricing":645,"kind":646},"elevenlabs",[596,597,598,599],"Text to speech","Voice API","Speech to text","Voice cloning",[594,601,602,603,604,605,606],"elevenlabs api pricing","elevenlabs vs openai tts","text to speech api comparison","elevenlabs flash latency","voice cloning api","eleven v4 model",[608,611],{"name":609,"url":610},"ElevenLabs","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElevenLabs",{"name":612,"url":613},"Speech synthesis","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSpeech_synthesis",[615,618,621,624,627,629,632,635],{"title":616,"url":617},"ElevenLabs pricing: plans and credits","https:\u002F\u002Felevenlabs.io\u002Fpricing",{"title":619,"url":620},"ElevenAPI pricing: per-product rates","https:\u002F\u002Felevenlabs.io\u002Fpricing\u002Fapi",{"title":622,"url":623},"ElevenLabs documentation: models","https:\u002F\u002Felevenlabs.io\u002Fdocs\u002Fmodels",{"title":625,"url":626},"API reference: create speech","https:\u002F\u002Felevenlabs.io\u002Fdocs\u002Fapi-reference\u002Ftext-to-speech\u002Fconvert",{"title":628,"url":610},"Wikipedia: ElevenLabs",{"title":630,"url":631},"Amazon Polly pricing","https:\u002F\u002Faws.amazon.com\u002Fpolly\u002Fpricing\u002F",{"title":633,"url":634},"OpenAI API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":636,"url":637},"SILMA AI: text to speech price comparison, August 2026","https:\u002F\u002Fsilma.ai\u002Fblog\u002Ftext-to-speech-price-comparison-august-2026","\u002Fimages\u002Fblog\u002Felevenlabs\u002Fcover.webp","\u002Fimages\u002Fblog\u002Felevenlabs\u002Fog.jpg",[60,61,62],"ElevenLabs: speech synthesis as an API","A review of the ElevenLabs audio API: model lineup, latency figures, credit and per-character pricing, tier-gated formats, and where OpenAI and Amazon Polly win.","ElevenLabs cover artwork with speech API pipeline labels","https:\u002F\u002Felevenlabs.io","Free tier · from $5 per month","Voice and audio API",{"slug":648,"published":649,"minutes":6,"category":7,"tags":650,"keywords":656,"about":665,"sources":672,"cover":703,"og":704,"expertise":58,"locales":705,"lang":60,"title":706,"description":707,"coverAlt":708,"url":709,"pricing":710,"kind":711},"replicate","2026-05-22",[651,652,653,654,655],"Model hosting","Serverless GPU","Diffusion","Async jobs","Webhooks",[657,658,659,660,661,662,663,664],"replicate api","replicate vs fal.ai","serverless gpu inference pricing","replicate webhooks","replicate cold start","replicate vs baseten","how to run an open source model in production","replicate prediction api",[666,669],{"name":667,"url":668},"Replicate","https:\u002F\u002Freplicate.com\u002Fdocs",{"name":670,"url":671},"Serverless computing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServerless_computing",[673,676,679,682,685,688,691,694,697,700],{"title":674,"url":675},"Replicate pricing","https:\u002F\u002Freplicate.com\u002Fpricing",{"title":677,"url":678},"Replicate docs: About predictions","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions",{"title":680,"url":681},"Replicate docs: Create a prediction","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Fcreate-a-prediction",{"title":683,"url":684},"Replicate docs: Prediction lifecycle","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Flifecycle",{"title":686,"url":687},"Replicate docs: Rate limits","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Frate-limits",{"title":689,"url":690},"Replicate docs: Data retention","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fpredictions\u002Fdata-retention",{"title":692,"url":693},"Replicate docs: Verify webhooks","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fwebhooks\u002Fverify-webhook",{"title":695,"url":696},"Replicate docs: Official models","https:\u002F\u002Freplicate.com\u002Fdocs\u002Ftopics\u002Fmodels\u002Fofficial-models",{"title":698,"url":699},"fal.ai pricing","https:\u002F\u002Ffal.ai\u002Fpricing",{"title":701,"url":702},"Baseten pricing","https:\u002F\u002Fwww.baseten.co\u002Fpricing\u002F","\u002Fimages\u002Fblog\u002Freplicate\u002Fcover.webp","\u002Fimages\u002Fblog\u002Freplicate\u002Fog.jpg",[60,61,62],"Replicate, reviewed: a model API priced per second, with the sharp edges named","Replicate puts thousands of open models behind one prediction API and bills per second of compute. A review of cold boots, version churn and the one-hour data deletion.","A request moves from starting to processing, then into one of four terminal states: succeeded, failed, canceled or aborted.","https:\u002F\u002Freplicate.com","Pay per second of compute","Model hosting API",1791383548652]