Skip to main content
Scraping in Reader means: fetch a URL, render it (if needed), extract the main content, and convert it to clean markdown. Under the hood this is a four-step pipeline:
  1. Fetch - Reader renders the page in a headless Chrome browser (Playwright engine) with JavaScript execution and proxy routing. See Scraping Engine.
  2. Extract - Reader identifies the main content area (article, main, largest text block), removes navigation, footers, sidebars, ads, and hidden elements.
  3. Convert - the cleaned HTML is converted to markdown via supermarkdown (a Rust-backed converter optimized for LLM input).

The scrape() primitive

scrape() takes one or more URLs and returns a ScrapeResult:
For a single URL, the call runs synchronously. For multiple URLs, set batchConcurrency to process them in parallel - see Batch Scraping.

Output formats

Reader supports two output formats:
  • markdown - cleaned, LLM-optimized markdown (default)
  • html - the cleaned HTML that markdown was generated from
You can request both in a single call:
Every result also includes metadata regardless of format, with the title, description, canonical URL, favicon, Open Graph tags, and Twitter Card tags.

What scraping is not

  • Crawling - scrape() only visits URLs you explicitly pass. It does not discover links. For that, use crawl().
  • Screenshots or PDFs - Reader is text-first. It does not produce rendered images of pages.
  • A JavaScript execution environment - while the Playwright engine runs JavaScript, Reader doesn’t expose the page object or let you run arbitrary browser scripts. It’s a scraping tool, not a general-purpose browser automation framework.

Where to go next

Content Extraction

How Reader decides what to keep and what to strip.

Scraping Engine

How the Playwright engine and proxy tiers work.

Basic Scraping guide

Practical recipes and patterns.

ScrapeOptions reference

Every option, every default.