{
  "data": {
    "a": {
      "slug": "puppeteer",
      "name": "Puppeteer",
      "vendor": "Google",
      "vendorUrl": "https://pptr.dev",
      "kind": "sdk",
      "category": "browser",
      "summary": "Puppeteer is Google's open-source Node.js library for controlling Chrome and Firefox over the DevTools Protocol and WebDriver BiDi. An agent writes and runs scripts that navigate, click, type, read pages and take screenshots.",
      "url": "https://www.anchorterminal.com/tools/puppeteer",
      "markdownUrl": "https://www.anchorterminal.com/tools/puppeteer.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/puppeteer.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/puppeteer.json",
      "repo": "https://github.com/puppeteer/puppeteer",
      "license": "Apache-2.0",
      "transports": [],
      "packages": [
        {
          "registry": "npm",
          "name": "puppeteer"
        },
        {
          "registry": "npm",
          "name": "puppeteer-core"
        }
      ],
      "auth": "none",
      "authNotes": "No account or key. The library runs on the owner's machine and launches or connects to a local browser. Site logins live in the browser profile or cookies the script sets. `puppeteer.connect()` to a remote browser uses whatever that endpoint requires.",
      "pricing": "free",
      "pricingNotes": "Free and open source under Apache-2.0, with nothing to buy and no hosted service from Google. `npm i puppeteer` downloads Chrome for Testing and chrome-headless-shell at install time (checked 2026-10-14).",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the README, the docs or the source (checked 2026-10-14).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 95689,
        "npmWeekly": 11547242,
        "pypiWeekly": null,
        "asOf": "2026-10-14"
      },
      "docsUrl": "https://pptr.dev",
      "capabilities": [
        "browser.control",
        "browser.debug"
      ],
      "tags": [
        "official",
        "local",
        "open-source",
        "browser",
        "sdk",
        "typescript",
        "no-auth"
      ],
      "lastRelease": "2026-10-08",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 70.6,
        "grade": "BB",
        "agentReady": true,
        "rank": 154,
        "ranked": true,
        "rankOf": 1076,
        "categoryRank": 5,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 67,
          "maintenance": 89,
          "payments": 60,
          "reliability": 80,
          "schema": 81,
          "security": 52,
          "transparency": 70
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-14"
        },
        "negative": 0,
        "verdict": "Puppeteer is a stable, Apache-2.0 library on 25.13.0, with ten releases since 27 July 2026, typed APIs, locators that wait and retry, and accessibility snapshots an agent can read. It has no MCP server or llms.txt of its own, and 10 of the 20 most recent CI runs on main failed between 7 and 13 October 2026.",
        "bestFor": "Agents that write and run Node.js scripts against Chrome or Firefox.",
        "strengths": [
          "Ten releases from 25.4.0 on 27 July to 25.13.0 on 8 October 2026, each with a changelog generated by release-please",
          "TypeScript types for the whole API and a generated reference of 643 Markdown pages in the repository",
          "`page.accessibility.snapshot()` and the Locator API, which waits for elements and retries actions, suit scripted agent use",
          "Each release pins a tested Chrome for Testing and Firefox version, listed in a public support table",
          "Typed errors such as `TimeoutError`, `TargetCloseError` and `ConnectionClosedError` let a script tell timeouts from a closed browser"
        ],
        "weaknesses": [
          "No MCP server, CLI or llms.txt of its own. The docs point agents to the separate chrome-devtools-mcp project",
          "10 of the 20 most recent CI runs on main, 7 to 13 October 2026, concluded in failure, the newest in Windows Chrome and Firefox jobs",
          "Page content reaches the agent unfiltered, and the docs have no prompt-injection or untrusted-content guidance",
          "JavaScript and TypeScript only, with Node.js 22.12 or later required since 25.0.0",
          "A stale workflow marks unconfirmed bug reports after 14 days and closes them 7 days later"
        ],
        "agentNotes": [
          "Install with `npm i puppeteer`, which downloads a matching Chrome for Testing. Use `puppeteer-core` to bring your own browser",
          "Prefer `page.locator()` over `page.$()`. Locators wait for the element to be visible and stable before acting",
          "Read pages with `page.accessibility.snapshot({interestingOnly: true})` rather than full HTML to keep output short",
          "Catch `TimeoutError` separately from `TargetCloseError`. The first can be retried, the second needs a new page or browser",
          "Packages are ESM only since 25.0.0. Use `import puppeteer from 'puppeteer'` rather than `require`"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 70.6
          }
        ],
        "editorialScores": {
          "ergonomics": 67,
          "maintenance": 89,
          "payments": 60,
          "reliability": 80,
          "schema": 81,
          "security": 52,
          "transparency": 72
        },
        "provenanceScore": 68
      },
      "connect": {
        "install": "npm i puppeteer"
      },
      "letme": {
        "capability": "https://letme.dev/browser.control",
        "tool": "https://letme.dev/puppeteer"
      },
      "area": "developer",
      "provenance": {
        "legalEntity": "Google LLC",
        "domain": "pptr.dev",
        "domainRegistered": "2018-05-23",
        "domainNote": "pptr.dev is the documentation site for Puppeteer, with a footer reading Copyright 2026 Google, Inc. RDAP gives a registration date of 23 May 2018. The repository is in the puppeteer organisation on GitHub. pptr.dev answers 404 for /.well-known/security.txt.",
        "endpointOnVendorDomain": null,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/CHANGELOG.md",
        "securityTxt": "none",
        "checked": "2026-10-14",
        "notes": [
          "No terms or privacy document governs this software beyond the Apache-2.0 licence, so `terms` and `privacy` are left out. The pptr.dev footer links Google's cookie policy for the site itself."
        ],
        "score": 68
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/puppeteer.json"
    },
    "answer": "Puppeteer and Steel score within a point of each other on agent readiness, 70.6 (BB) and 70.4 (BB). Steel leads on schema \u0026 documentation, agent ergonomics and payments \u0026 pricing.",
    "b": {
      "slug": "steel",
      "name": "Steel",
      "vendor": "Nen Labs, Inc.",
      "vendorUrl": "https://steel.dev",
      "kind": "http-api",
      "category": "browser",
      "summary": "Steel runs cloud browser sessions for AI agents, controlled through a REST API, a CDP WebSocket, SDKs, a CLI and an official MCP server. Its browser runtime, steel-browser, is open source and can be self-hosted.",
      "url": "https://www.anchorterminal.com/tools/steel",
      "markdownUrl": "https://www.anchorterminal.com/tools/steel.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/steel.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/steel.json",
      "repo": "https://github.com/steel-dev/steel-browser",
      "license": "Proprietary cloud service under Steel's terms. steel-browser and the Node and Python SDKs are Apache-2.0. The MCP server and the CLI are MIT",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://api.steel.dev",
      "packages": [
        {
          "registry": "npm",
          "name": "steel-sdk"
        },
        {
          "registry": "pypi",
          "name": "steel-sdk"
        },
        {
          "registry": "npm",
          "name": "@steel-dev/cli"
        }
      ],
      "auth": "api-key",
      "authNotes": "Self-serve API key from the dashboard at app.steel.dev, sent in the `steel-api-key` header. Keys are named, shown once and revoked by deletion, and the dashboard shows when each was last used. A global key covers the whole organisation, and `POST /v1/api-keys` lets a global key create keys bound to one project. No per-permission scopes were found. CDP connections pass the key as the `apiKey` query parameter on `wss://connect.steel.dev`. The x402 endpoints need no key. A self-hosted steel-browser needs no key.",
      "pricing": "freemium",
      "pricingNotes": "Launch is $0 plus usage with $30 of one-time credit valid for 90 days, and the quickstart says no card is required. Browser time is $0.10 an hour on Launch and $0.08 on Scale ($250 a month with $100 of monthly credit), billed by the minute and rounded up. Proxy traffic is $10 or $6 a GB, CAPTCHA solves $3 or $1 per 1,000, and scrape, screenshot and PDF calls $5 per 1,000. CAPTCHA solving and managed proxies on Launch need $10 of paid balance. The same three calls cost $0.01 each by x402. Enterprise is priced through sales. Self-hosted steel-browser is free (https://docs.steel.dev/overview/pricinglimits, checked 2026-10-08).",
      "priceSummary": "$0.01 / call",
      "where": "both",
      "x402": {
        "level": "yes",
        "evidence": "x402 version 2 on https://x402.steel.dev for scrape, screenshot and PDF at $0.01 a call in USDC on Base or Solana, with no account or API key (https://docs.steel.dev/integrations/x402). An unpaid POST to /v1/scrape on 2026-10-08 returned 402 with a payment-required header for 10000 base units on eip155:8453 and Solana mainnet. The header names https://api.paysponge.com/v1/scrape as the resource, so a third party appears to run the payment layer. Browser sessions and api.steel.dev aren't covered.",
        "endpoints": [
          {
            "url": "https://x402.steel.dev/v1/scrape",
            "priceUsd": 0.01,
            "network": "eip155:8453"
          },
          {
            "url": "https://x402.steel.dev/v1/screenshot",
            "priceUsd": 0.01,
            "network": "eip155:8453"
          },
          {
            "url": "https://x402.steel.dev/v1/pdf",
            "priceUsd": 0.01,
            "network": "eip155:8453"
          }
        ]
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 46988,
        "pypiWeekly": 63315,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://docs.steel.dev",
      "llmsTxt": "https://docs.steel.dev/llms.txt",
      "openapi": "https://docs.steel.dev/openapi.json",
      "capabilities": [
        "browser.control",
        "browser.hosted",
        "browser.debug",
        "web.scrape",
        "web.fetch",
        "scraping.proxies",
        "scraping.anti-bot",
        "pdf.generate"
      ],
      "tags": [
        "official",
        "hosted",
        "self-hosted",
        "open-source",
        "freemium",
        "no-card",
        "x402",
        "openapi",
        "llms-txt",
        "mcp",
        "python",
        "typescript",
        "proxies",
        "status-page"
      ],
      "lastRelease": "2026-10-02",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 70.4,
        "grade": "BB",
        "agentReady": true,
        "rank": 160,
        "ranked": true,
        "rankOf": 1076,
        "categoryRank": 7,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 79,
          "maintenance": 82,
          "payments": 75,
          "reliability": 58,
          "schema": 86,
          "security": 56,
          "transparency": 64
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "The hosted API has a public OpenAPI document, per-unit prices, $30 of starting credit and x402 payment for scrape, screenshot and PDF calls. The status page records three API or session-creation incidents of more than an hour in 90 days, and the documented CDP connection puts the API key in the URL.",
        "bestFor": "Agents that need a real cloud browser with persistent profiles, stored logins, CAPTCHA solving and a human takeover path, and teams that want an open-source runtime they can also self-host.",
        "strengths": [
          "OpenAPI 3.0.3 document with 75 operations, llms.txt and a Markdown twin of every docs page",
          "x402 at x402.steel.dev for scrape, screenshot and PDF at $0.01 a call in USDC on Base or Solana, with no account",
          "Per-unit prices published without login, and $30 of one-time credit on the Launch plan",
          "Official MCP server with 16 annotated tools, a three-tool scrape profile and page content fenced as untrusted",
          "steel-browser, the browser runtime, is Apache-2.0 and self-hostable with Docker"
        ],
        "weaknesses": [
          "Three incidents of more than an hour hit the API or session creation in the 90 days to 8 October 2026, the longest 5 hours 41 minutes",
          "The documented CDP connection passes the API key as `apiKey` in the `wss://connect.steel.dev` URL",
          "x402 covers the three one-shot endpoints only, so a browser session needs an account and a key",
          "The MCP server is not on npm or in the MCP registry, and `mcp.steel.dev` is not live per its README",
          "No deprecation policy or security.txt found, and the trust centre did not render for our reader"
        ],
        "agentNotes": [
          "Use `POST /v1/scrape` for pages you only need to read. It starts no session and costs $5 per 1,000 calls, or $0.01 a call by x402",
          "Release every session with `POST /v1/sessions/{id}/release` and set `inactivityTimeout`. Browser time bills by the minute, rounded up",
          "Build the CDP URL as `wss://connect.steel.dev?apiKey=\u003ckey\u003e\u0026sessionId=\u003cid\u003e` and keep it out of logs, because it carries the key",
          "Launch sessions end after 15 minutes at most, and `timeout` cannot be changed on a live session",
          "CAPTCHA solving and Steel's managed proxies on Launch need $10 of paid balance. Free credit does not count"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 70.4
          }
        ],
        "editorialScores": {
          "ergonomics": 79,
          "maintenance": 82,
          "payments": 75,
          "reliability": 58,
          "schema": 86,
          "security": 56,
          "transparency": 52
        },
        "provenanceScore": 75
      },
      "connect": {
        "install": "npm install steel-sdk",
        "http": "curl -X POST https://api.steel.dev/v1/scrape -H \"steel-api-key: YOUR_KEY\" -H \"Content-Type: application/json\" -d '{\"url\": \"https://example.com\"}'",
        "claudeCode": "claude mcp add steel -e STEEL_API_KEY=your-steel-api-key -- npx -y github:steel-dev/steel-mcp-server",
        "config": {
          "mcpServers": {
            "steel": {
              "args": [
                "-y",
                "github:steel-dev/steel-mcp-server"
              ],
              "command": "npx",
              "env": {
                "STEEL_API_KEY": "\u003cyour-steel-api-key\u003e"
              }
            }
          }
        },
        "x402": "curl -i -X POST https://x402.steel.dev/v1/scrape -H \"Content-Type: application/json\" -d '{\"url\": \"https://example.com\", \"format\": [\"markdown\"]}'"
      },
      "letme": {
        "capability": "https://letme.dev/browser.control",
        "tool": "https://letme.dev/steel"
      },
      "area": "developer",
      "unitPrices": [
        {
          "item": "Browser, Launch plan",
          "unit": "browser-hour",
          "usd": 0.1,
          "note": "Billed by the minute, rounded up"
        },
        {
          "item": "Browser, Scale plan",
          "unit": "browser-hour",
          "usd": 0.08
        },
        {
          "item": "Proxy traffic, Launch",
          "unit": "gb",
          "usd": 10
        },
        {
          "item": "Proxy traffic, Scale",
          "unit": "gb",
          "usd": 6
        },
        {
          "item": "Scrape, screenshot or PDF",
          "unit": "1k-requests",
          "usd": 5
        },
        {
          "item": "Scrape, screenshot or PDF by x402",
          "unit": "call",
          "usd": 0.01,
          "note": "USDC on Base or Solana, no account"
        },
        {
          "item": "CAPTCHA solves, Launch",
          "unit": "1k-requests",
          "usd": 3
        },
        {
          "item": "CAPTCHA solves, Scale",
          "unit": "1k-requests",
          "usd": 1
        },
        {
          "item": "Scale plan",
          "unit": "month",
          "usd": 250,
          "note": "$100 of usage credit each month"
        },
        {
          "item": "Dedicated IP, Scale",
          "unit": "month",
          "usd": 5,
          "note": "Per IP"
        }
      ],
      "provenance": {
        "legalEntity": "Nen Labs, Inc.",
        "domain": "steel.dev",
        "domainRegistered": "2024-07-22",
        "endpointOnVendorDomain": true,
        "terms": "https://steel.dev/terms",
        "privacy": "https://steel.dev/privacy",
        "statusPage": "https://status.steel.dev",
        "changelog": "https://docs.steel.dev/changelog",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The terms (last updated 5 February 2025) and the privacy notice (last updated 5 February 2026) name Nen Labs, Inc., 9450 SW Gemini Dr, PMB 34667, Beaverton, OR 97008, United States, and the terms choose Delaware law.",
          "The docs Legal page links to Google Docs copies of the terms and privacy policy and not to steel.dev/terms and steel.dev/privacy. We read the steel.dev pages.",
          "The API answers at api.steel.dev, CDP at connect.steel.dev and x402 at x402.steel.dev. The x402 payment header names api.paysponge.com as the resource.",
          "steel.dev/.well-known/security.txt and docs.steel.dev/.well-known/security.txt both return 404. The site footer's Security link goes to a Vanta trust centre at trust.steel.dev.",
          "RDAP for steel.dev gives a registration date of 2024-07-22.",
          "Changelog entries are numbered and carry dates in page metadata. Number 038 is dated 2 October 2026."
        ],
        "score": 75
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/steel.json",
      "live": {
        "slug": "steel",
        "probe": {
          "target": "https://api.steel.dev",
          "method": "get",
          "lastAt": "2026-10-14T09:42:08.959877188Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 169,
          "authRequired": false,
          "uptime24h": 99.6,
          "uptime30d": 99.93,
          "p50ms24h": 407,
          "p95ms24h": 657,
          "samples24h": 248,
          "samples30d": 1432,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 93,
              "ok": 93
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 247
            },
            {
              "date": "2026-10-14",
              "probes": 100,
              "ok": 100
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.steel.dev",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-14T08:53:58.14002454Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "steel-dev/steel-browser",
            "version": "v0.5.4-beta",
            "released": "2026-08-25",
            "seenAt": "2026-10-13T23:26:28.899089946Z"
          },
          {
            "registry": "npm",
            "name": "@steel-dev/cli",
            "version": "0.3.1",
            "seenAt": "2026-10-13T23:26:27.676611079Z"
          },
          {
            "registry": "npm",
            "name": "steel-sdk",
            "version": "0.18.0",
            "seenAt": "2026-10-13T23:26:26.70181555Z"
          },
          {
            "registry": "pypi",
            "name": "steel-sdk",
            "version": "0.19.0",
            "released": "2026-06-23",
            "seenAt": "2026-10-13T23:26:27.485350415Z"
          }
        ],
        "githubStars": 7796,
        "npmWeekly": 60124,
        "pypiWeekly": 63572,
        "securityTxt": {
          "url": "https://steel.dev/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-13T15:45:42.019457222Z"
        },
        "llmsTxt": {
          "url": "https://docs.steel.dev/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-13T14:12:37.580225551Z"
        },
        "domain": {
          "domain": "steel.dev",
          "registered": "2024-07-22",
          "source": "https://pubapi.registry.google/rdap/domain/steel.dev",
          "checkedAt": "2026-10-11T13:16:38.711198996Z"
        },
        "pages": [
          {
            "url": "https://docs.steel.dev/changelog",
            "kind": "changelog",
            "status": 404,
            "checkedAt": "2026-10-13T20:15:54.5043662Z",
            "changedAt": "0001-01-01T00:00:00Z"
          },
          {
            "url": "https://docs.steel.dev/overview/pricinglimits",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-13T20:15:56.692411481Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b8c6356ee458"
          },
          {
            "url": "https://steel.dev/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-13T20:23:45.705170908Z",
            "changedAt": "2026-10-10T19:10:17.238036303Z",
            "fingerprint": "ee281add72ba"
          },
          {
            "url": "https://steel.dev/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-13T20:23:47.872982526Z",
            "changedAt": "2026-10-10T19:10:19.561298803Z",
            "fingerprint": "949585da7064"
          }
        ],
        "updatedAt": "2026-10-14T09:42:08.959877188Z"
      }
    },
    "facts": [
      {
        "a": "SDK + MCP",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Google",
        "b": "Nen Labs, Inc.",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://api.steel.dev",
        "name": "Hosted endpoint"
      },
      {
        "a": "",
        "b": "HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "None",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "yes, from $0.01/call",
        "name": "x402"
      },
      {
        "a": "Apache-2.0",
        "b": "Proprietary cloud service under Steel's terms. steel-browser and the Node and Python SDKs are Apache-2.0. The MCP server and the CLI are MIT",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-08",
        "b": "2026-10-02",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "2025-02-05",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "2026-02-05",
        "name": "Privacy policy last updated"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "96k stars, 11.5M npm/wk",
        "b": "47k npm/wk, 63k PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Puppeteer and Steel score within a point of each other on agent readiness, 70.6 (BB) and 70.4 (BB). Steel leads on schema \u0026 documentation, agent ergonomics and payments \u0026 pricing.",
        "question": "Which is better for AI agents, Puppeteer or Steel?"
      },
      {
        "answer": "No hosted endpoint is listed for Puppeteer. Steel has a hosted endpoint at https://api.steel.dev.",
        "question": "Can an agent call Puppeteer and Steel without installing anything?"
      },
      {
        "answer": "Yes. Puppeteer is open source (Apache-2.0). Steel is open source (Proprietary cloud service under Steel's terms. steel-browser and the Node and Python SDKs are Apache-2.0. The MCP server and the CLI are MIT).",
        "question": "Are Puppeteer and Steel open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 80 against 58",
          "Maintenance \u0026 community, 89 against 82",
          "Transparency \u0026 trust, 70 against 64"
        ],
        "also": [
          "No key needed to call it"
        ],
        "goodFor": "Agents that write and run Node.js scripts against Chrome or Firefox.",
        "slug": "puppeteer",
        "watchFor": "No MCP server, CLI or llms.txt of its own. The docs point agents to the separate chrome-devtools-mcp project"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 86 against 81",
          "Agent ergonomics, 79 against 67",
          "Payments \u0026 pricing, 75 against 60"
        ],
        "also": [
          "An agent can pay per call over x402, with no account",
          "A hosted endpoint, with nothing to install",
          "Runs on your own machine",
          "Free to start without a card"
        ],
        "goodFor": "Agents that need a real cloud browser with persistent profiles, stored logins, CAPTCHA solving and a human takeover path, and teams that want an open-source runtime they can also self-host.",
        "slug": "steel",
        "watchFor": "Three incidents of more than an hour hit the API or session creation in the 90 days to 8 October 2026, the longest 5 hours 41 minutes"
      }
    ],
    "job": {
      "capability": "browser.control",
      "name": "Browser automation"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/agent-browser-vs-puppeteer.json",
        "title": "agent-browser vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/agent-browser-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/agent-browser-vs-steel.json",
        "title": "agent-browser vs Steel",
        "url": "https://www.anchorterminal.com/compare/agent-browser-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/airtop-vs-puppeteer.json",
        "title": "Airtop vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/airtop-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/airtop-vs-steel.json",
        "title": "Airtop vs Steel",
        "url": "https://www.anchorterminal.com/compare/airtop-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/anchor-browser-vs-puppeteer.json",
        "title": "Anchor Browser vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/anchor-browser-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/anchor-browser-vs-steel.json",
        "title": "Anchor Browser vs Steel",
        "url": "https://www.anchorterminal.com/compare/anchor-browser-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/browser-use-vs-puppeteer.json",
        "title": "Browser Use vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/browser-use-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/browser-use-vs-steel.json",
        "title": "Browser Use vs Steel",
        "url": "https://www.anchorterminal.com/compare/browser-use-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/browserbase-vs-puppeteer.json",
        "title": "Browserbase vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/browserbase-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/browserless-vs-puppeteer.json",
        "title": "Browserless vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/browserless-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/browserless-vs-steel.json",
        "title": "Browserless vs Steel",
        "url": "https://www.anchorterminal.com/compare/browserless-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/chrome-devtools-mcp-vs-puppeteer.json",
        "title": "Chrome DevTools MCP vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/chrome-devtools-mcp-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/chrome-devtools-mcp-vs-steel.json",
        "title": "Chrome DevTools MCP vs Steel",
        "url": "https://www.anchorterminal.com/compare/chrome-devtools-mcp-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hyperbrowser-vs-puppeteer.json",
        "title": "Hyperbrowser vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/hyperbrowser-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hyperbrowser-vs-steel.json",
        "title": "Hyperbrowser vs Steel",
        "url": "https://www.anchorterminal.com/compare/hyperbrowser-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/notte-vs-puppeteer.json",
        "title": "Notte vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/notte-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/notte-vs-steel.json",
        "title": "Notte vs Steel",
        "url": "https://www.anchorterminal.com/compare/notte-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/playwright-mcp-vs-puppeteer.json",
        "title": "Playwright MCP vs Puppeteer",
        "url": "https://www.anchorterminal.com/compare/playwright-mcp-vs-puppeteer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/playwright-mcp-vs-steel.json",
        "title": "Playwright MCP vs Steel",
        "url": "https://www.anchorterminal.com/compare/playwright-mcp-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puppeteer-reference-server-archived-vs-steel.json",
        "title": "Puppeteer (archived MCP reference server) vs Steel",
        "url": "https://www.anchorterminal.com/compare/puppeteer-reference-server-archived-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puppeteer-vs-puppeteer-reference-server-archived.json",
        "title": "Puppeteer vs Puppeteer (archived MCP reference server)",
        "url": "https://www.anchorterminal.com/compare/puppeteer-vs-puppeteer-reference-server-archived"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puppeteer-vs-selenium.json",
        "title": "Puppeteer vs Selenium",
        "url": "https://www.anchorterminal.com/compare/puppeteer-vs-selenium"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puppeteer-vs-skyvern.json",
        "title": "Puppeteer vs Skyvern",
        "url": "https://www.anchorterminal.com/compare/puppeteer-vs-skyvern"
      },
      {
        "json": "https://www.anchorterminal.com/compare/puppeteer-vs-tinyfish.json",
        "title": "Puppeteer vs TinyFish",
        "url": "https://www.anchorterminal.com/compare/puppeteer-vs-tinyfish"
      },
      {
        "json": "https://www.anchorterminal.com/compare/selenium-vs-steel.json",
        "title": "Selenium vs Steel",
        "url": "https://www.anchorterminal.com/compare/selenium-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/skyvern-vs-steel.json",
        "title": "Skyvern vs Steel",
        "url": "https://www.anchorterminal.com/compare/skyvern-vs-steel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/steel-vs-tinyfish.json",
        "title": "Steel vs TinyFish",
        "url": "https://www.anchorterminal.com/compare/steel-vs-tinyfish"
      },
      {
        "json": "https://www.anchorterminal.com/compare/browserbase-vs-steel.json",
        "title": "Browserbase vs Steel",
        "url": "https://www.anchorterminal.com/compare/browserbase-vs-steel"
      }
    ],
    "scores": [
      {
        "by": 22,
        "edge": "puppeteer",
        "key": "reliability",
        "name": "Reliability",
        "puppeteer": 80,
        "steel": 58,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 5,
        "edge": "steel",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "puppeteer": 81,
        "steel": 86,
        "weight": 13
      },
      {
        "by": 12,
        "edge": "steel",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "puppeteer": 67,
        "steel": 79,
        "weight": 13
      },
      {
        "by": 4,
        "edge": "steel",
        "key": "security",
        "name": "Security \u0026 auth",
        "puppeteer": 52,
        "steel": 56,
        "weight": 14
      },
      {
        "by": 15,
        "edge": "steel",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "puppeteer": 60,
        "steel": 75,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 7,
        "edge": "puppeteer",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "puppeteer": 89,
        "steel": 82,
        "weight": 7
      },
      {
        "by": 6,
        "edge": "puppeteer",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "puppeteer": 70,
        "steel": 64,
        "weight": 7
      }
    ],
    "summary": "Puppeteer and Steel score within a point of each other on agent readiness, 70.6 (BB) and 70.4 (BB). Steel leads on schema \u0026 documentation, agent ergonomics and payments \u0026 pricing. Both do browser automation. Steel accepts x402. Puppeteer doesn't.",
    "verdicts": {
      "puppeteer": "Puppeteer is a stable, Apache-2.0 library on 25.13.0, with ten releases since 27 July 2026, typed APIs, locators that wait and retry, and accessibility snapshots an agent can read. It has no MCP server or llms.txt of its own, and 10 of the 20 most recent CI runs on main failed between 7 and 13 October 2026.",
      "steel": "The hosted API has a public OpenAPI document, per-unit prices, $30 of starting credit and x402 payment for scrape, screenshot and PDF calls. The status page records three API or session-creation incidents of more than an hour in 90 days, and the documented CDP connection puts the API key in the URL."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/puppeteer-vs-steel",
    "json": "https://www.anchorterminal.com/compare/puppeteer-vs-steel.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/puppeteer-vs-steel.md",
    "slim": "https://www.anchorterminal.com/compare/puppeteer-vs-steel.min.md"
  },
  "markdown": "Puppeteer and Steel score within a point of each other on agent readiness, 70.6 (BB) and 70.4 (BB). Steel leads on schema \u0026 documentation, agent ergonomics and payments \u0026 pricing. Both do browser automation. Steel accepts x402. Puppeteer doesn't.\n\n- Puppeteer: grade BB, 70.6/100, rank #154 of 1076. Markdown https://www.anchorterminal.com/tools/puppeteer.md · JSON https://www.anchorterminal.com/api/v1/tools/puppeteer.json\n- Steel: grade BB, 70.4/100, rank #160 of 1076. Markdown https://www.anchorterminal.com/tools/steel.md · JSON https://www.anchorterminal.com/api/v1/tools/steel.json\n- Best browser automation tools for AI agents: https://www.anchorterminal.com/best/browser/index.md\n- All 120 browser comparisons: https://www.anchorterminal.com/compare/browser/index.md\n\n## Which one, for what\n\n### Puppeteer (BB)\n\nGood for: Agents that write and run Node.js scripts against Chrome or Firefox.\n\nAhead on:\n- Reliability, 80 against 58\n- Maintenance \u0026 community, 89 against 82\n- Transparency \u0026 trust, 70 against 64\n\nAlso in its favour:\n- No key needed to call it\n\nWatch for: No MCP server, CLI or llms.txt of its own. The docs point agents to the separate chrome-devtools-mcp project\n\n### Steel (BB)\n\nGood for: Agents that need a real cloud browser with persistent profiles, stored logins, CAPTCHA solving and a human takeover path, and teams that want an open-source runtime they can also self-host.\n\nAhead on:\n- Schema \u0026 documentation, 86 against 81\n- Agent ergonomics, 79 against 67\n- Payments \u0026 pricing, 75 against 60\n\nAlso in its favour:\n- An agent can pay per call over x402, with no account\n- A hosted endpoint, with nothing to install\n- Runs on your own machine\n- Free to start without a card\n\nWatch for: Three incidents of more than an hour hit the API or session creation in the 90 days to 8 October 2026, the longest 5 hours 41 minutes\n\n\n## Score by category\n\n| Category | Weight | Puppeteer | Steel | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 80 | 58 | Puppeteer +22 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 81 | 86 | Steel +5 |\n| Agent ergonomics | 13% (16.2 this run) | 67 | 79 | Steel +12 |\n| Security \u0026 auth | 14% (17.5 this run) | 52 | 56 | Steel +4 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 75 | Steel +15 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 89 | 82 | Puppeteer +7 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 70 | 64 | Puppeteer +6 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **70.6 · BB** | **70.4 · BB** | |\n\n## Facts side by side\n\n| Fact | Puppeteer | Steel |\n| --- | --- | --- |\n| Kind | SDK + MCP | HTTP API |\n| Vendor | Google | Nen Labs, Inc. |\n| Hosted endpoint | no (local only) | `https://api.steel.dev` |\n| Transports |  | HTTP, stdio |\n| Auth | None | API key |\n| Pricing | Free | Freemium |\n| x402 | no | yes, from $0.01/call |\n| Licence | Apache-2.0 | Proprietary cloud service under Steel's terms. steel-browser and the Node and Python SDKs are Apache-2.0. The MCP server and the CLI are MIT |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| Last release | 2026-10-08 | 2026-10-02 |\n| Terms last updated | no document linked | 2025-02-05 |\n| Privacy policy last updated | no document linked | 2026-02-05 |\n| Customer content may train models |  | not found in the text |\n| Terms restrict automated access |  | yes |\n| Terms restrict benchmarking |  | yes |\n| Terms or service can change without notice |  | yes |\n| Arbitration or class-action waiver |  | yes |\n| Popularity | 96k stars, 11.5M npm/wk | 47k npm/wk, 63k PyPI/wk |\n\n## Verdicts\n\n**Puppeteer.** Puppeteer is a stable, Apache-2.0 library on 25.13.0, with ten releases since 27 July 2026, typed APIs, locators that wait and retry, and accessibility snapshots an agent can read. It has no MCP server or llms.txt of its own, and 10 of the 20 most recent CI runs on main failed between 7 and 13 October 2026.\n\n**Steel.** The hosted API has a public OpenAPI document, per-unit prices, $30 of starting credit and x402 payment for scrape, screenshot and PDF calls. The status page records three API or session-creation incidents of more than an hour in 90 days, and the documented CDP connection puts the API key in the URL.\n\n## Before you call either\n\n### Puppeteer\n\n1. Install with `npm i puppeteer`, which downloads a matching Chrome for Testing. Use `puppeteer-core` to bring your own browser\n2. Prefer `page.locator()` over `page.$()`. Locators wait for the element to be visible and stable before acting\n3. Read pages with `page.accessibility.snapshot({interestingOnly: true})` rather than full HTML to keep output short\n4. Catch `TimeoutError` separately from `TargetCloseError`. The first can be retried, the second needs a new page or browser\n5. Packages are ESM only since 25.0.0. Use `import puppeteer from 'puppeteer'` rather than `require`\n\n### Steel\n\n1. Use `POST /v1/scrape` for pages you only need to read. It starts no session and costs $5 per 1,000 calls, or $0.01 a call by x402\n2. Release every session with `POST /v1/sessions/{id}/release` and set `inactivityTimeout`. Browser time bills by the minute, rounded up\n3. Build the CDP URL as `wss://connect.steel.dev?apiKey=\u003ckey\u003e\u0026sessionId=\u003cid\u003e` and keep it out of logs, because it carries the key\n4. Launch sessions end after 15 minutes at most, and `timeout` cannot be changed on a live session\n5. CAPTCHA solving and Steel's managed proxies on Launch need $10 of paid balance. Free credit does not count\n\n## Questions\n\n### Which is better for AI agents, Puppeteer or Steel?\n\nPuppeteer and Steel score within a point of each other on agent readiness, 70.6 (BB) and 70.4 (BB). Steel leads on schema \u0026 documentation, agent ergonomics and payments \u0026 pricing.\n\n### Can an agent call Puppeteer and Steel without installing anything?\n\nNo hosted endpoint is listed for Puppeteer. Steel has a hosted endpoint at https://api.steel.dev.\n\n### Are Puppeteer and Steel open source?\n\nYes. Puppeteer is open source (Apache-2.0). Steel is open source (Proprietary cloud service under Steel's terms. steel-browser and the Node and Python SDKs are Apache-2.0. The MCP server and the CLI are MIT).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/puppeteer-vs-steel.json, and with the fewest tokens: https://www.anchorterminal.com/compare/puppeteer-vs-steel.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"puppeteer\", \"b\": \"steel\"}`. From a terminal: `anchor compare puppeteer steel`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/puppeteer.json and https://www.anchorterminal.com/api/v1/tools/steel.json\n\n## Other comparisons with Puppeteer or Steel\n\n- [agent-browser vs Puppeteer](https://www.anchorterminal.com/compare/agent-browser-vs-puppeteer.md)\n- [agent-browser vs Steel](https://www.anchorterminal.com/compare/agent-browser-vs-steel.md)\n- [Airtop vs Puppeteer](https://www.anchorterminal.com/compare/airtop-vs-puppeteer.md)\n- [Airtop vs Steel](https://www.anchorterminal.com/compare/airtop-vs-steel.md)\n- [Anchor Browser vs Puppeteer](https://www.anchorterminal.com/compare/anchor-browser-vs-puppeteer.md)\n- [Anchor Browser vs Steel](https://www.anchorterminal.com/compare/anchor-browser-vs-steel.md)\n- [Browser Use vs Puppeteer](https://www.anchorterminal.com/compare/browser-use-vs-puppeteer.md)\n- [Browser Use vs Steel](https://www.anchorterminal.com/compare/browser-use-vs-steel.md)\n- [Browserbase vs Puppeteer](https://www.anchorterminal.com/compare/browserbase-vs-puppeteer.md)\n- [Browserless vs Puppeteer](https://www.anchorterminal.com/compare/browserless-vs-puppeteer.md)\n- [Browserless vs Steel](https://www.anchorterminal.com/compare/browserless-vs-steel.md)\n- [Chrome DevTools MCP vs Puppeteer](https://www.anchorterminal.com/compare/chrome-devtools-mcp-vs-puppeteer.md)\n- [Chrome DevTools MCP vs Steel](https://www.anchorterminal.com/compare/chrome-devtools-mcp-vs-steel.md)\n- [Hyperbrowser vs Puppeteer](https://www.anchorterminal.com/compare/hyperbrowser-vs-puppeteer.md)\n- [Hyperbrowser vs Steel](https://www.anchorterminal.com/compare/hyperbrowser-vs-steel.md)\n- [Notte vs Puppeteer](https://www.anchorterminal.com/compare/notte-vs-puppeteer.md)\n- [Notte vs Steel](https://www.anchorterminal.com/compare/notte-vs-steel.md)\n- [Playwright MCP vs Puppeteer](https://www.anchorterminal.com/compare/playwright-mcp-vs-puppeteer.md)\n- [Playwright MCP vs Steel](https://www.anchorterminal.com/compare/playwright-mcp-vs-steel.md)\n- [Puppeteer (archived MCP reference server) vs Steel](https://www.anchorterminal.com/compare/puppeteer-reference-server-archived-vs-steel.md)\n- [Puppeteer vs Puppeteer (archived MCP reference server)](https://www.anchorterminal.com/compare/puppeteer-vs-puppeteer-reference-server-archived.md)\n- [Puppeteer vs Selenium](https://www.anchorterminal.com/compare/puppeteer-vs-selenium.md)\n- [Puppeteer vs Skyvern](https://www.anchorterminal.com/compare/puppeteer-vs-skyvern.md)\n- [Puppeteer vs TinyFish](https://www.anchorterminal.com/compare/puppeteer-vs-tinyfish.md)\n- [Selenium vs Steel](https://www.anchorterminal.com/compare/selenium-vs-steel.md)\n- [Skyvern vs Steel](https://www.anchorterminal.com/compare/skyvern-vs-steel.md)\n- [Steel vs TinyFish](https://www.anchorterminal.com/compare/steel-vs-tinyfish.md)\n- [Browserbase vs Steel](https://www.anchorterminal.com/compare/browserbase-vs-steel.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-14",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Puppeteer vs Steel",
        "url": ""
      }
    ],
    "description": "Puppeteer and Steel score within a point of each other for browser automation, 70.6 and 70.4 out of 100. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Puppeteer BB 70.6",
      "Steel BB 70.4",
      "scores"
    ],
    "h1": "Puppeteer vs Steel",
    "image": "https://www.anchorterminal.com/assets/og/compare-puppeteer-vs-steel.png",
    "path": "/compare/puppeteer-vs-steel",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Puppeteer vs Steel for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-14",
    "url": "https://www.anchorterminal.com/compare/puppeteer-vs-steel"
  },
  "tokens": {
    "markdown": 2550,
    "slim": 730
  },
  "version": 1
}
