# Raspagem em lote

> Raspe várias URLs em uma única tarefa em lote

import BatchScrapePython from '/snippets/pt-BR/v2/batch-scrape/base/python.mdx';
import BatchScrapeNode from '/snippets/pt-BR/v2/batch-scrape/base/js.mdx';
import BatchScrapeCURL from '/snippets/pt-BR/v2/batch-scrape/base/curl.mdx';
import BatchScrapeOutput from '/snippets/pt-BR/v2/batch-scrape/base/output.mdx';
import BatchScrapeAsyncOutput from '/snippets/pt-BR/v2/batch-scrape/base/async-output.mdx';
import BatchScrapeExtractPython from '/snippets/pt-BR/v2/batch-scrape/json/python.mdx';
import BatchScrapeExtractNode from '/snippets/pt-BR/v2/batch-scrape/json/js.mdx';
import BatchScrapeExtractCURL from '/snippets/pt-BR/v2/batch-scrape/json/curl.mdx';
import BatchScrapeExtractOutput from '/snippets/pt-BR/v2/batch-scrape/json/output.mdx';
import BatchScrapeExtractAsyncOutput from '/snippets/pt-BR/v2/batch-scrape/json/async-output.mdx';
import BatchScrapeWebhookCURL from '/snippets/pt-BR/v1/batch-scrape-webhook/base/curl.mdx';

A raspagem em lote permite raspar várias URLs em uma única tarefa. Passe uma lista de URLs e parâmetros opcionais, e o Firecrawl as processa simultaneamente e retorna todos os resultados de uma só vez.

* Funciona como `/crawl`, mas para uma lista explícita de URLs
* Modos síncrono e assíncrono
* Suporta todas as opções de raspagem, incluindo extração estruturada
* Concorrência configurável por tarefa

<div id="operations">
  ## Operações
</div>

| Tarefa                             | Referência da API                                                            | Vocabulário do SDK                                                        |
| ---------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| Iniciar um batch                   | [`batch-scrape`](/pt-BR/api-reference/endpoint/batch-scrape)                       | `batchScrape` / `batch_scrape`, `startBatchScrape` / `start_batch_scrape` |
| Verificar o status e os resultados | [`batch-scrape-get`](/pt-BR/api-reference/endpoint/batch-scrape-get)               | `getBatchScrapeStatus` / `get_batch_scrape_status`                        |
| Cancelar um batch em execução      | [`batch-scrape-delete`](/pt-BR/api-reference/endpoint/batch-scrape-delete)         | Cancele ou exclua o job do batch pelo ID                                  |
| Inspecionar erros                  | [`batch-scrape-get-errors`](/pt-BR/api-reference/endpoint/batch-scrape-get-errors) | Auxiliar de erro/status para URLs com falha                               |

<div id="how-it-works">
  ## Como funciona
</div>

Você pode executar um scrape em lote de duas formas:

| Modo       | Método do SDK (JS / Python)               | Comportamento                                                              |
| ---------- | ----------------------------------------- | -------------------------------------------------------------------------- |
| Síncrono   | `batchScrape` / `batch_scrape`            | Inicia o lote e aguarda a conclusão, retornando todos os resultados        |
| Assíncrono | `startBatchScrape` / `start_batch_scrape` | Inicia o lote e retorna um ID do job para consulta por polling ou webhooks |

<div id="basic-usage">
  ## Uso básico
</div>

<CodeGroup>
  <BatchScrapePython />

  <BatchScrapeNode />

  <BatchScrapeCURL />
</CodeGroup>

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

Chamar `batchScrape` / `batch_scrape` retorna os resultados completos quando o lote é concluído.

<BatchScrapeOutput />

Chamar `startBatchScrape` / `start_batch_scrape` retorna um ID de job que você pode acompanhar via `getBatchScrapeStatus` / `get_batch_scrape_status`, o endpoint da API `/batch/scrape/{id}` ou webhooks. Os resultados do job ficam disponíveis via API por 24 horas após a conclusão. Depois desse período, você ainda pode visualizar o histórico e os resultados dos seus batch scrapes nos [activity logs](https://www.firecrawl.dev/app/logs).

<BatchScrapeAsyncOutput />

<div id="concurrency">
  ## Concorrência
</div>

Por padrão, uma tarefa de raspagem em lote usa todo o limite de navegadores simultâneos da sua equipe (consulte [Rate Limits](/pt-BR/rate-limits)). Você pode reduzir isso por tarefa com o parâmetro `maxConcurrency`.

Por exemplo, `maxConcurrency: 50` limita essa tarefa a 50 raspagens simultâneas. Definir esse valor muito baixo em lotes grandes vai tornar o processamento significativamente mais lento, então só o reduza se você realmente precisar deixar capacidade para outras tarefas em execução simultânea.

<div id="structured-extraction">
  ## Extração estruturada
</div>

Você pode usar a coleta em lote para extrair dados estruturados de cada página do lote. Isso é útil quando você quer aplicar o mesmo esquema a uma lista de URLs.

<CodeGroup>
  <BatchScrapeExtractPython />

  <BatchScrapeExtractNode />

  <BatchScrapeExtractCURL />
</CodeGroup>

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

`batchScrape` / `batch_scrape` retorna resultados completos:

<BatchScrapeExtractOutput />

`startBatchScrape` / `start_batch_scrape` retorna um ID de tarefa:

<BatchScrapeExtractAsyncOutput />

<div id="webhooks">
  ## Webhooks
</div>

Você pode configurar webhooks para receber notificações em tempo real conforme cada URL do seu lote é raspada. Isso permite processar os resultados imediatamente, em vez de esperar a conclusão de todo o lote.

<BatchScrapeWebhookCURL />

<div id="event-types">
  ### Tipos de evento
</div>

| Evento                   | Descrição                                   |
| ------------------------ | ------------------------------------------- |
| `batch_scrape.started`   | O job de raspagem em lote foi iniciado      |
| `batch_scrape.page`      | Uma única URL foi raspada com sucesso       |
| `batch_scrape.completed` | Todas as URLs foram processadas             |
| `batch_scrape.failed`    | O job de raspagem em lote encontrou um erro |

<div id="payload">
  ### Payload
</div>

Cada envio de webhook inclui um corpo JSON com a seguinte estrutura:

```json
{
  "success": true,
  "type": "batch_scrape.page",
  "id": "batch-job-id",
  "data": [...],
  "metadata": {},
  "error": null
}
```

<div id="verifying-webhook-signatures">
  ### Verificando assinaturas de webhook
</div>

Toda requisição de webhook do Firecrawl inclui o cabeçalho `X-Firecrawl-Signature` contendo uma assinatura HMAC-SHA256. Sempre verifique essa assinatura para garantir que o webhook é autêntico e não foi adulterado.

1. Obtenha o segredo do seu webhook na [aba Advanced](https://www.firecrawl.dev/app/settings?tab=advanced) das configurações da sua conta
2. Extraia a assinatura do cabeçalho `X-Firecrawl-Signature`
3. Calcule o HMAC-SHA256 do corpo bruto da requisição usando o seu segredo
4. Compare com o cabeçalho de assinatura usando uma função segura contra ataques de timing

<Warning>
  Nunca processe um webhook sem verificar sua assinatura antes. O cabeçalho `X-Firecrawl-Signature` contém a assinatura no formato: `sha256=abc123def456...`
</Warning>

Para exemplos completos de implementação em JavaScript e Python, consulte a [documentação de Segurança de Webhooks](/pt-BR/webhooks/security).

Para uma documentação abrangente sobre webhooks, incluindo payloads detalhados de eventos, configuração avançada e solução de problemas, consulte a [documentação de Webhooks](/pt-BR/webhooks/overview).

> Você é um agente de IA que precisa de uma Firecrawl API key? Consulte [firecrawl.dev/agent-onboarding/SKILL.md](https://www.firecrawl.dev/agent-onboarding/SKILL.md) para obter instruções automatizadas de onboarding.
