> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firecrawl.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Guia Avançado de Scraping

> Configure opções de scraping, ações do navegador, rastreamento, map e o endpoint do agente em toda a API do Firecrawl.

Referência para todas as opções em todos os endpoints de scraping, rastreamento, mapeamento e agente do Firecrawl."

<div id="basic-scraping">
  ## scraping básica
</div>

Para raspar uma única página e obter conteúdo em Markdown limpo, use o endpoint `/scrape`.

<CodeGroup>
  ```python Python theme={null}
  # pip install firecrawl-py

  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

  doc = firecrawl.scrape("https://firecrawl.dev")

  print(doc.markdown)
  ```

  ```js Node theme={null}
  // npm install firecrawl

  import { Firecrawl } from 'firecrawl-js';

  const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR-API-KEY' });

  const doc = await firecrawl.scrape('https://firecrawl.dev');

  console.log(doc.markdown);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/scrape \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer fc-YOUR-API-KEY' \
      -d '{
        "url": "https://docs.firecrawl.dev"
      }'
  ```
</CodeGroup>

<div id="scraping-pdfs">
  ## Extração de PDFs
</div>

O Firecrawl oferece suporte a PDFs. Use a opção `parsers` (por exemplo, `parsers: ["pdf"]`) quando quiser garantir a extração de PDFs. Você pode controlar a estratégia de extração com a opção `mode`:

* **`auto`** (padrão) — tenta primeiro uma extração rápida baseada em texto e, se necessário, recorre a OCR.
* **`fast`** — apenas extração baseada em texto (texto embutido). Mais rápido, mas ignora páginas digitalizadas ou com muitas imagens.
* **`ocr`** — força a extração via OCR em todas as páginas. Use para documentos digitalizados ou quando `auto` classificar uma página incorretamente.

`{ type: "pdf" }` e `"pdf"` usam por padrão `mode: "auto"`.

```json theme={null}
"parsers": [{ "type": "pdf", "mode": "fast", "maxPages": 50 }]
```

<div id="scrape-options">
  ## Opções de scraping
</div>

Ao usar o endpoint `/scrape`, você pode personalizar a requisição com as seguintes opções.

<div id="formats-formats">
  ### Formatos (`formats`)
</div>

O array `formats` controla quais tipos de saída o scraper retorna. Padrão: `["markdown"]`.

**Formatos em string**: passe o nome diretamente (por exemplo, `"markdown"`).

| Formato    | Descrição                                                                                                                                                     |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `markdown` | Conteúdo da página convertido para Markdown limpo.                                                                                                            |
| `html`     | HTML processado com elementos desnecessários removidos.                                                                                                       |
| `rawHtml`  | HTML original exatamente como retornado pelo servidor.                                                                                                        |
| `links`    | Todos os links encontrados na página.                                                                                                                         |
| `images`   | Todas as imagens encontradas na página.                                                                                                                       |
| `summary`  | Um resumo gerado por um LLM do conteúdo da página.                                                                                                            |
| `branding` | Extrai a identidade de marca (cores, fontes, tipografia, espaçamento, componentes de UI).                                                                     |
| `product`  | Extrai um produto estruturado (título, preço, disponibilidade, imagens e variantes) de páginas de produto por meio de dados estruturados de múltiplas fontes. |

**Formatos em objeto**: passe um objeto com `type` e opções adicionais.

| Formato          | Opções                                                                                   | Descrição                                                                                                                                                  |
| ---------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `json`           | `prompt?: string`, `schema?: object`                                                     | Extrai dados estruturados usando um LLM. Forneça um schema JSON e/ou um prompt em linguagem natural (máx. 10.000 caracteres).                              |
| `screenshot`     | `fullPage?: boolean`, `quality?: number`, `viewport?: { width, height }`                 | Captura uma captura de tela. No máximo uma por requisição. A resolução máxima do viewport é 7680×4320. As URLs das capturas de tela expiram após 24 horas. |
| `changeTracking` | `modes?: ("json" \| "git-diff")[]`, `tag?: string`, `schema?: object`, `prompt?: string` | Rastreio de mudanças entre scrapes. Requer que `"markdown"` também esteja no array de formatos.                                                            |
| `attributes`     | `selectors: [{ selector: string, attribute: string }]`                                   | Extrai atributos HTML específicos de elementos que correspondem a seletores CSS.                                                                           |

<div id="mobile-scraping">
  ### Scraping móvel
</div>

Defina `mobile: true` para emular um dispositivo móvel. Isso é útil quando um site responsivo oculta conteúdo na versão desktop ou exibe um layout diferente em navegadores móveis.

Para sites específicos de uma região, combine com `location` e uma captura de tela em um dispositivo móvel para verificar o layout renderizado:

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

  doc = firecrawl.scrape(
      "https://example.com",
      mobile=True,
      location={"country": "GB", "languages": ["en-GB"]},
      formats=[
          "markdown",
          {"type": "screenshot", "fullPage": True, "viewport": {"width": 390, "height": 844}},
      ],
      only_main_content=False,
      wait_for=2000,
  )

  print(doc.markdown)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl-js';

  const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR-API-KEY' });

  const doc = await firecrawl.scrape('https://example.com', {
    mobile: true,
    location: { country: 'GB', languages: ['en-GB'] },
    formats: [
      'markdown',
      { type: 'screenshot', fullPage: true, viewport: { width: 390, height: 844 } },
    ],
    onlyMainContent: false,
    waitFor: 2000,
  });

  console.log(doc.markdown);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/scrape \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer fc-YOUR-API-KEY' \
    -d '{
      "url": "https://example.com",
      "mobile": true,
      "location": {
        "country": "GB",
        "languages": ["en-GB"]
      },
      "formats": [
        "markdown",
        { "type": "screenshot", "fullPage": true, "viewport": { "width": 390, "height": 844 } }
      ],
      "onlyMainContent": false,
      "waitFor": 2000
    }'
  ```
</CodeGroup>

Se o site ainda exibir um layout para desktop apesar de `mobile: true`, adicione um User-Agent mobile via `headers`:

```json theme={null}
{
  "headers": {
    "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"
  }
}
```

<div id="content-filtering">
  ### Filtragem de conteúdo
</div>

Esses parâmetros controlam quais partes da página aparecem na saída. Quando `onlyMainContent` é `true` (o padrão), o boilerplate (nav, footer etc.) é removido. `includeTags` e `excludeTags` são aplicados ao DOM original da página, não ao resultado após a filtragem, portanto seus seletores devem segmentar os elementos conforme aparecem no HTML de origem. Defina `onlyMainContent: false` para usar a página completa como ponto de partida para a filtragem por tags.

| Parâmetro         | Tipo      | Padrão | Descrição                                                                                                                                              |
| ----------------- | --------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `onlyMainContent` | `boolean` | `true` | Retorna apenas o conteúdo principal. Defina como `false` para retornar a página completa.                                                              |
| `includeTags`     | `array`   | —      | Seletores CSS a serem incluídos — tags, classes, IDs ou seletores de atributo (por exemplo, `["h1", "p", ".main-content", "[data-testid=\"main\"]"]`). |
| `excludeTags`     | `array`   | —      | Seletores CSS a serem excluídos — tags, classes, IDs ou seletores de atributo (por exemplo, `["#ad", "#footer", "[role=\"banner\"]"]`).                |

<div id="timing-and-cache">
  ### Tempo e cache
</div>

| Parâmetro | Tipo           | Padrão      | Descrição                                                                                                                                       |
| --------- | -------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `waitFor` | `integer` (ms) | `0`         | Tempo extra de espera antes do scraping, além do smart-wait. Use com moderação.                                                                 |
| `maxAge`  | `integer` (ms) | `172800000` | Retorne uma versão em cache se estiver mais recente do que esse valor (o padrão é 2 dias). Defina `0` para sempre buscar uma versão atualizada. |
| `timeout` | `integer` (ms) | `60000`     | Duração máxima da requisição antes de abortar (o padrão é 60 segundos). O mínimo é 1000 (1 segundo).                                            |

<div id="pdf-parsing">
  ### Análise de PDF
</div>

| Parâmetro | Tipo    | Padrão    | Descrição                                                                                             |
| --------- | ------- | --------- | ----------------------------------------------------------------------------------------------------- |
| `parsers` | `array` | `["pdf"]` | Controla o processamento de PDFs. Use `[]` para ignorar a análise e retornar base64 (1 crédito fixo). |

```json theme={null}
{ "type": "pdf", "mode": "fast" | "auto" | "ocr", "maxPages": 10 }
```

| Propriedade | Tipo                        | Padrão          | Descrição                                                                                |
| ----------- | --------------------------- | --------------- | ---------------------------------------------------------------------------------------- |
| `type`      | `"pdf"`                     | *(obrigatório)* | Tipo de parser.                                                                          |
| `mode`      | `"fast" \| "auto" \| "ocr"` | `"auto"`        | `fast`: extração somente de texto. `auto`: fast com OCR como fallback. `ocr`: força OCR. |
| `maxPages`  | `integer`                   | —               | Limita o número de páginas a serem analisadas.                                           |

<div id="actions">
  ### Ações
</div>

Execute ações no navegador antes do scraping. Isso é útil para conteúdo dinâmico, navegação ou páginas com acesso restrito. Você pode incluir até 50 ações por requisição, e o tempo total de espera entre todas as ações `wait` e `waitFor` não pode exceder 60 segundos.

| Ação                | Parâmetros                                                               | Descrição                                                                                                                                                 |
| ------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `wait`              | `milliseconds?: number`, `selector?: string`                             | Aguarde por um tempo fixo **ou** até que um elemento fique visível (informe um ou outro, não ambos). Ao usar `selector`, o tempo limite é de 30 segundos. |
| `click`             | `selector: string`, `all?: boolean`                                      | Clique em um elemento que corresponda ao seletor CSS. Defina `all: true` para clicar em todas as correspondências.                                        |
| `write`             | `text: string`                                                           | Digite texto no campo atualmente em foco. Primeiro, você deve focar o elemento com uma ação `click`.                                                      |
| `press`             | `key: string`                                                            | Pressione uma tecla do teclado (por exemplo, `"Enter"`, `"Tab"`, `"Escape"`).                                                                             |
| `scroll`            | `direction?: "up" \| "down"`, `selector?: string`                        | Role a página ou um elemento específico. A direção padrão é `"down"`.                                                                                     |
| `screenshot`        | `fullPage?: boolean`, `quality?: number`, `viewport?: { width, height }` | Faça uma captura de tela. A resolução máxima da viewport é 7680×4320.                                                                                     |
| `scrape`            | *(nenhum)*                                                               | Capture o HTML atual da página neste ponto da sequência de ações.                                                                                         |
| `executeJavascript` | `script: string`                                                         | Execute código JavaScript na página. Os valores retornados ficam disponíveis no array `actions.javascriptReturns` da resposta.                            |
| `pdf`               | `format?: string`, `landscape?: boolean`, `scale?: number`               | Gere um PDF. Formatos compatíveis: `"A0"` a `"A6"`, `"Letter"`, `"Legal"`, `"Tabloid"`, `"Ledger"`. O padrão é `"Letter"`.                                |

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key='fc-YOUR-API-KEY')

  doc = firecrawl.scrape('https://example.com', {
    'actions': [
      { 'type': 'wait', 'milliseconds': 1000 },
      { 'type': 'click', 'selector': '#accept' },
      { 'type': 'scroll', 'direction': 'down' },
      { 'type': 'click', 'selector': '#q' },
      { 'type': 'write', 'text': 'firecrawl' },
      { 'type': 'press', 'key': 'Enter' },
      { 'type': 'wait', 'milliseconds': 2000 }
    ],
    'formats': ['markdown']
  })

  print(doc.markdown)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl-js';

  const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR-API-KEY' });

  const doc = await firecrawl.scrape('https://example.com', {
    actions: [
      { type: 'wait', milliseconds: 1000 },
      { type: 'click', selector: '#accept' },
      { type: 'scroll', direction: 'down' },
      { type: 'click', selector: '#q' },
      { type: 'write', text: 'firecrawl' },
      { type: 'press', key: 'Enter' },
      { type: 'wait', milliseconds: 2000 }
    ],
    formats: ['markdown']
  });

  console.log(doc.markdown);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/scrape \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer fc-YOUR-API-KEY' \
    -d '{
      "url": "https://example.com",
      "actions": [
        { "type": "wait", "milliseconds": 1000 },
        { "type": "click", "selector": "#accept" },
        { "type": "scroll", "direction": "down" },
        { "type": "click", "selector": "#q" },
        { "type": "write", "text": "firecrawl" },
        { "type": "press", "key": "Enter" },
        { "type": "wait", "milliseconds": 2000 }
      ],
      "formats": ["markdown"]
    }'
  ```
</CodeGroup>

<div id="action-execution-notes">
  #### Observações sobre a execução de ações
</div>

* **Write** requer um `click` anterior para focar o elemento de destino.
* **Scroll** aceita um `selector` opcional para rolar um elemento específico em vez da página.
* **Wait** aceita `milliseconds` (atraso fixo) ou `selector` (esperar até que fique visível).
* As ações são executadas **sequencialmente**: cada etapa é concluída antes da próxima começar.
* Ações **não são compatíveis com PDFs**. Se a URL for resolvida para um PDF, a requisição falhará.

<div id="advanced-action-examples">
  #### Exemplos de Ações Avançadas
</div>

**Fazendo uma captura de tela:**

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/scrape \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY' \
  -d '{
    "url": "https://example.com",
    "actions": [
      { "type": "click", "selector": "#load-more" },
      { "type": "wait", "milliseconds": 1000 },
      { "type": "screenshot", "fullPage": true, "quality": 80 }
    ]
  }'
```

**Clicar em vários elementos:**

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/scrape \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY' \
  -d '{
    "url": "https://example.com",
    "actions": [
      { "type": "click", "selector": ".expand-button", "all": true },
      { "type": "wait", "milliseconds": 500 }
    ],
    "formats": ["markdown"]
  }'
```

**Gerar um PDF:**

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/scrape \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY' \
  -d '{
    "url": "https://example.com",
    "actions": [
      { "type": "pdf", "format": "A4", "landscape": false }
    ]
  }'
```

**Executar JavaScript (por exemplo, para extrair dados embutidos na página):**

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/scrape \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY' \
  -d '{
    "url": "https://example.com",
    "actions": [
      { "type": "executeJavascript", "script": "document.querySelector(\"#__NEXT_DATA__\").textContent" }
    ],
    "formats": ["markdown"]
  }'
```

O valor de retorno de cada ação `executeJavascript` é armazenado no array `actions.javascriptReturns` da resposta.

<div id="full-scrape-example">
  ### Exemplo completo de scraping
</div>

A solicitação abaixo combina várias opções de scraping:

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/scrape \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer fc-YOUR-API-KEY' \
    -d '{
      "url": "https://docs.firecrawl.dev",
      "formats": [
        "markdown",
        "links",
        "html",
        "rawHtml",
        { "type": "screenshot", "fullPage": true, "quality": 80 }
      ],
      "includeTags": ["h1", "p", "a", ".main-content"],
      "excludeTags": ["#ad", "#footer"],
      "onlyMainContent": false,
      "waitFor": 1000,
      "timeout": 15000,
      "parsers": ["pdf"]
    }'
```

Essa requisição retorna markdown, HTML, HTML bruto, links e uma captura de tela da página inteira. Ela restringe o conteúdo a `<h1>`, `<p>`, `<a>` e `.main-content`, enquanto exclui `#ad` e `#footer`, aguarda 1 segundo antes de iniciar o scraping, define um tempo limite de 15 segundos e habilita a análise de PDFs.

Consulte a [referência completa da API de Scrape](https://docs.firecrawl.dev/api-reference/endpoint/scrape) para mais detalhes.

<div id="json-extraction-via-formats">
  ## Extração em JSON via formatos
</div>

Use o objeto de formato JSON em `formats` para extrair dados estruturados de uma só vez:

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key='fc-YOUR-API-KEY')

  doc = firecrawl.scrape('https://firecrawl.dev', {
    'formats': [{
      'type': 'json',
      'prompt': 'Extract the features of the product',
      'schema': {
        'type': 'object',
        'properties': { 'features': { 'type': 'object' } },
        'required': ['features']
      }
    }]
  })

  print(doc.json)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl-js';

  const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR-API-KEY' });

  const doc = await firecrawl.scrape('https://firecrawl.dev', {
    formats: [{
      type: 'json',
      prompt: 'Extract the features of the product',
      schema: {
        type: 'object',
        properties: { features: { type: 'object' } },
        required: ['features']
      }
    }]
  });

  console.log(doc.json);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/scrape \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer fc-YOUR-API-KEY' \
    -d '{
      "url": "https://firecrawl.dev",
      "formats": [{
        "type": "json",
        "prompt": "Extract the features of the product",
        "schema": {"type": "object", "properties": {"features": {"type": "object"}}, "required": ["features"]}
      }]
    }'
  ```
</CodeGroup>

<div id="agent-endpoint">
  ## Endpoint do agente
</div>

Use o endpoint `/v2/agent` para extração autônoma de dados em várias páginas. O agente é executado de forma assíncrona: você inicia uma tarefa e depois faz polling dos resultados.

<div id="agent-options">
  ### Opções do agente
</div>

| Parâmetro               | Tipo      | Padrão           | Descrição                                                                                                                                                                                 |
| ----------------------- | --------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `prompt`                | `string`  | *(obrigatório)*  | Instruções em linguagem natural descrevendo quais dados extrair (máx. 10.000 caracteres).                                                                                                 |
| `urls`                  | `array`   | —                | URLs às quais o agente estará limitado.                                                                                                                                                   |
| `schema`                | `object`  | —                | Schema JSON para estruturar os dados extraídos.                                                                                                                                           |
| `maxCredits`            | `number`  | `2500`           | Créditos máximos que o agente pode gastar. O dashboard suporta até 2.500; para limites maiores, defina isso pela API (valores acima de 2.500 são sempre cobrados como requisições pagas). |
| `strictConstrainToURLs` | `boolean` | `false`          | Quando `true`, o agente visita apenas as URLs fornecidas.                                                                                                                                 |
| `model`                 | `string`  | `"spark-1-mini"` | Modelo de IA a ser usado: `"spark-1-mini"` (padrão, 60% mais barato) ou `"spark-1-pro"` (maior precisão).                                                                                 |

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key='fc-YOUR-API-KEY')

  # Iniciar job do agente
  started = firecrawl.start_agent(
      prompt="Extraia o título e a descrição",
      urls=["https://docs.firecrawl.dev"],
      schema={"type": "object", "properties": {"title": {"type": "string"}, "description": {"type": "string"}}, "required": ["title"]}
  )

  # Consultar status
  status = firecrawl.get_agent_status(started["id"])
  print(status.get("status"), status.get("data"))
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR-API-KEY' });

  // Iniciar job do agente
  const started = await firecrawl.startAgent({
    prompt: 'Extraia o título e a descrição',
    urls: ['https://docs.firecrawl.dev'],
    schema: { type: 'object', properties: { title: { type: 'string' }, description: { type: 'string' } }, required: ['title'] }
  });

  // Consultar status
  const status = await firecrawl.getAgentStatus(started.id);
  console.log(status.status, status.data);
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/agent \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer fc-YOUR-API-KEY' \
    -d '{
      "prompt": "Extraia o título e a descrição",
      "urls": ["https://docs.firecrawl.dev"],
      "schema": {"type": "object", "properties": {"title": {"type": "string"}, "description": {"type": "string"}}, "required": ["title"]}
    }'
  ```
</CodeGroup>

<div id="check-agent-status">
  ### Verificar status do agente
</div>

Faça requisições periódicas para `GET /v2/agent/{jobId}` para verificar o progresso. O campo `status` da resposta será `"processing"`, `"completed"` ou `"failed"`.

```bash cURL theme={null}
curl -X GET https://api.firecrawl.dev/v2/agent/YOUR-JOB-ID \
  -H 'Authorization: Bearer fc-YOUR-API-KEY'
```

Os SDKs de Python e Node também fornecem um método conveniente (`firecrawl.agent()`) que inicia o job e consulta o status automaticamente até a conclusão.

<div id="crawling-multiple-pages">
  ## Rastreamento de várias páginas
</div>

Para rastrear várias páginas, use o endpoint `/v2/crawl`. O rastreamento é executado de forma assíncrona e retorna um ID do job. Use o parâmetro `limit` para controlar quantas páginas serão rastreadas. Se omitido, o rastreamento processará até 10.000 páginas.

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/crawl \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer fc-YOUR-API-KEY' \
    -d '{
      "url": "https://docs.firecrawl.dev",
      "limit": 10
    }'
```

<div id="response">
  ### Resposta
</div>

```json theme={null}
{ "id": "1234-5678-9101" }
```

<div id="check-crawl-job">
  ### Verificar o job de rastreamento
</div>

Use o ID do job para verificar o status do rastreamento e recuperar os resultados.

```bash cURL theme={null}
curl -X GET https://api.firecrawl.dev/v2/crawl/1234-5678-9101 \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY'
```

Se o conteúdo tiver mais de 10MB ou se o job de rastreamento ainda estiver em execução, a resposta pode incluir o parâmetro `next`, uma URL para a próxima página de resultados.

<div id="crawl-prompt-and-params-preview">
  ### Prévia do prompt e dos parâmetros de rastreamento
</div>

Você pode fornecer um `prompt` em linguagem natural para que o Firecrawl defina as configurações de rastreamento. Visualize-as primeiro:

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/crawl/params-preview \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer fc-YOUR-API-KEY' \
  -d '{
    "url": "https://docs.firecrawl.dev",
    "prompt": "Extract docs and blog"
  }'
```

<div id="crawler-options">
  ### Opções do crawler
</div>

Ao usar o endpoint `/v2/crawl`, você pode configurar o comportamento do crawler com as seguintes opções.

<div id="path-filtering">
  #### Filtragem de caminhos
</div>

| Parâmetro        | Tipo      | Padrão  | Descrição                                                                 |
| ---------------- | --------- | ------- | ------------------------------------------------------------------------- |
| `includePaths`   | `array`   | —       | Padrões regex para URLs a serem incluídas (apenas o pathname por padrão). |
| `excludePaths`   | `array`   | —       | Padrões regex para URLs a serem excluídas (apenas o pathname por padrão). |
| `regexOnFullURL` | `boolean` | `false` | Aplica os padrões à URL completa em vez de apenas ao pathname.            |

<Warning>
  A URL inicial também é verificada em relação a `includePaths`. Se ela não corresponder a nenhum dos padrões, o rastreamento poderá retornar 0 páginas.
</Warning>

<div id="crawl-scope">
  #### Escopo do rastreamento
</div>

| Parâmetro            | Tipo         | Padrão  | Descrição                                                                      |
| -------------------- | ------------ | ------- | ------------------------------------------------------------------------------ |
| `maxDiscoveryDepth`  | `integer`    | —       | Profundidade máxima de links para descoberta de novas URLs.                    |
| `limit`              | `integer`    | `10000` | Máximo de páginas a serem rastreadas.                                          |
| `crawlEntireDomain`  | `boolean`    | `false` | Explorar páginas irmãs (siblings) e pais (parents) para cobrir todo o domínio. |
| `allowExternalLinks` | `boolean`    | `false` | Seguir links para domínios externos.                                           |
| `allowSubdomains`    | `boolean`    | `false` | Seguir subdomínios do domínio principal.                                       |
| `delay`              | `number` (s) | —       | Atraso entre coletas. Definir isso força a concorrência para 1.                |

<div id="sitemap-and-deduplication">
  #### Sitemap e deduplicação
</div>

| Parâmetro                | Tipo      | Padrão      | Descrição                                                                                                              |
| ------------------------ | --------- | ----------- | ---------------------------------------------------------------------------------------------------------------------- |
| `sitemap`                | `string`  | `"include"` | `"include"`: usar sitemap + descoberta de links. `"skip"`: ignorar sitemap. `"only"`: rastrear apenas URLs do sitemap. |
| `deduplicateSimilarURLs` | `boolean` | `true`      | Normaliza variantes de URL (`www.`, `https`, barras finais, `index.html`) tratando-as como duplicadas.                 |
| `ignoreQueryParameters`  | `boolean` | `false`     | Remove query strings antes da deduplicação (por exemplo, `/page?a=1` e `/page?a=2` se tornam uma única URL).           |

<div id="scrape-options-for-crawl">
  #### Opções de scrape para crawl
</div>

| Parâmetro       | Tipo     | Padrão                      | Descrição                                                                                              |
| --------------- | -------- | --------------------------- | ------------------------------------------------------------------------------------------------------ |
| `scrapeOptions` | `object` | `{ formats: ["markdown"] }` | Configuração de scrape por página. Aceita todas as [opções de scrape](#scrape-options) listadas acima. |

<div id="crawl-example">
  ### Exemplo de rastreamento
</div>

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/crawl \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer fc-SUA-API-KEY' \
    -d '{
      "url": "https://docs.firecrawl.dev",
      "includePaths": ["^/blog/.*$", "^/docs/.*$"],
      "excludePaths": ["^/admin/.*$", "^/private/.*$"],
      "maxDiscoveryDepth": 2,
      "limit": 1000
    }'
```

<div id="mapping-website-links">
  ## Mapeamento de links de websites
</div>

O endpoint `/v2/map` identifica URLs relacionadas a um determinado website.

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/map \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer fc-YOUR-API-KEY' \
    -d '{
      "url": "https://docs.firecrawl.dev"
    }'
```

<div id="map-options">
  ### Opções do Map
</div>

| Parâmetro           | Tipo      | Padrão      | Descrição                                  |
| ------------------- | --------- | ----------- | ------------------------------------------ |
| `search`            | `string`  | —           | Filtra links por correspondência de texto. |
| `limit`             | `integer` | `100`       | Número máximo de links retornados.         |
| `sitemap`           | `string`  | `"include"` | `"include"`, `"skip"` ou `"only"`.         |
| `includeSubdomains` | `boolean` | `true`      | Inclui subdomínios.                        |

Aqui está a referência da API: [Documentação do endpoint Map](https://docs.firecrawl.dev/api-reference/endpoint/map)

<div id="whitelisting-firecrawl">
  ## Adicionando o Firecrawl à lista de permissões
</div>

<div id="allowing-firecrawl-to-scrape-your-website">
  ### Como permitir que o Firecrawl faça scraping do seu site
</div>

* **User Agent**: permita `FirecrawlAgent` no seu firewall ou nas suas regras de segurança.
* **Endereços IP**: o Firecrawl não usa um conjunto fixo de IPs de saída.

<div id="allowing-your-application-to-call-the-firecrawl-api">
  ### Permitindo que sua aplicação faça chamadas à API do Firecrawl
</div>

Se o seu firewall bloquear requisições de saída da sua aplicação para serviços externos, você precisa adicionar o endereço IP do servidor da API do Firecrawl à lista de permissões para que sua aplicação possa acessar a API do Firecrawl (`api.firecrawl.dev`):

* **Endereço IP**: `35.245.250.27`

Adicione esse IP à lista de permissões de saída do seu firewall para que seu backend possa enviar requisições de scrape, crawl, map e agent para o Firecrawl.
