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

# Fetch API

> Use Bright Data Fetch API to turn any public URL into Markdown, plain text, raw HTML and JSON-LD in one record. Best for up to 20 URLs per sync request.

Send any public URL, get the page back as Markdown, plain text, raw HTML and JSON-LD in a single record. Fetch API (formerly Crawl API) is the Scraper API equivalent of [Web Unlocker API](/products/web-unlocker/introduction): Bright Data handles proxies, CAPTCHAs and blocking, and the Fetch API returns the page content ready for an LLM or a parser.

<Tip>
  New to Bright Data? [Create a free account](https://brightdata.com/?hs_signup=1\&utm_source=docs) and get **5,000 free credits every month**, no credit card required. See the [free tier](/general/account/billing-and-pricing/free-tier).
</Tip>

## How it works

You send one or more URLs to the Bright Data Fetch API. Bright Data fetches each page and returns one record per URL with every output format bundled together.

```text theme={null}
Your app  -->  Bright Data API  -->  Markdown, text, HTML and JSON-LD
           POST /datasets/v3/scrape
           Authorization: Bearer YOUR_API_KEY
```

Every request uses the Fetch API `dataset_id`, `gd_m6gjtfmeh43we6cqc`, and returns results in NDJSON (default), JSON, JSON lines, CSV and Parquet. See [output formats](/products/scrapers/scrapers-library/data-delivery#which-output-formats-can-i-use).

## What the response looks like

A single record returned by the Bright Data Fetch API for `https://example.com` on October 19, 2026. Run the request yourself in the [quickstart](/products/scrapers/fetch-api/quickstart).

```json theme={null}
{
  "markdown": "This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.",
  "url": "https://example.com/",
  "final_url": "https://example.com/",
  "html2text": "This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for\ntesting and monitoring purposes.",
  "page_html": "<!doctype html><html lang=en><head><meta charset=utf-8>...<title>Example Domain</title>...</head><body><p>This domain is for use in documentation examples without needing permission. ...</p></body></html>\n",
  "page_title": "Example Domain",
  "country": null,
  "timestamp": "2026-10-19T18:10:21.213Z",
  "input": {
    "url": "https://example.com"
  }
}
```

The `page_html` value is trimmed here. The example page has no JSON-LD, so the record has no `ld_json` field.

## Which formats does Fetch API return?

<CardGroup cols={2}>
  <Card title="Markdown" icon="markdown" href="/api-reference/scrapers/web-content-apis/fetch-api-collect-by-url#output-fields">
    `markdown` keeps headings, lists and links, ready for an LLM prompt or a RAG index.
  </Card>

  <Card title="Plain text" icon="align-left" href="/api-reference/scrapers/web-content-apis/fetch-api-collect-by-url#output-fields">
    `html2text` strips every HTML tag and keeps only the visible text.
  </Card>

  <Card title="Raw HTML" icon="code" href="/api-reference/scrapers/web-content-apis/fetch-api-collect-by-url#output-fields">
    `page_html` is the complete HTML source, including tags, scripts and styles.
  </Card>

  <Card title="JSON-LD" icon="brackets-curly" href="/api-reference/scrapers/web-content-apis/fetch-api-collect-by-url#output-fields">
    `ld_json` holds the page's structured schema.org metadata, when the page has any.
  </Card>
</CardGroup>

Each record also carries `url`, `final_url` (the URL after redirects), `page_title` and `country`.

## Which dataset ID to use

The Fetch API has one endpoint, collect by URL. Pass the ID as a query parameter on every request.

| Endpoint | Dataset ID |
| :- | :- |
| Collect by URL | `gd_m6gjtfmeh43we6cqc` |

## Request methods

The Bright Data Scraper API supports two request methods. Choose based on your volume and latency needs.

| Method | Endpoint | Best for |
| :- | :- | :- |
| **Synchronous** | `/scrape` | Real-time lookups, up to 20 URLs |
| **Asynchronous** | [`/trigger`](/products/scrapers/scrapers-library/async-requests) | Batch jobs, 20 or more URLs, production pipelines |

Learn more in [Understanding sync vs. async requests](/concepts/sync-vs-async).

Both endpoints take an object with an `input` array, plus optional `limit_per_input` and `custom_output_fields`, or a `deliver` block on `/trigger`. A bare JSON array of inputs is also accepted, and the examples on this page use it. See [Request body](/api-reference/scrapers/synchronous-requests#request-body).

## Capabilities and limits

| Capability | Detail |
| :- | :- |
| **Output formats** | NDJSON (default), JSON, JSON lines, CSV and Parquet ([where each applies](/products/scrapers/scrapers-library/data-delivery#which-output-formats-can-i-use)) |
| **Max URLs per sync request** | 20 |
| **Max URLs per async request** | Unlimited, up to 1 GB of input per job |
| **Data freshness** | Real-time (scraped on demand) |
| **Delivery options** | API download, [webhook](/products/scrapers/scrapers-library/data-delivery), [Amazon S3](/products/scrapers/scrapers-library/data-delivery), Snowflake, Azure, GCS ([all destinations](/products/scrapers/scrapers-library/data-delivery)) |
| **Pricing** | Pay per successful record ([see pricing](https://brightdata.com/pricing/web-scraper)) |

## Common questions

### How is Fetch API different from Web Unlocker API?

Both unblock any public web page. They differ in how you call them and what you get back:

* **Web Unlocker API** is called at `/request` with a Web Unlocker zone and returns the target page's raw response, as-is or in a JSON envelope.
* **Fetch API** is called at `/datasets/v3/scrape` or `/datasets/v3/trigger` with a `dataset_id` and needs no zone. Each URL comes back as one record holding Markdown, plain text, raw HTML and JSON-LD together, and works with Scraper API batch jobs and [delivery options](/products/scrapers/scrapers-library/data-delivery).

### Is the page fetched in real time?

Yes. Each request fetches the live page. There is no cached copy. A synchronous request waits up to 1 minute, then returns HTTP `202` with a `snapshot_id` and continues asynchronously. Processing time varies with target-site conditions, so the Bright Data Fetch API does not publish a fixed response time.

### Which websites does Fetch API work on?

The Fetch API accepts any public URL on any domain. It is not tied to one platform the way the Instagram or Amazon scrapers are, and it does not parse site-specific fields such as prices or follower counts. Use a [platform scraper](/products/scrapers/overview) when you need those fields as structured JSON.

## Next steps

<CardGroup cols={3}>
  <Card title="Quickstart" icon="rocket" href="/products/scrapers/fetch-api/quickstart">
    Fetch your first page as Markdown in 5 minutes.
  </Card>

  <Card title="Endpoints" icon="bolt" href="/products/scrapers/fetch-api/send-first-request">
    Country targeting, field selection and batch requests.
  </Card>

  <Card title="API reference" icon="code" href="/api-reference/scrapers/web-content-apis/fetch-api-collect-by-url">
    Endpoint specs, parameters, and response schemas.
  </Card>
</CardGroup>
