POST
/batch/scrape
Firecrawl APIScrape multiple URLs and optionally extract information using an LLM
- Base URL
- https://api.firecrawl.dev/v1
- Auth
- Authorization: Bearer <FIRECRAWL_API_KEY>
- Last verified
- 2026-09-03 · upstream hash matched
Actions
Agents: curl -H "Accept: text/markdown" this URL
→ 224 tokens · Vary: Accept
→ 224 tokens · Vary: Accept
Critical gotchas
The formats field controls the output shape and defaults to ["markdown"]. Omitting it does not return HTML — request ["markdown","html"] explicitly.
/crawl is asynchronous: it returns a job id, and results are collected by polling /crawl/{id} until status is completed.
cURL
curl -X POST 'https://api.firecrawl.dev/v1/batch/scrape' \ -H "Authorization: Bearer $FIRECRAWL_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "urls": [ "https://example.com" ], "webhook": { "url": "string", "headers": {}, "metadata": {}, "events": [ "completed" ] }, "ignoreInvalidURLs": false, "formats": [ "markdown" ], "onlyMainContent": true, "includeTags": [ "string" ], "excludeTags": [ "string" ], "maxAge": 0, "headers": {}, "waitFor": 0, "mobile": false, "skipTlsVerification": false, "timeout": 30000, "parsePDF": true, "jsonOptions": { "schema": {}, "systemPrompt": "string", "prompt": "string" }, "actions": [ { "type": "wait", "milliseconds": 0, "selector": "#my-element" } ], "location": { "country": "US", "languages": [ "en-US" ] }, "removeBase64Images": true, "blockAds": true, "proxy": "basic", "changeTrackingOptions": { "modes": [ "git-diff" ], "schema": {}, "prompt": "string", "tag": null }, "storeInCache": true}'Get a free Firecrawl API key → sponsored
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| urls | body | string[] | Yes | Request body field urls. |
| webhook | body | object | No | A webhook specification object. |
| ignoreInvalidURLs | body | boolean | No | If invalid URLs are specified in the urls array, they will be ignored. Instead of them failing the entire request, a batch scrape using the remaining valid URLs will be created, and the invalid URLs will be returned in the invalidURLs field of the response. |
| formats | body | string[] | No | Formats to include in the output. `rawBase64` must be requested by itself. |
| onlyMainContent | body | boolean | No | Only return the main content of the page excluding headers, navs, footers, etc. |
| includeTags | body | string[] | No | Tags to include in the output. |
| excludeTags | body | string[] | No | Tags to exclude from the output. |
| maxAge | body | integer | No | Returns a cached version of the page if it is younger than this age in milliseconds. If a cached version of the page is older than this value, the page will be scraped. If you do not need extremely fresh data, enabling this can speed up your scrapes by 500%. Defaults to 0, which disables caching. |
| headers | body | object | No | Headers to send with the request. Can be used to send cookies, user-agent, etc. |
| waitFor | body | integer | No | Specify a delay in milliseconds before fetching the content, allowing the page sufficient time to load. |
| mobile | body | boolean | No | Set to true if you want to emulate scraping from a mobile device. Useful for testing responsive pages and taking mobile screenshots. |
| skipTlsVerification | body | boolean | No | Skip TLS certificate verification when making requests |
| timeout | body | integer | No | Timeout in milliseconds for the request |
| parsePDF | body | boolean | No | Controls how PDF files are processed during scraping. When true, the PDF content is extracted and converted to markdown format, with billing based on the number of pages (1 credit per page). When false, the PDF file is returned in base64 encoding with a flat rate of 1 credit total. |
| jsonOptions | body | object | No | JSON options object |
| actions | body | object[] | No | Actions to perform on the page before grabbing the content |
| location | body | object | No | Location settings for the request. When specified, this will use an appropriate proxy if available and emulate the corresponding language and timezone settings. Defaults to 'US' if not specified. |
| removeBase64Images | body | boolean | No | Removes all base 64 images from the output, which may be overwhelmingly long. The image's alt text remains in the output, but the URL is replaced with a placeholder. |
| blockAds | body | boolean | No | Enables ad-blocking and cookie popup blocking. |
| proxy | body | string | No | Specifies the type of proxy to use. - **basic**: Proxies for scraping sites with none to basic anti-bot solutions. Fast and usually works. - **enhanced**: Enhanced proxies for scraping sites with advanced anti-bot solutions. Slower, but more reliable on certain sites. Billed at the same credit cost as basic. - **auto**: Firecrawl will automatically retry scraping with enhanced proxies if the basic proxy fails. Enhanced proxies carry no credit surcharge, so either way only the regular cost is billed. If you do not specify a proxy, Firecrawl will default to basic. |
| changeTrackingOptions | body | object | No | Options for change tracking (Beta). Only applicable when 'changeTracking' is included in formats. The 'markdown' format must also be specified when using change tracking. |
| storeInCache | body | boolean | No | If true, the page will be stored in the Firecrawl index and cache. Setting this to false is useful if your scraping activity may have data protection concerns. Using some parameters associated with sensitive scraping (actions, headers) will force this parameter to be false. |
Response 200 OK
{
"success": true,
"id": "string",
"url": "https://example.com",
"invalidURLs": [
"string"
]
}