Browser Tools

One-shot endpoints for scraping pages, capturing screenshots, and generating PDFs without managing a session yourself.

Overview

Browser Tools are stateless, single-call endpoints that spin up a managed browser, perform one action against a URL, and return the result. They are the fastest way to pull content off a page when you do not need to drive a long-running session.

EndpointWhat it does
POST /v1/scrapeLoads a URL and returns HTML, cleaned HTML, Markdown, or Readability.
POST /v1/screenshotLoads a URL and returns a hosted PNG of the page.
POST /v1/pdfLoads a URL and returns a hosted PDF of the page.

Each call counts as 1 credit and is rate limited to 20 requests per minute per organization. Reach for Sessions instead when you need cookies, multi-step navigation, or extension state.

Scrape

POST /v1/scrape extracts the contents of a single page. The response always includes content, metadata, and links; pass format to control which content variants come back.

1
import Steel from "steel-sdk";
2
3
const client = new Steel();
4
5
const result = await client.scrape({
6
url: "https://docs.steel.dev",
7
format: ["markdown", "readability"],
8
});
9
10
console.log(result.content.markdown);
11
console.log(result.metadata.title);

The supported formats map to fields on content:

FormatFieldUse when
htmlcontent.htmlYou want the raw DOM after JS execution. Default if format is omitted.
cleaned_htmlcontent.cleaned_htmlYou want stripped-down HTML without scripts, styles, ads.
markdowncontent.markdownYou're feeding the page into an LLM.
readabilitycontent.readabilityYou want Mozilla Readability's article extraction object.

metadata carries the usual SEO fields (title, description, canonical, Open Graph tags, JSON-LD, statusCode, etc.) and links is a flat array of every anchor on the page.

Bundle a screenshot or PDF

Set screenshot: true or pdf: true on a scrape call to capture both content and a hosted file in a single request. The screenshot and PDF come back as hosted URLs alongside the scraped content.

1
const result = await client.scrape({
2
url: "https://docs.steel.dev",
3
format: ["markdown"],
4
screenshot: true,
5
pdf: true,
6
});
7
8
console.log(result.screenshot?.url);
9
console.log(result.pdf?.url);

Screenshot

POST /v1/screenshot returns a hosted PNG. Use fullPage: true to capture the entire scrollable page instead of just the viewport.

1
const result = await client.screenshot({
2
url: "https://docs.steel.dev",
3
fullPage: true,
4
});
5
6
console.log(result.url); // https://files.steel.dev/v1/static/<id>.png

The hosted URL is public and durable. Download it like any other PNG:

PDF

POST /v1/pdf renders the page and returns a hosted PDF URL. Same shape as screenshot: one URL in, one URL out.

1
const result = await client.pdf({
2
url: "https://docs.steel.dev",
3
});
4
5
console.log(result.url); // https://files.steel.dev/v1/static/<id>.pdf

Shared options

All three endpoints accept the same handful of options for controlling how the page is loaded.

OptionTypeWhat it does
useProxybooleanRoute the request through a Steel-managed residential proxy. Paid plans only.
delaynumberMilliseconds to wait after navigation before capturing. Useful for hydrated sites.

A common pattern for client-rendered pages is to combine delay with a residential proxy:

1
const result = await client.scrape({
2
url: "https://example.com/pricing",
3
format: ["markdown"],
4
delay: 5000,
5
useProxy: true,
6
});
Hobby plans cannot use Steel proxies on Browser Tools

useProxy: true returns 402 Payment Required on the hobby plan. Upgrade, or pass your own proxy by opening a Session and scraping through it.

Errors

StatusMeaning
402useProxy: true requested on a plan that does not allow it.
408The browser timed out before completing the action.
429Concurrent session limit for your plan reached, or 20 RPM hit.
503No browser capacity available right now. Safe to retry.

When to use Sessions instead

Browser Tools are stateless. Each call opens a fresh browser, performs the action, and tears down. Reach for a Session when you need to:

  • Persist cookies or local storage across navigations
  • Submit forms, click through flows, or interact with the page
  • Pin a proxy to a specific country (useProxy: { geolocation: { country } })
  • Reuse an authenticated profile or extension

You can still scrape, screenshot, or generate a PDF from inside a session. The Browser Tools endpoints are just the shortcut when you don't need the rest.

Need help with Browser Tools?

Reach out to us on the #help channel on Discord under the ⭐ community section.