Skip to main content
This guide covers the 80% case: you have a URL (or a handful of URLs), you want the markdown, and you want it fast.

Single URL, markdown output

The response shape is always result.data[] - even for a single URL you get an array. The array length matches the number of URLs you passed.

Markdown + HTML

Request both formats in one call:
Each format field is optional - only present if you asked for it.

Access metadata

Every scrape includes rich metadata regardless of format:
This is how you get title/description/OG tags without a separate parse.

Disable main content extraction

By default Reader extracts only the main content. To capture the full page (including nav and footer):
Use this when you’re scraping a landing page or when the <main> detection isn’t picking up the right container.

Include/exclude selectors

For fine-grained control, pass CSS selectors:
includeTags runs first (keep only these), then excludeTags (remove these from what’s left).

Wait for dynamic content

If a page uses JavaScript to render content after load, tell Reader to wait:
waitForSelector tells Reader to wait until the specified CSS selector appears in the DOM before extracting content. Useful for SPAs that hydrate content client-side after the initial page load.

Reuse the client

Create one ReaderClient at startup and reuse it for every request. Don’t create-and-close per scrape - that defeats the browser pool:

Where to go next

Batch Scraping

Scrape many URLs in parallel with progress tracking.

Website Crawling

Discover and scrape every page on a domain.