POST
/extract
Firecrawl APIExtract structured data from pages using LLMs
- 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
→ 223 tokens · Vary: Accept
→ 223 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/extract' \ -H "Authorization: Bearer $FIRECRAWL_API_KEY" \ -H 'Content-Type: application/json' \ -d '{ "urls": [ "https://example.com" ], "prompt": "string", "schema": {}, "enableWebSearch": false, "ignoreSitemap": false, "includeSubdomains": true, "showSources": false, "scrapeOptions": { "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 }, "ignoreInvalidURLs": false}'Get a free Firecrawl API key → sponsored
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| urls | body | string[] | Yes | Request body field urls. |
| prompt | body | string | No | Prompt to guide the extraction process |
| schema | body | object | No | Schema to define the structure of the extracted data. Must conform to [JSON Schema](https://json-schema.org/). |
| enableWebSearch | body | boolean | No | When true, the extraction will use web search to find additional data |
| ignoreSitemap | body | boolean | No | When true, sitemap.xml files will be ignored during website scanning |
| includeSubdomains | body | boolean | No | When true, subdomains of the provided URLs will also be scanned |
| showSources | body | boolean | No | When true, the sources used to extract the data will be included in the response as `sources` key |
| scrapeOptions | body | object | No | Request body field scrapeOptions. |
| ignoreInvalidURLs | body | boolean | No | If invalid URLs are specified in the urls array, they will be ignored. Instead of them failing the entire request, an extract using the remaining valid URLs will be performed, and the invalid URLs will be returned in the invalidURLs field of the response. |
Response 200 OK
{
"success": true,
"id": "string",
"invalidURLs": [
"string"
]
}