Guide

Scrape

What scrape() hands back from each provider. HTML from some and markdown from others and an error from one

One call, a different answer from each

Same URL, same tool, same afternoon. This is browsers_scrape on https://example.com through every provider, recorded with real keys and kept exactly as it came back.

Callbrowsers_scrape("https://example.com", "steel")recorded 2026-09-29 · 01 / 8
Provider / steel

Steel

One POST to /v1/scrape for a page, a session for everything else.

Route

  1. createdone
  2. sessionskipped
  3. scrapedone
  4. releaseskipped

Answer

  1. <html lang="en"><head><meta charset="utf-8"><link rel="icon" href="data:,"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Example Domain</title><style>html{color-scheme:light dark;background:light-dark(#eee,#222)}body{font:16px/1.6 system-ui,sans-serif;max-width:30em;min-height:100vh;margin:auto;padding:4.75em 2em 20vh;box-sizing:border-box;display:grid;place-content:center;text-align:center}</style></head><body><style>body{padding:2em 2em 20vh;place-items:center}svg{opacity:.55}p{grid-area:2/1}span{transition:opacity .4s}p+p span{opacity:0}@media(prefers-reduced-motion){*{transition:none}}</style><svg viewBox="0,0,20,20" width="44" height="44" fill="currentColor" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round" d="M6 4H3v12q4 0 7 1.5-1-3.5-4-4.5V2q3.5 1 4 3v12.5q3-1.5 7-1.5V4q-4.5 0-7 1"></path><g transform="rotate(-6,13.6,8.3)"><path id="q" d="M11.5 6.6h1.8v1.8l-1 1.6-.6-.3.8-1.3h-1z"></path><use href="#q" x="2.4"></use></g></svg><p><span>T</span><span>h</span><span>i</span><span>s</span><span> </span><span>d</span><span>o</span><span>m</span><span>a</span><span>i</span><span>n</span><span> </span><span>i</span><span>s</span><span> </span><span>f</span><span>o</span><span>r</span><span> </span><span>u</span><span>s</span><span>e</span><span> </span><span>i</span><span>n</span><span> </span><span>d</span><span>o</span><span>c</span><span>u</span><span>m</span><span>e</span><span>n</span><span>t</span><span>a</span><span>t</span><span>i</span><span>o</span><span>n</span><span> </span><span>e</span><span>x</span><span>a</span><span>m</span><span>p</span><span>l</span><span>e</span><span>s</span><span> </span><span>w</span><span>i</span><span>t</span><span>h</span><span>o</span><span>u</span><span>t</span><span> </span><span>n</span><span>e</span><span>e</span><span>d</span><span>i</span><span>n</span><span>g</span><span> </span><span>p</span><span>e</span><span>r</span><span>m</span><span>i</span><span>s</span><span>s</span><span>i</span><span>o</span><span>n</span><span>.</span><span> </span><span>T</span><span>h</span><span>i</span><span>s</span><span> </span><span>i</span><span>s</span><span> </span><span>n</span><span>o</span><span>t</span><span> </span><span>a</span><span> </span><span>s</span><span>e</span><span>r</span><span>v</span><span>i</span><span>c</span><span>e</span><span>,</span><span> </span><span>a</span><span>v</span><span>o</span><span>i</span><span>d</span><span> </span><span>r</span><span>e</span><span>l</span><span>y</span><span>i</span><span>n</span><span>g</span><span> </span><span>o</span><span>n</span><span> </span><span>i</span><span>t</span><span> </span><span>f</span><span>o</span><span>r</span><span> </span><span>t</span><span>e</span><span>s</span><span>t</span><span>i</span><span>n</span><span>g</span><span> </span><span>a</span><span>n</span><span>d</span><span> </span><span>m</span><span>o</span><span>n</span><span>i</span><span>t</span><span>o</span><span>r</span><span>i</span><span>n</span><span>g</span><span> </span><span>p</span><span>u</span><span>r</span><span>p</span><span>o</span><span>s</span><span>e</span><span>s</span><span>.</span></p><p lang="ar" dir="rtl"><span>هذا</span><span> النطاق</span><span> مُخصص</span><span> للاستخدام</span><span> في</span><span> أمثلة</span><span> التوثيق</span><span> دون</span><span> الحاجة</span><span> إلى</span><span> إذن.</span><span> هذه</span><span> ليست</span><span> خدمة،</span><span> يُرجى</span><span> تجنب</span><span> الاعتماد</span><span> عليها</span><span> لأغراض</span><span> الاختبار</span><span> والمراقبة.</span></p><p lang="zh"><span>该</span><span>域</span><span>名</span><span>仅</span><span>用</span><span>于</span><span>文</span><span>档</span><span>示</span><span>例</span><span>,</span><span>无</span><span>需</span><span>获</span><span>得</span><span>许</span><span>可</span><span>。</span><span>这</span><span>并</span><span>非</span><span>一</span><span>项</span><span>服</span><span>务</span><span>,</span><span>请</span><span>勿</span><span>将</span><span>其</span><span>用</span><span>于</span><span>测</span><span>试</span><span>和</span><span>监</span><span>控</span><span>目</span><span>的</span><span>。</span></p><p lang="fr"><span>L</span><span>’</span><span>u</span><span>s</span><span>a</span><span>g</span><span>e</span><span> </span><span>d</span><span>e</span><span> </span><span>c</span><span>e</span><span> </span><span>d</span><span>o</span><span>m</span><span>a</span><span>i</span><span>n</span><span>e</span><span> </span><span>e</span><span>s</span><span>t</span><span> </span><span>r</span><span>é</span><span>s</span><span>e</span><span>r</span><span>v</span><span>é</span><span> </span><span>à</span><span> </span><span>d</span><span>e</span><span>s</span><span> </span><span>e</span><span>x</span><span>e</span><span>m</span><span>p</span><span>l</span><span>e</span><span>s</span><span> </span><span>d</span><span>e</span><span> </span><span>d</span><span>o</span><span>c</span><span>u</span><span>m</span><span>e</span><span>n</span><span>t</span><span>a</span><span>t</span><span>i</span><span>o</span><span>n</span><span>,</span><span> </span><span>s</span><span>a</span><span>n</span><span>s</span><span> </span><span>a</span><span>u</span><span>t</span><span>o</span><span>r</span><span>i</span><span>s</span><span>a</span><span>t</span><span>i</span><span>o</span><span>n</span><span> </span><span>p</span><span>r</span><span>é</span><span>a</span><span>l</span><span>a</span><span>b</span><span>l</span><span>e</span><span>.</span><span> </span><span> </span><span>I</span><span>l</span><span> </span><span>n</span><span>e</span><span> </span><span>s</span><span>’</span><span>a</span><span>g</span><span>i</span><span>t</span><span> </span><span>p</span><span>a</span><span>s</span><span> </span><span>d</span><span>’</span><span>u</span><span>n</span><span> </span><span>s</span><span>e</span><span>r</span><span>v</span><span>i</span><span>c</span><span>e</span><span> </span><span>;</span><span> </span><span>s</span><span>o</span><span>n</span><span> </span><span>u</span><span>t</span><span>i</span><span>l</span><span>i</span><span>s</span><span>a</span><span>t</span><span>i</span><span>o</span><span>n</span><span> </span><span>à</span><span> </span><span>d</span><span>e</span><span>s</span><span> </span><span>f</span><span>i</span><span>n</span><span>s</span><span> </span><span>d</span><span>e</span><span> </span><span>t</span><span>e</span><span>s</span><span>t</span><span> </span><span>o</span><span>u</span><span> </span><span>d</span><span>e</span><span> </span><span>s</span><span>u</span><span>r</span><span>v</span><span>e</span><span>i</span><span>l</span><span>l</span><span>a</span><span>n</span><span>c</span><span>e</span><span> </span><span>e</span><span>s</span><span>t</span><span> </span><span>à</span><span> </span><span>é</span><span>v</span><span>i</span><span>t</span><span>e</span><span>r</span><span>.</span></p><p lang="ru"><span>Д</span><span>а</span><span>н</span><span>н</span><span>ы</span><span>й</span><span> </span><span>д</span><span>о</span><span>м</span><span>е</span><span>н</span><span> </span><span>п</span><span>р</span><span>е</span><span>д</span><span>н</span><span>а</span><span>з</span><span>н</span><span>а</span><span>ч</span><span>е</span><span>н</span><span> </span><span>д</span><span>л</span><span>я</span><span> </span><span>и</span><span>с</span><span>п</span><span>о</span><span>л</span><span>ь</span><span>з</span><span>о</span><span>в</span><span>а</span><span>н</span><span>и</span><span>я</span><span> </span><span>в</span><span> </span><span>п</span><span>р</span><span>и</span><span>м</span><span>е</span><span>р</span><span>а</span><span>х</span><span> </span><span>д</span><span>о</span><span>к</span><span>у</span><span>м</span><span>е</span><span>н</span><span>т</span><span>а</span><span>ц</span><span>и</span><span>и</span><span> </span><span>б</span><span>е</span><span>з</span><span> </span><span>н</span><span>е</span><span>о</span><span>б</span><span>х</span><span>о</span><span>д</span><span>и</span><span>м</span><span>о</span><span>с</span><span>т</span><span>и</span><span> </span><span>п</span><span>о</span><span>л</span><span>у</span><span>ч</span><span>е</span><span>н</span><span>и</span><span>я</span><span> </span><span>п</span><span>р</span><span>е</span><span>д</span><span>в</span><span>а</span><span>р</span><span>и</span><span>т</span><span>е</span><span>л</span><span>ь</span><span>н</span><span>о</span><span>г</span><span>о</span><span> </span><span>р</span><span>а</span><span>з</span><span>р</span><span>е</span><span>ш</span><span>е</span><span>н</span><span>и</span><span>я</span><span>.</span><span> </span><span>Э</span><span>т</span><span>о</span><span> </span><span>н</span><span>е</span><span> </span><span>с</span><span>е</span><span>р</span><span>в</span><span>и</span><span>с</span><span>;</span><span> </span><span>н</span><span>е</span><span> </span><span>р</span><span>е</span><span>к</span><span>о</span><span>м</span><span>е</span><span>н</span><span>д</span><span>у</span><span>е</span><span>т</span><span>с</span><span>я</span><span> </span><span>е</span><span>г</span><span>о</span><span> </span><span>и</span><span>с</span><span>п</span><span>о</span><span>л</span><span>ь</span><span>з</span><span>о</span><span>в</span><span>а</span><span>н</span><span>и</span><span>е</span><span> </span><span>д</span><span>л</span><span>я</span><span> </span><span>т</span><span>е</span><span>с</span><span>т</span><span>и</span><span>р</span><span>о</span><span>в</span><span>а</span><span>н</span><span>и</span><span>я</span><span> </span><span>и</span><span> </span><span>м</span><span>о</span><span>н</span><span>и</span><span>т</span><span>о</span><span>р</span><span>и</span><span>н</span><span>г</span><span>а</span><span>.</span></p><p lang="es"><span>E</span><span>s</span><span>t</span><span>e</span><span> </span><span>d</span><span>o</span><span>m</span><span>i</span><span>n</span><span>i</span><span>o</span><span> </span><span>e</span><span>s</span><span>t</span><span>á</span><span> </span><span>d</span><span>e</span><span>s</span><span>t</span><span>i</span><span>n</span><span>a</span><span>d</span><span>o</span><span> </span><span>a</span><span>l</span><span> </span><span>u</span><span>s</span><span>o</span><span> </span><span>e</span><span>n</span><span> </span><span>e</span><span>j</span><span>e</span><span>m</span><span>p</span><span>l</span><span>o</span><span>s</span><span> </span><span>d</span><span>e</span><span> </span><span>d</span><span>o</span><span>c</span><span>u</span><span>m</span><span>e</span><span>n</span><span>t</span><span>a</span><span>c</span><span>i</span><span>ó</span><span>n</span><span> </span><span>s</span><span>i</span><span>n</span><span> </span><span>n</span><span>e</span><span>c</span><span>e</span><span>s</span><span>i</span><span>d</span><span>a</span><span>d</span><span> </span><span>d</span><span>e</span><span> </span><span>p</span><span>e</span><span>r</span><span>m</span><span>i</span><span>s</span><span>o</span><span>.</span><span> </span><span>E</span><span>s</span><span>t</span><span>o</span><span> </span><span>n</span><span>o</span><span> </span><span>e</span><span>s</span><span> </span><span>u</span><span>n</span><span> </span><span>s</span><span>e</span><span>r</span><span>v</span><span>i</span><span>c</span><span>i</span><span>o</span><span>,</span><span> </span><span>e</span><span>v</span><span>i</span><span>t</span><span>a</span><span>r</span><span> </span><span>u</span><span>t</span><span>i</span><span>l</span><span>i</span><span>z</span><span>a</span><span>r</span><span>l</span><span>o</span><span> </span><span>p</span><span>a</span><span>r</span><span>a</span><span> </span><span>r</span><span>e</span><span>a</span><span>l</span><span>i</span><span>z</span><span>a</span><span>r</span><span> </span><span>p</span><span>r</span><span>u</span><span>e</span><span>b</span><span>a</span><span>s</span><span> </span><span>o</span><span> </span><span>m</span><span>o</span><span>n</span><span>i</span><span>t</span><span>o</span><span>r</span><span>e</span><span>o</span><span>s</span><span>.</span></p><a href="https://iana.org/help/example-domains">Learn more</a><script src="/s.js"></script>
  2. </body></html>
Came back
raw HTML
Size
12,348 characters
Time
1,915 ms
Session
none, one call
operations 4 / 13

Look at the sizes. Steel, Kernel and Browserless hand back the raw HTML, stylesheet and all, for a page with a few sentences on it. Browserbase and Hyperbrowser answer in markdown. Playwright gives you innerText. Cloudflare gives markdown with a front matter block on top. Anchor says no.

None of that is a bug in this package. It's what the vendors return, and hiding it behind a fake "normalized" text would be worse. What the package does promise is the shape: a ScrapeResult with url and whichever of html, markdown, text, title and statusCode the vendor filled.

In TypeScript

ts
import { create } from "@agntn/browsers";

const provider = await create("cloudflare");
const page = await provider.scrape("https://example.com", {
  formats: ["markdown", "html"],
  waitFor: "main",
});

page.markdown;
page.html;
page.statusCode;

The options are formats, waitFor (a CSS selector), waitForNetworkIdle, screenshot, maxChars, timeout, script and headers. Not every vendor honours every one, so treat them as requests. Cloudflare is the generous one here. Ask it for html and markdown together, or add screenshot: true, and all of it comes out of one render.

Session or no session

capabilities().statelessScrape says whether a provider scrapes without a session. Kernel is the one that doesn't. provider.scrape(url) there wants a session as its third argument:

ts
const kernel = await create("kernel");
const session = await kernel.createSession();
try {
  const page = await kernel.scrape("https://example.com", {}, session);
} finally {
  await kernel.releaseSession(session.id);
}

The CLI and the agent tools do exactly this for you, finally included. Forget the release in your own code and the vendor keeps billing the browser until its own timeout. Don't.

The agent's version

browsers_scrape asks for markdown and hands the model text first, then markdown, then HTML, whichever exists. It stops at 20 000 characters unless you pass maxChars, up to 200 000, and says how much it cut:

text
[truncated 4200 of 24200 characters]

So a model never gets a silent half page. It gets told.

Kitesurf

Cloudflare's Browser Run has a second engine, Kitesurf. Opt in with create("cloudflare", { browser: "kitesurf" }), --browser kitesurf in the CLI, or browser: "kitesurf" on a tool. Leave it out and Cloudflare stays on Chromium.