Skip to main content
POST
Submit an asynchronous batch scrape job.
Scrape many URLs in a single asynchronous job. Provide a list of URLs; the batch runs in the background and you poll it for status and results. Lifecycle
  1. SubmitPOST /apis/v1/firecrawl/batch-scrape with the batch body and a required Idempotency-Key header. On success you get back 202 Accepted, a Location header pointing at the job resource (/apis/v1/firecrawl/batch-scrape/{jobId}), and a job object whose status starts as queued.
  2. PollGET /apis/v1/firecrawl/batch-scrape/{jobId} and repeat until status is terminal: completed, failed, or cancelled. When completed, the scraped documents are in output.
  3. ListGET /apis/v1/firecrawl/batch-scrape (optional limit, status, cursor query params).
  4. CancelPOST /apis/v1/firecrawl/batch-scrape/{jobId}/cancel.
Every URL must be a unique HTTPS URL and must not be a PDF; you can submit 1 to 1000 URLs per job. Billing is metered per Firecrawl credit — 1 credit per page scraped — so total cost scales with the pages actually processed. To follow links from a single root instead of listing URLs, use post_firecrawl-crawl.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Idempotency-Key
string
required

Unique key (1 to 191 characters) that makes the submit idempotent. Re-submitting with the same key returns the original job.

Maximum string length: 191

Body

application/json
urls
string<uri>[]
required

1 to 1000 unique HTTPS URLs to scrape. PDF URLs are not supported.

Required array length: 1 - 1000 elements
Example:
maxConcurrency
integer

Maximum number of concurrent scrapes (1 to 20).

Required range: 1 <= x <= 20
onlyMainContent
boolean
default:true

Return only the main content of each page.

includeTags
string[]

HTML tags/selectors to keep.

Maximum array length: 50
Maximum string length: 128
excludeTags
string[]

HTML tags/selectors to drop.

Maximum array length: 50
Maximum string length: 128
maxAge
integer

Maximum acceptable cache age in milliseconds.

Required range: 0 <= x <= 31536000000
minAge
integer

Minimum cache age in milliseconds before a page is refetched.

Required range: 0 <= x <= 31536000000
timeout
integer

Per-page timeout in milliseconds.

Required range: 1000 <= x <= 300000

Response

202 - application/json

Batch scrape job accepted. The Location header points at the job resource; poll it until terminal.

An asynchronous integration job. Returned by the submit call (HTTP 202) and by the poll/detail call. Poll the job by its id until status is a terminal value (completed, failed, or cancelled).

id
string

Unique AIsa job identifier. Use it to poll, list, or cancel the job.

Example:

"iaj_01HZY8Q2M4K7N9V3T6W1X0B2C3"

object
string

Always "integration_async_job".

Example:

"integration_async_job"

endpoint
string

The submit endpoint this job belongs to.

Example:

"/apis/v1/firecrawl/crawl"

status
enum<string>

Customer-facing lifecycle status. queued and running are non-terminal; completed, failed, and cancelled are terminal.

Available options:
queued,
running,
completed,
failed,
cancelled
createdAt
string<date-time>

When the job was accepted.

completedAt
string<date-time> | null

When the job reached a terminal status. Null while the job is still queued or running.

pricing
object
output
any | null

Job result payload. Present only once status is completed. For crawl this is the array of scraped pages; for batch scrape it is the array of scraped documents.

outputExpired
boolean

True when the result has been retained past its retention window and is no longer retrievable.

error
object | null

Present when status is failed. Null otherwise.