> ## 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.

# Guía avanzada de scraping

> Configura opciones de scraping, acciones del navegador, rastreo, mapeo y el endpoint del agente con todas las capacidades de la API de Firecrawl.

Referencia de todas las opciones disponibles en los endpoints de scraping, rastreo, mapeo y agente de Firecrawl.

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

Para extraer una sola página y obtener contenido limpio en Markdown, utiliza el 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">
  ## Extracción de PDF
</div>

Firecrawl admite PDF. Usa la opción `parsers` (por ejemplo, `parsers: ["pdf"]`) cuando quieras asegurar el análisis de PDF. Puedes controlar la estrategia de análisis con la opción `mode`:

* **`auto`** (predeterminado): intenta primero una extracción rápida basada en texto y luego recurre a OCR si es necesario.
* **`fast`**: solo análisis basado en texto (texto incrustado). Es el más rápido, pero omite páginas escaneadas o con muchas imágenes.
* **`ocr`**: fuerza el análisis mediante OCR en cada página. Úsalo para documentos escaneados o cuando `auto` clasifique mal una página.

`{ type: "pdf" }` y `"pdf"` usan por defecto `mode: "auto"`.

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

<div id="scrape-options">
  ## Opciones de scraping
</div>

Al utilizar el endpoint `/scrape`, puedes personalizar la solicitud con las siguientes opciones.

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

El array `formats` controla qué tipos de salida devuelve el scraper. Predeterminado: `["markdown"]`.

**Formatos de tipo string**: pasa el nombre directamente (por ejemplo, `"markdown"`).

| Formato    | Descripción                                                                                                                                                      |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `markdown` | Contenido de la página convertido a Markdown limpio.                                                                                                             |
| `html`     | HTML procesado con los elementos innecesarios eliminados.                                                                                                        |
| `rawHtml`  | HTML original exactamente como lo devuelve el servidor.                                                                                                          |
| `links`    | Todos los enlaces encontrados en la página.                                                                                                                      |
| `images`   | Todas las imágenes encontradas en la página.                                                                                                                     |
| `summary`  | Un resumen generado por un LLM del contenido de la página.                                                                                                       |
| `branding` | Extrae la identidad de marca (colores, tipografías, espaciado, componentes de UI).                                                                               |
| `product`  | Extrae un producto estructurado (título, precio, disponibilidad, imágenes y variantes) de páginas de producto mediante datos estructurados de múltiples fuentes. |

**Formatos de objeto**: pasa un objeto con `type` y opciones adicionales.

| Formato          | Opciones                                                                                 | Descripción                                                                                                                                                              |
| ---------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `json`           | `prompt?: string`, `schema?: object`                                                     | Extrae datos estructurados usando un LLM. Proporciona un esquema JSON y/o un prompt en lenguaje natural (máx. 10.000 caracteres).                                        |
| `screenshot`     | `fullPage?: boolean`, `quality?: number`, `viewport?: { width, height }`                 | Toma una captura de pantalla. Máximo una por solicitud. La resolución máxima del viewport es 7680×4320. Las URL de las capturas de pantalla caducan después de 24 horas. |
| `changeTracking` | `modes?: ("json" \| "git-diff")[]`, `tag?: string`, `schema?: object`, `prompt?: string` | Realiza seguimiento de cambios entre scrapes. Requiere que `"markdown"` también esté en el array `formats`.                                                              |
| `attributes`     | `selectors: [{ selector: string, attribute: string }]`                                   | Extrae atributos HTML específicos de elementos que coincidan con selectores CSS.                                                                                         |

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

Configura `mobile: true` para emular un dispositivo móvil. Esto resulta útil cuando un sitio responsive oculta contenido en escritorio o muestra un diseño distinto en navegadores móviles.

Para sitios con contenido específico por región, combínalo con `location` y una captura de pantalla móvil para verificar el diseño 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>

Si el sitio sigue mostrando un diseño de escritorio pese a `mobile: true`, añade un User-Agent móvil mediante `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">
  ### Filtrado de contenido
</div>

Estos parámetros controlan qué partes de la página aparecen en la salida. Cuando `onlyMainContent` es `true` (el valor predeterminado), se elimina el contenido de plantilla (nav, footer, etc.). `includeTags` y `excludeTags` se aplican sobre el DOM original de la página, no sobre el resultado posterior al filtrado, por lo que tus selectores deben apuntar a los elementos tal como aparecen en el HTML de origen. Si configuras `onlyMainContent: false`, se utiliza el HTML completo de la página como punto de partida para el filtrado por etiquetas.

| Parámetro         | Tipo      | Predeterminado | Descripción                                                                                                                                            |
| ----------------- | --------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `onlyMainContent` | `boolean` | `true`         | Devuelve solo el contenido principal. Configura `false` para usar la página completa.                                                                  |
| `includeTags`     | `array`   | —              | Selectores CSS para incluir: etiquetas, clases, IDs o selectores de atributos (por ejemplo, `["h1", "p", ".main-content", "[data-testid=\"main\"]"]`). |
| `excludeTags`     | `array`   | —              | Selectores CSS para excluir: etiquetas, clases, IDs o selectores de atributos (por ejemplo, `["#ad", "#footer", "[role=\"banner\"]"]`).                |

<div id="timing-and-cache">
  ### Temporización y caché
</div>

| Parámetro | Tipo           | Predeterminado | Descripción                                                                                                                                                    |
| --------- | -------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `waitFor` | `integer` (ms) | `0`            | Tiempo de espera adicional antes de hacer scraping, además del smart-wait. Úsalo con moderación.                                                               |
| `maxAge`  | `integer` (ms) | `172800000`    | Devuelve una versión en caché si es más reciente que este valor (el valor predeterminado es 2 días). Establece `0` para obtener siempre contenido actualizado. |
| `timeout` | `integer` (ms) | `60000`        | Duración máxima de la solicitud antes de abortarla (el valor predeterminado es 60 segundos). El mínimo es 1000 (1 segundo).                                    |

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

| Parameter | Type    | Default   | Description                                                                                             |
| --------- | ------- | --------- | ------------------------------------------------------------------------------------------------------- |
| `parsers` | `array` | `["pdf"]` | Controla el procesamiento de PDF. `[]` para omitir el procesamiento y devolver base64 (1 crédito fijo). |

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

| Propiedad  | Type                        | Default         | Description                                                                                                 |
| ---------- | --------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------- |
| `type`     | `"pdf"`                     | *(obligatorio)* | Tipo de analizador.                                                                                         |
| `mode`     | `"fast" \| "auto" \| "ocr"` | `"auto"`        | `fast`: solo extracción basada en texto. `auto`: rápido con OCR como respaldo. `ocr`: forzar el uso de OCR. |
| `maxPages` | `integer`                   | —               | Limita el número de páginas a procesar.                                                                     |

<div id="actions">
  ### Acciones
</div>

Ejecuta acciones del navegador antes del scraping. Esto resulta útil para contenido dinámico, navegación o páginas con acceso restringido para usuarios. Puedes incluir hasta 50 acciones por solicitud, y el tiempo de espera combinado de todas las acciones `wait` y `waitFor` no debe superar los 60 segundos.

| Acción              | Parámetros                                                               | Descripción                                                                                                                                                       |
| ------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `wait`              | `milliseconds?: number`, `selector?: string`                             | Espera una duración fija **o** hasta que un elemento sea visible (indica uno, no ambos). Al usar `selector`, el tiempo de espera se agota después de 30 segundos. |
| `click`             | `selector: string`, `all?: boolean`                                      | Haz clic en un elemento que coincida con el selector CSS. Establece `all: true` para hacer clic en cada coincidencia.                                             |
| `write`             | `text: string`                                                           | Escribe texto en el campo que tiene el foco actualmente. Primero debes enfocar el elemento con una acción `click`.                                                |
| `press`             | `key: string`                                                            | Presiona una tecla del teclado (p. ej., `"Enter"`, `"Tab"`, `"Escape"`).                                                                                          |
| `scroll`            | `direction?: "up" \| "down"`, `selector?: string`                        | Desplaza la página o un elemento específico. La dirección predeterminada es `"down"`.                                                                             |
| `screenshot`        | `fullPage?: boolean`, `quality?: number`, `viewport?: { width, height }` | Captura una captura de pantalla. La resolución máxima del viewport es 7680×4320.                                                                                  |
| `scrape`            | *(ninguno)*                                                              | Captura el HTML actual de la página en este punto de la secuencia de acciones.                                                                                    |
| `executeJavascript` | `script: string`                                                         | Ejecuta código JavaScript en la página. Los valores devueltos están disponibles en el array `actions.javascriptReturns` de la respuesta.                          |
| `pdf`               | `format?: string`, `landscape?: boolean`, `scale?: number`               | Genera un PDF. Formatos compatibles: `"A0"` a `"A6"`, `"Letter"`, `"Legal"`, `"Tabloid"`, `"Ledger"`. El valor predeterminado es `"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">
  #### Notas sobre la ejecución de acciones
</div>

* **Write** requiere un `click` previo para poner el foco en el elemento de destino.
* **Scroll** acepta un `selector` opcional para desplazar un elemento específico en lugar de la página completa.
* **Wait** acepta `milliseconds` (retraso fijo) o `selector` (esperar hasta que sea visible).
* Las acciones se ejecutan **secuencialmente**: cada paso se completa antes de que comience el siguiente.
* Las acciones **no son compatibles con PDFs**. Si la URL apunta a un PDF, la solicitud fallará.

<div id="advanced-action-examples">
  #### Ejemplos de acciones avanzadas
</div>

**Tomar una captura de pantalla:**

```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 }
    ]
  }'
```

**Clic en varios 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"]
  }'
```

**Generación de un 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 }
    ]
  }'
```

**Ejecutar JavaScript (p. ej., para extraer datos incrustados de la 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"]
  }'
```

El valor devuelto por cada acción `executeJavascript` se captura en el array `actions.javascriptReturns` de la respuesta.

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

La siguiente solicitud combina múltiples opciones 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"]
    }'
```

Esta solicitud devuelve markdown, HTML, HTML sin procesar, enlaces y una captura de pantalla de la página completa. Limita el contenido a `<h1>`, `<p>`, `<a>` y `.main-content` mientras excluye `#ad` y `#footer`, espera 1 segundo antes de realizar el scraping, establece un tiempo de espera de 15 segundos y habilita el análisis de PDF.

Consulta la [referencia completa de la API de Scrape](https://docs.firecrawl.dev/api-reference/endpoint/scrape) para más detalles.

<div id="json-extraction-via-formats">
  ## Extracción de JSON mediante formatos
</div>

Usa el objeto de formato JSON en `formats` para extraer datos estructurados en una sola pasada:

<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': 'Extrae las características del producto',
      '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: 'Extrae las características del producto',
      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": "Extrae las características del producto",
        "schema": {"type": "object", "properties": {"features": {"type": "object"}}, "required": ["features"]}
      }]
    }'
  ```
</CodeGroup>

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

Usa el endpoint `/v2/agent` para la extracción autónoma de datos en múltiples páginas. El agente se ejecuta de forma asíncrona: inicias un trabajo y luego consultas periódicamente los resultados.

<div id="agent-options">
  ### Opciones del agente
</div>

| Parámetro               | Tipo      | Predeterminado   | Descripción                                                                                                                                                                                                                   |
| ----------------------- | --------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `prompt`                | `string`  | *(required)*     | Instrucciones en lenguaje natural que describen qué datos extraer (máx. 10.000 caracteres).                                                                                                                                   |
| `urls`                  | `array`   | —                | URLs a las que se restringirá el agente.                                                                                                                                                                                      |
| `schema`                | `object`  | —                | Esquema JSON para estructurar los datos extraídos.                                                                                                                                                                            |
| `maxCredits`            | `number`  | `2500`           | Máximo de créditos que el agente puede consumir. El panel de control admite hasta 2.500; para límites superiores, configúrelo mediante la API (los valores por encima de 2.500 siempre se facturan como solicitudes de pago). |
| `strictConstrainToURLs` | `boolean` | `false`          | Cuando su valor es `true`, el agente solo visita las URLs proporcionadas.                                                                                                                                                     |
| `model`                 | `string`  | `"spark-1-mini"` | Modelo de IA a utilizar: `"spark-1-mini"` (predeterminado, 60% más económico) o `"spark-1-pro"` (mayor precisión).                                                                                                            |

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

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

  # Iniciar trabajo del agente
  started = firecrawl.start_agent(
      prompt="Extract the title and description",
      urls=["https://docs.firecrawl.dev"],
      schema={"type": "object", "properties": {"title": {"type": "string"}, "description": {"type": "string"}}, "required": ["title"]}
  )

  # Consultar el estado
  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 trabajo del agente
  const started = await firecrawl.startAgent({
    prompt: 'Extract the title and description',
    urls: ['https://docs.firecrawl.dev'],
    schema: { type: 'object', properties: { title: { type: 'string' }, description: { type: 'string' } }, required: ['title'] }
  });

  // Consultar el estado
  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": "Extract the title and description",
      "urls": ["https://docs.firecrawl.dev"],
      "schema": {"type": "object", "properties": {"title": {"type": "string"}, "description": {"type": "string"}}, "required": ["title"]}
    }'
  ```
</CodeGroup>

<div id="check-agent-status">
  ### Comprobar el estado del agente
</div>

Consulta periódicamente `GET /v2/agent/{jobId}` para verificar el progreso. El campo `status` de la respuesta será `"processing"`, `"completed"` o `"failed"`.

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

Los SDK de Python y Node también ofrecen un método de utilidad (`firecrawl.agent()`) que inicia la tarea y consulta automáticamente el estado hasta que finaliza.

<div id="crawling-multiple-pages">
  ## Rastreo de varias páginas
</div>

Para rastrear varias páginas, utiliza el endpoint `/v2/crawl`. El rastreo se ejecuta de forma asíncrona y devuelve un ID de trabajo. Usa el parámetro `limit` para controlar cuántas páginas se rastrean. Si se omite, el rastreo procesará hasta 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">
  ### Respuesta
</div>

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

<div id="check-crawl-job">
  ### Consultar el trabajo de rastreo
</div>

Utiliza el ID de trabajo para consultar el estado de un rastreo y recuperar sus 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'
```

Si el contenido supera los 10 MB o el trabajo de rastreo aún está en ejecución, la respuesta puede incluir un parámetro `next` con la URL de la siguiente página de resultados.

<div id="crawl-prompt-and-params-preview">
  ### Vista previa del `prompt` y los parámetros de rastreo
</div>

Puedes proporcionar un `prompt` en lenguaje natural para que Firecrawl derive la configuración de rastreo. Primero, obtén una vista previa:

```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">
  ### Opciones del rastreador
</div>

Al usar el endpoint `/v2/crawl`, puedes personalizar el comportamiento del rastreo con las siguientes opciones.

<div id="path-filtering">
  #### Filtrado de rutas
</div>

| Parameter        | Type      | Default | Description                                                                                       |
| ---------------- | --------- | ------- | ------------------------------------------------------------------------------------------------- |
| `includePaths`   | `array`   | —       | Patrones de expresiones regulares a incluir para las URL (solo pathname de forma predeterminada). |
| `excludePaths`   | `array`   | —       | Patrones de expresiones regulares a excluir para las URL (solo pathname de forma predeterminada). |
| `regexOnFullURL` | `boolean` | `false` | Compara los patrones contra la URL completa en lugar de solo el pathname.                         |

<Warning>
  La URL inicial también se valida contra `includePaths`. Si no coincide con ninguno de los patrones, el rastreo puede devolver 0 páginas.
</Warning>

<div id="crawl-scope">
  #### Alcance del rastreo
</div>

| Parámetro            | Tipo         | Valor por defecto | Descripción                                                                       |
| -------------------- | ------------ | ----------------- | --------------------------------------------------------------------------------- |
| `maxDiscoveryDepth`  | `integer`    | —                 | Profundidad máxima de enlaces para descubrir nuevas URL.                          |
| `limit`              | `integer`    | `10000`           | Máximo de páginas a rastrear.                                                     |
| `crawlEntireDomain`  | `boolean`    | `false`           | Explora páginas relacionadas (hermanas y superiores) para cubrir todo el dominio. |
| `allowExternalLinks` | `boolean`    | `false`           | Sigue enlaces a dominios externos.                                                |
| `allowSubdomains`    | `boolean`    | `false`           | Sigue subdominios del dominio principal.                                          |
| `delay`              | `number` (s) | —                 | Retraso entre rastreos. Establecer esto fuerza la concurrencia a 1.               |

<div id="sitemap-and-deduplication">
  #### Sitemap y deduplicación
</div>

| Parameter                | Type      | Default     | Description                                                                                                                              |
| ------------------------ | --------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `sitemap`                | `string`  | `"include"` | `"include"`: usar el sitemap y el descubrimiento de enlaces. `"skip"`: ignorar el sitemap. `"only"`: rastrear solo las URLs del sitemap. |
| `deduplicateSimilarURLs` | `boolean` | `true`      | Normaliza variantes de URL (`www.`, `https`, barras finales, `index.html`) y las trata como duplicados.                                  |
| `ignoreQueryParameters`  | `boolean` | `false`     | Elimina las cadenas de consulta antes de la deduplicación (por ejemplo, `/page?a=1` y `/page?a=2` se consideran una sola URL).           |

<div id="scrape-options-for-crawl">
  #### Opciones de scrape para crawl
</div>

| Parámetro       | Tipo     | Predeterminado              | Descripción                                                                                                        |
| --------------- | -------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `scrapeOptions` | `object` | `{ formats: ["markdown"] }` | Configuración de scrape para cada página. Acepta todas las [opciones de scrape](#scrape-options) indicadas arriba. |

<div id="crawl-example">
  ### Ejemplo de rastreo
</div>

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

<div id="mapping-website-links">
  ## Mapeo de enlaces de un sitio web
</div>

El endpoint `/v2/map` identifica las URL relacionadas con un sitio web dado.

```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">
  ### Opciones de mapeo
</div>

| Parámetro           | Tipo      | Predeterminado | Descripción                                   |
| ------------------- | --------- | -------------- | --------------------------------------------- |
| `search`            | `string`  | —              | Filtra los enlaces por coincidencia de texto. |
| `limit`             | `integer` | `100`          | Número máximo de enlaces a devolver.          |
| `sitemap`           | `string`  | `"include"`    | `"include"`, `"skip"` o `"only"`.             |
| `includeSubdomains` | `boolean` | `true`         | Incluye subdominios.                          |

Aquí tienes la referencia de la API: [Documentación del endpoint de mapeo](https://docs.firecrawl.dev/api-reference/endpoint/map)

<div id="whitelisting-firecrawl">
  ## Agregar Firecrawl a la lista de permitidos
</div>

<div id="allowing-firecrawl-to-scrape-your-website">
  ### Permitir que Firecrawl rastree tu sitio web
</div>

* **User Agent**: Permite `FirecrawlAgent` en tu firewall o en tus reglas de seguridad.
* **Direcciones IP**: Firecrawl no utiliza un conjunto fijo de direcciones IP salientes.

<div id="allowing-your-application-to-call-the-firecrawl-api">
  ### Permitir que tu aplicación llame a la API de Firecrawl
</div>

Si tu firewall bloquea las solicitudes salientes de tu aplicación hacia servicios externos, debes incluir en la lista de permitidos la dirección IP del servidor de la API de Firecrawl para que tu aplicación pueda acceder a la API de Firecrawl (`api.firecrawl.dev`):

* **Dirección IP**: `35.245.250.27`

Agrega esta IP a la lista de permitidos de salida de tu firewall para que tu backend pueda enviar solicitudes de scraping, crawling, mapping y de agentes a Firecrawl.
