Esta página describe todos los tipos de eventos de webhook que Firecrawl puede enviar a tu endpoint. Cada tipo de evento corresponde a una etapa diferente de tus operaciones de scraping.
Todos los eventos de webhook siguen esta estructura básica:
{
"success": true,
"type": "crawl.page",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [...],
"metadata": {}
}
Campo | Tipo | Descripción |
---|
success | boolean | Indica si la operación se realizó correctamente |
type | string | Identificador del tipo de evento |
id | string | Identificador único de la tarea |
data | array | Datos específicos del evento (varían según el tipo) |
metadata | object | Metadatos personalizados de la configuración del webhook |
error | string | Mensaje de error (presente cuando success es false ) |
Operaciones de rastreo multipágina que siguen enlaces.
Se envía cuando se inicia una operación de rastreo.
{
"success": true,
"type": "crawl.iniciado",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [],
"metadata": {}
}
Se envía por cada página individual que se extrae durante un rastreo.
{
"success": true,
"type": "crawl.page",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [
{
"markdown": "# Bienvenido a nuestro sitio web\n\nEste es el contenido principal de la página...",
"metadata": {
"title": "Título de la página",
"description": "Descripción de la página",
"url": "https://example.com/page",
"statusCode": 200,
"contentType": "text/html",
"scrapeId": "550e8400-e29b-41d4-a716-446655440001",
"sourceURL": "https://example.com/page",
"proxyUsed": "basic",
"cacheState": "hit",
"cachedAt": "2025-09-03T21:11:25.636Z",
"creditsUsed": 1
}
}
],
"metadata": {}
}
Este es el evento más común durante los rastreos. Recibirás un evento crawl.page
por cada página raspada correctamente.
Se envía cuando toda la operación de rastreo se completa correctamente.
{
"success": true,
"type": "crawl.completed",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [],
"metadata": {}
}
Eventos de scraping por lotes
Operaciones que extraen varias URL específicas.
Se envía cuando comienza una operación de scraping por lotes.
{
"success": true,
"type": "batch_scrape.started",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [],
"metadata": {}
}
Se envía por cada URL individual que se rastrea en el lote.
{
"success": true,
"type": "batch_scrape.page",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [
{
"markdown": "# Página de inicio de la empresa\n\nBienvenido a nuestro sitio web...",
"metadata": {
"title": "Nombre de la empresa - Página de inicio",
"description": "Descripción y resumen de la empresa",
"url": "https://example.com",
"statusCode": 200,
"contentType": "text/html",
"scrapeId": "550e8400-e29b-41d4-a716-446655440001",
"sourceURL": "https://example.com",
"proxyUsed": "basic",
"cacheState": "miss"
"cachedAt": "2025-09-03T23:30:53.434Z",
"creditsUsed": 1
}
}
],
"metadata": {}
}
Este es el evento más frecuente durante las extracciones por lotes. Recibirás un
evento batch_scrape.page
por cada URL extraída correctamente.
Se envía cuando finaliza toda la operación de scraping por lotes.
{
"success": true,
"type": "batch_scrape.completed",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [],
"metadata": {}
}
Operaciones de extracción de datos con tecnología LLM.
Se envía cuando se inicia una operación de extracción.
{
"success": true,
"type": "extract.iniciado",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [],
"metadata": {}
}
Se envía cuando una operación de extracción se completa correctamente.
{
"success": true,
"type": "extract.completed",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [
{
"success": true,
"data": { "siteName": "Sitio de ejemplo", "category": "Tecnología" },
"extractId": "550e8400-e29b-41d4-a716-446655440000",
"llmUsage": 0.0020118,
"totalUrlsScraped": 1,
"sources": {
"siteName": ["https://example.com"],
"category": ["https://example.com"]
}
}
],
"metadata": {}
}
Se envía cuando una operación de extracción encuentra un error.
{
"success": false,
"type": "extract.failed",
"id": "550e8400-e29b-41d4-a716-446655440000",
"data": [],
"error": "No se pudieron extraer los datos: se superó el tiempo de espera"
"metadata": {}
}
Puedes controlar qué eventos recibes especificando un array events
en la configuración de tu webhook:
{
"url": "https://your-app.com/webhook",
"events": ["completed", "failed"]
}