# Firecrawl

Web search with explicitly separate scraping, extraction, crawl, and monitor operations.

Canonical: https://searchsdk.dev/docs/providers/firecrawl
Markdown: https://searchsdk.dev/docs/providers/firecrawl.md

<a id="overview"></a>

## Normalized search

> **TypeScript reference**
> The API names, code and policy behavior in this article describe the TypeScript SDK. See [your language guide](https://searchsdk.dev/docs/sdks) for its supported surface and limits.

Normalized search selects ordinary web sources and caps output. Optional page scraping and other result categories are not folded into web snippets. Provider-native responses keep scrape and per-page outcome information.

**firecrawl-search.ts · server**

```typescript
import { createSearch } from '@belweave/search-sdk';
import { firecrawl } from '@belweave/search-sdk/firecrawl';

const apiKey = process.env.FIRECRAWL_API_KEY;
if (!apiKey) throw new Error('FIRECRAWL_API_KEY is required');

const client = createSearch({ provider: firecrawl({ apiKey }) });
const response = await client.web.search({
  query: 'SQLite write concurrency',
  limit: 5,
});
console.log(response.results, response.attempts);
```

Opting into scraping adds retrieval work and can produce partial failures. Treat image, news, and specialized indexes as separate material. The native endpoint inventory reflects the pinned SDK mapping rather than a guarantee of every future provider extension.

100 include or 100 exclude under conservative SDK policy; both lists cannot be combined. Query ceiling: 500 UTF-16 code units.

<a id="native-client"></a>

## Provider-native client

**firecrawl-native.ts · server**

```typescript
import { createFirecrawlClient } from '@belweave/search-sdk/native-firecrawl';

const apiKey = process.env.FIRECRAWL_API_KEY;
if (!apiKey) throw new Error('FIRECRAWL_API_KEY is required');

const client = createFirecrawlClient({ apiKey, timeoutMs: 10_000 });
const response = await client.search({ body: { query: 'SQLite write concurrency', limit: 5, sources: [{ type: 'web' }] } });
console.log(response.data, response.metadata);
```

Read provider data from `response.data` and sanitized transport details from `response.metadata`. Native TypeScript response types are not runtime schema validation. Preserve the operation's native response and source identities.

<a id="operations"></a>

## Native operation inventory

Methods available on this native client. Paths are relative to each operation's fixed base; a provider may use more than one origin. Eligible operations retry only when you opt into a client retry policy.

| Method | HTTP / relative path | Response / retry eligibility |
| --- | --- | --- |
| `createMonitor` | `POST /monitor` | json · no automatic retry |
| `listMonitors` | `GET /monitor` | json · eligible |
| `getMonitor` | `GET /monitor/{monitorId}` | json · eligible |
| `updateMonitor` | `PATCH /monitor/{monitorId}` | json · no automatic retry |
| `deleteMonitor` | `DELETE /monitor/{monitorId}` | json · no automatic retry |
| `runMonitor` | `POST /monitor/{monitorId}/run` | json · no automatic retry |
| `listMonitorChecks` | `GET /monitor/{monitorId}/checks` | json · eligible |
| `getMonitorCheck` | `GET /monitor/{monitorId}/checks/{checkId}` | json · eligible |
| `scrape` | `POST /scrape` | json · no automatic retry |
| `interactWithScrapeBrowserSession` | `POST /scrape/{jobId}/interact` | json · no automatic retry |
| `stopInteractiveScrapeBrowserSession` | `DELETE /scrape/{jobId}/interact` | json · no automatic retry |
| `parseFile` | `POST /parse` | json · no automatic retry |
| `getParseFormats` | `GET /parse/formats` | json · eligible |
| `batchScrape` | `POST /batch/scrape` | json · no automatic retry |
| `getBatchScrapeStatus` | `GET /batch/scrape/{id}` | json · eligible |
| `cancelBatchScrape` | `DELETE /batch/scrape/{id}` | json · no automatic retry |
| `getBatchScrapeErrors` | `GET /batch/scrape/{id}/errors` | json · eligible |
| `getCrawlStatus` | `GET /crawl/{id}` | json · eligible |
| `cancelCrawl` | `DELETE /crawl/{id}` | json · no automatic retry |
| `getCrawlErrors` | `GET /crawl/{id}/errors` | json · eligible |
| `crawl` | `POST /crawl` | json · no automatic retry |
| `crawlParamsPreview` | `POST /crawl/params-preview` | json · no automatic retry |
| `map` | `POST /map` | json · no automatic retry |
| `extract` | `POST /extract` | json · no automatic retry |
| `getExtractStatus` | `GET /extract/{id}` | json · eligible |
| `listAgents` | `GET /agent` | json · eligible |
| `startAgent` | `POST /agent` | json · no automatic retry |
| `getAgentStatus` | `GET /agent/{jobId}` | json · eligible |
| `cancelAgent` | `DELETE /agent/{jobId}` | json · no automatic retry |
| `getAgentTrace` | `GET /agent/{jobId}/trace` | json · eligible |
| `getAgentSnapshot` | `GET /agent/{jobId}/snapshots/{snapshotId}` | json · eligible |
| `getActiveCrawls` | `GET /crawl/active` | json · eligible |
| `getCreditUsage` | `GET /team/credit-usage` | json · eligible |
| `getHistoricalCreditUsage` | `GET /team/credit-usage/historical` | json · eligible |
| `getTokenUsage` | `GET /team/token-usage` | json · eligible |
| `getHistoricalTokenUsage` | `GET /team/token-usage/historical` | json · eligible |
| `getQueueStatus` | `GET /team/queue-status` | json · eligible |
| `getActivity` | `GET /team/activity` | json · eligible |
| `search` | `POST /search` | json · no automatic retry |
| `createBrowserSession` | `POST /interact` | json · no automatic retry |
| `listBrowserSessions` | `GET /interact` | json · eligible |
| `executeBrowserCode` | `POST /interact/{sessionId}/execute` | json · no automatic retry |
| `deleteBrowserSession` | `DELETE /interact/{sessionId}` | json · no automatic retry |
| `getScrapeStatus` | `GET /scrape/{jobId}` | json · eligible |
| `submitSearchFeedback` | `POST /search/{jobId}/feedback` | json · no automatic retry |
| `askSupportAgent` | `POST /support/ask` | json · no automatic retry |
| `searchSupportDocs` | `POST /support/docs-search` | json · no automatic retry |
| `researchSearchPapers` | `GET /search/research/papers` | json · eligible |
| `researchGetPaper` | `GET /search/research/papers/{id}` | json · eligible |
| `researchRelatedPapers` | `GET /search/research/papers/{id}/similar` | json · eligible |
| `developerSearch` | `GET /search/developer` | json · eligible |
| `developerSearchPost` | `POST /search/developer` | json · no automatic retry |
| `govSearch` | `GET /search/gov` | json · eligible |
| `govSearchPost` | `POST /search/gov` | json · no automatic retry |
| `submitEndpointFeedback` | `POST /feedback` | json · no automatic retry |
| `getThreatProtection` | `GET /team/threat-protection` | json · eligible |
| `updateThreatProtection` | `PUT /team/threat-protection` | json · no automatic retry |

<a id="lifecycle"></a>

## Limits and operation lifecycle

- Pass `signal` and per-call `timeoutMs` on native request input when needed.
- Persist a returned job identifier before explicitly reading or polling the same job. Native clients do not automatically poll.
- SSE data is incremental provider event text. Parse and validate terminal or error events according to the provider contract; there is no reconnect or replay.
- Native operations may create, delete, ingest, or incur charges. A successful HTTP response is not proof that a remote job completed.

<a id="sources"></a>

## Official sources

Use the official reference for current schemas, account access, and operation-specific requirements.

- [Search documentation](https://docs.firecrawl.dev/features/search)
- [Documentation index](https://docs.firecrawl.dev/llms.txt)

- [Native request and response reference](https://searchsdk.dev/docs/api/native-transport)
- [All providers](https://searchsdk.dev/docs/providers)
