> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zenrows.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> The Zenrows API (Fetch, Extract via extract=auto, and Batch) is described in OpenAPI 3.1 at https://www.zenrows.com/openapi.json and listed in the RFC 9727 API catalog at https://www.zenrows.com/.well-known/api-catalog. Use the spec for exact parameter names and types.

# Choose the right Zenrows primitive

> How Fetch, Extract, Crawl, Batch and Browser fit together, which one fits each job, and how to combine them.

Zenrows gives you five primitives. Each one does one job well, and they share the same account, credits and access to protected sites, so they combine without glue code. This page explains what each one is for and how they work together.

## The five primitives

| Primitive | What you give it | What you get back | Reach for it when |
| - | - | - | - |
| [**Fetch**](/fetch/api-reference) | One URL | The page as HTML, markdown, plain text, PDF, screenshot or selected fields | You need the content of a page, now |
| [**Extract**](/extract/introduction) | One URL, with `extract=auto` on Fetch | Structured JSON: products, listings, articles, jobs | You need fields, not a page to parse |
| [**Crawl**](/crawl/introduction) | One start URL and filters | Every matching URL on the site, with each page's HTML | You don't know the URLs yet |
| [**Batch**](/batch/introduction) | A list of URLs of any length | One job with a result per URL, on demand or on a schedule | You know the URLs and want them all |
| [**Browser**](/browser-sessions/introduction) | A WebSocket connection from Playwright, Puppeteer or an agent | A live cloud browser your code or agent drives | The task needs clicks, logins, forms or many steps |

Fetch is the foundation. Extract is a Fetch parameter, and Crawl and Batch run Fetch requests for you at scale. Browser is the interactive counterpart: instead of one request per page, your code or agent keeps a real browser open and acts in it.

## Read, or act?

The first question is whether the job is about **reading** a page or **acting** on it.

* **Reading**: getting text, prices, listings, links or a screenshot from pages a URL leads to. Fetch handles reading, including JavaScript rendering, scripted clicks and scrolls with [`js_instructions`](/fetch/features/js-instructions), and anti-bot protection with [Adaptive Stealth Mode](/fetch/features/adaptive-stealth-mode). Every request is independent, so reading scales with your list.
* **Acting**: logging in, filling a multi-step form, adding to a cart, following whatever the page shows next. Browser handles acting. Your code or agent holds the session and decides each next step from what it sees.

Most data jobs are reading jobs. Choose Browser when the next step depends on the last one.

## How many pages?

Once you know you're reading, the number of pages picks the primitive:

| Pages | Primitive |
| - | - |
| One page | Fetch, or Fetch with `extract=auto` for JSON |
| A handful, in your own loop | Fetch with your HTTP client's concurrency, see [Run many requests concurrently](/academy/fetch/concurrent-requests) |
| A known list of any size | Batch |
| A whole site or section, URLs unknown | Crawl, then Batch or Fetch for the content you want |
| The same pages every day | A scheduled Batch job |

## Page, or fields?

Fetch returns the page. Choose the shape that matches what you do next:

* **For an LLM or a RAG index**: `response_type=markdown` or `plaintext`.
* **For your database**: `extract=auto` returns ready-made fields for products, real estate, jobs, travel and more. `css_extractor` returns exactly the selectors you name.
* **For a human or an audit trail**: `screenshot` or `response_type=pdf`.

## Combine primitives

The primitives are built to chain. The most common combinations:

| Goal | Combination | Recipe |
| - | - | - |
| A structured dataset of a whole catalog | Crawl, then Batch with `extract=auto` | [Catalog dataset](/academy/pipelines/catalog-dataset) |
| A knowledge base for an AI assistant | Crawl, then Batch with `response_type=markdown` | [Website to RAG](/academy/pipelines/website-to-rag) |
| Daily price tracking | Scheduled Batch with `extract=auto`, then compare | [Price monitor](/academy/build-price-monitoring) |
| An agent that reads fast and acts when needed | Fetch for reading, Browser for interaction | [Fetch with Browser fallback](/academy/pipelines/fetch-with-browser-fallback) |
| Alerts when a page changes | Fetch or scheduled Batch, then diff | [Change detection](/academy/pipelines/change-detection) |
| Answers grounded in live sources | Fetch through MCP inside an agent loop | [Research agent](/academy/pipelines/research-agent) |

## Pick your surface

Every primitive is available from the surface you already work in:

| Surface | Best for | Start here |
| - | - | - |
| **API** | Any language, any stack. One endpoint, parameters in the query string | [API overview](/api-reference) |
| **SDKs** | Python, Node.js and Go apps that want typed clients, retries and concurrency | [SDK overview](/sdk/overview) |
| **CLI** | Terminals, shell scripts, cron jobs and coding agents | [CLI workflows](/academy/surfaces/cli-workflows) |
| **MCP** | AI assistants and agents, in plain language | [Connect your AI agent](/academy/connect-your-ai-agent) |
| **No-code** | n8n, Make, Zapier and Clay workflows | [Integrations](/integrations/overview) |

Each surface keeps its own native shape: the API speaks parameters, the CLI speaks commands (`zenrows fetch`, `extract`, `crawl`, `batch`, `browser`), MCP speaks tools (`scrape`, `extract`, `crawl_*`, `batch_*`, `browser_*`), and the SDKs mirror the API. The recipes show each one in its own terms.

The name Extract appears on more than one surface. On the API, Extract is the `extract=auto` parameter on Fetch. The CLI's `zenrows extract` command and the MCP `extract` tool cover `extract=auto` and CSS selectors (`css_extractor`), and you pick the mechanism with a flag or a tool argument.

## Start building

<CardGroup cols={2}>
  <Card title="Lesson 1: Make your first request" icon="school" href="/academy/foundations/first-request">
    Start the six-lesson course that uses all five primitives on one project.
  </Card>

  <Card title="Scrape pages protected by anti-bot systems" icon="shield-check" href="/academy/fetch/protected-sites">
    The Fetch recipe most projects start with.
  </Card>

  <Card title="Get structured JSON from any page" icon="wand" href="/academy/extract/auto-extraction">
    Fields from any page with `extract=auto`.
  </Card>

  <Card title="Connect Playwright or Puppeteer to Zenrows Browser" icon="click" href="/academy/browser/connect-playwright-and-puppeteer">
    Drive Zenrows Browser from your code or agent.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.