---
title: "Start an async batch scrape over an explicit URL list"
method: POST
path: "/v1/batch/scrape"
tags: ["batch"]
---

# Start an async batch scrape over an explicit URL list

`POST /v1/batch/scrape`

## Request

- Base URL: `https://api.fastcrw.com`
- URL: `https://api.fastcrw.com/v1/batch/scrape`
- Auth: one of:
  - HTTP bearer
  - none

## Request body

- BatchScrapeRequest: Every `/v1/scrape` body field except `url` is accepted here and applied to each URL. See `ScrapeRequest` for the full set.
  - `urls` string[], required: URLs to scrape. Each is SSRF-validated; invalid entries are reported in invalidUrls.
  - `ignoreInvalidUrls` boolean: When false, a single invalid URL rejects the whole submit with 400.
  - `maxConcurrency` integer: How many URLs the job scrapes concurrently. Clamped server-side to crawler.max_batch_concurrency.
  - `formats` OutputFormat[]
  - `onlyMainContent` boolean

## Response `200`

Batch job accepted; poll with /v1/batch/scrape/{id}

- BatchScrapeAccepted
  - `success` boolean, required
  - `id` string, required: Batch job id; poll with GET /v1/batch/scrape/{id}
  - `invalidUrls` string[], required: Submitted URLs rejected by parsing or the SSRF guard, verbatim.

---

[API](https://skmtc.dev/fastcrw/apis/crw-rest-api.md) · [All operations](https://skmtc.dev/fastcrw/apis/crw-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fastcrw/apis/crw-rest-api/revisions/9bc1842aa048?raw)
