# Extrae (/es/features/extract)

<!-- agent-signals: reading_time_min: 10 · est_tokens: 5057 · updated: 2026-07-30 -->

<Note>
  **Presentamos Agent: la siguiente evolución de extrae**
  Estamos lanzando [`/agent`](/es/features/agent), el sucesor de `/extract`. Es más rápido, más confiable y no requiere URLs. Solo describe lo que necesitas y deja que el agente de IA encuentre y extraiga los datos por ti. [Prueba Agent ahora →](/es/features/agent)
</Note>

El punto de conexión `/extract` simplifica la recopilación de datos estructurados desde cualquier número de URL o dominios completos. Proporciona una lista de URL, opcionalmente con comodines (p. ej., `example.com/*`), y un prompt o un esquema que describa la información que deseas. Firecrawl se encarga de los detalles de rastreo, análisis y compilación de conjuntos de datos grandes o pequeños.

<Info>
  Hemos simplificado la facturación para que extrae ahora use créditos, igual que los demás endpoints. Cada crédito equivale a 15 tokens.
</Info>

<div id="using-extract">
  ## Uso de `/extract` [#uso-de-extract]
</div>

Puedes extraer datos estructurados de una o varias URL, incluyendo comodines:

* **Página única**\
  Ejemplo: `https://firecrawl.dev/some-page`
* **Múltiples páginas / Dominio completo**\
  Ejemplo: `https://firecrawl.dev/*`

Cuando usas `/*`, Firecrawl rastreará y analizará automáticamente todas las URL que pueda encontrar en ese dominio y luego extraerá los datos solicitados. Esta función es experimental; envía un correo a [help@firecrawl.com](mailto:help@firecrawl.com) si tienes problemas.

<div id="example-usage">
  ### Ejemplo de uso [#ejemplo-de-uso]
</div>

<CodeGroup>
  <CodeBlockTabs defaultValue="Python" groupId="curl+node+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Node">
        Node
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="cURL">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="Python">
      ```python  
      from firecrawl import Firecrawl

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

      schema = {
          "type": "object",
          "properties": {"description": {"type": "string"}},
          "required": ["description"],
      }

      res = firecrawl.extract(
          urls=["https://docs.firecrawl.dev"],
          prompt="Extrae la descripción de la página",
          schema=schema,
      )

      print(res.data["description"])
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Node">
      ```js  
      import { Firecrawl } from 'firecrawl';

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

      const schema = {
        type: 'object',
        properties: {
          title: { type: 'string' }
        },
        required: ['title']
      };

      const res = await firecrawl.extract({
        urls: ['https://docs.firecrawl.dev'],
        prompt: 'Extract the page title',
        schema,
        scrapeOptions: { formats: [{ type: 'json', prompt: 'Extract', schema }] }
      });

      console.log(res.status || res.success, res.data);
      ```
    </CodeBlockTab>

    <CodeBlockTab value="cURL">
      ```bash  
      curl -s -X POST "https://api.firecrawl.dev/v2/extract" \
        -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "urls": ["https://docs.firecrawl.dev"],
          "prompt": "Extraer el título de la página",
          "schema": {
            "type": "object",
            "properties": {"title": {"type": "string"}},
            "required": ["title"]
          },
          "scrapeOptions": {
            "formats": [{"type": "json", "prompt": "Extraer", "schema": {"type": "object"}}]
          }
        }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

**Parámetros clave:**

* **urls**: Una lista de una o más URL. Admite comodines (`/*`) para un rastreo más amplio.
* **prompt** (Opcional salvo que no haya schema): Un prompt en lenguaje natural que describe los datos que quieres o especifica cómo quieres estructurarlos.
* **schema** (Opcional salvo que no haya prompt): Una estructura más rígida si ya conoces el esquema JSON.
* **enableWebSearch** (Opcional): Si es `true`, la extracción puede seguir enlaces fuera del dominio especificado.

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

<div id="response-sdks">
  ### Respuesta (SDKs) [#respuesta-sdks]
</div>

```json title="JSON"
{
  "success": true,
  "data": {
    "company_mission": "Firecrawl es la forma más sencilla de extraer datos de la web. Los desarrolladores nos utilizan para convertir de forma confiable URLs en markdown apto para LLM o en datos estructurados con una sola llamada a la API.",
    "supports_sso": false,
    "is_open_source": true,
    "is_in_yc": true
  }
}
```

<div id="job-status-and-completion">
  ## Estado del trabajo y finalización [#estado-del-trabajo-y-finalización]
</div>

Cuando envías un trabajo de extracción —ya sea directamente mediante la API o a través de los métodos de inicio— recibirás un ID de trabajo. Puedes usar este ID para:

* Obtener el estado del trabajo: Envía una solicitud al punto de conexión /extract/{ID} para ver si el trabajo sigue en ejecución o ya finalizó.
* Esperar los resultados: Si usas el método predeterminado `extract` (Python/Node), el SDK espera y devuelve los resultados finales.
* Iniciar y luego consultar: Si usas los métodos de inicio —`start_extract` (Python) o `startExtract` (Node)— el SDK devuelve un ID de trabajo de inmediato. Usa `get_extract_status` (Python) o `getExtractStatus` (Node) para consultar el progreso.

<Note>
  Los resultados de los trabajos están disponibles a través de la API durante 24 horas después de su finalización. Después de este período, aún puedes ver tu historial de extracciones y resultados en los [activity logs](https://www.firecrawl.dev/app/logs).
</Note>

A continuación, se muestran ejemplos de código para comprobar el estado de un trabajo de extracción usando Python, Node.js y cURL:

<CodeGroup>
  <CodeBlockTabs defaultValue="Python" groupId="curl+node+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Node">
        Node
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="cURL">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="Python">
      ```python  
      from firecrawl import Firecrawl

      firecrawl = Firecrawl(
          api_key="fc-YOUR_API_KEY"
      )

      # Primero inicia un trabajo de extracción
      extract_job = firecrawl.start_extract([
          'https://docs.firecrawl.dev/*', 
          'https://firecrawl.dev/'
      ], prompt="Extrae la misión de la empresa y las características de estas páginas.")

      # Obtén el estado del trabajo de extracción
      job_status = firecrawl.get_extract_status(extract_job.id)

      print(job_status)
      # Ejemplo de salida:
      # id=None
      # status='completed'
      # expires_at=datetime.datetime(...)
      # success=True
      # data=[{ ... }]
      # error=None
      # warning=None
      # sources=None
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Node">
      ```js  
      import { Firecrawl } from 'firecrawl';

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

      const started = await firecrawl.startExtract({
        urls: ['https://docs.firecrawl.dev'],
        prompt: 'Extract title',
        schema: { type: 'object', properties: { title: { type: 'string' } }, required: ['title'] },
      });

      if (started.id) {
        const done = await firecrawl.getExtractStatus(started.id);
        console.log(done.status, done.data);
      }
      ```
    </CodeBlockTab>

    <CodeBlockTab value="cURL">
      ```bash  
      curl -s -X GET "https://api.firecrawl.dev/v2/extract/<jobId>" \
        -H "Authorization: Bearer $FIRECRAWL_API_KEY"
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

<div id="possible-states">
  ### Posibles estados [#posibles-estados]
</div>

* **completed**: La extracción se completó correctamente.
* **processing**: Firecrawl aún está procesando tu solicitud.
* **failed**: Ocurrió un error; los datos no se extrajeron por completo.
* **cancelled**: El trabajo fue cancelado por el usuario.

<div id="pending-example">
  #### Ejemplo pendiente [#ejemplo-pendiente]
</div>

```json title="JSON"
{
  "success": true,
  "data": [],
  "status": "en_proceso",
  "expiresAt": "2025-01-08T20:58:12.000Z"
}
```

<div id="completed-example">
  #### Ejemplo completado [#ejemplo-completado]
</div>

```json title="JSON"
{
  "success": true,
  "data": {
      "company_mission": "Firecrawl es la forma más sencilla de extraer datos de la web. Los desarrolladores nos utilizan para convertir, de forma confiable, URLs en markdown listo para LLM o en datos estructurados con una sola llamada a la API.",
      "supports_sso": false,
      "is_open_source": true,
      "is_in_yc": true
    },
  "status": "completado"
  "expiresAt": "2025-01-08T20:58:12.000Z"
}
```

<div id="extracting-without-a-schema">
  ## Extracción sin esquema [#extracción-sin-esquema]
</div>

Si prefieres no definir una estructura estricta, puedes simplemente proporcionar un `prompt`. El modelo subyacente elegirá una estructura por ti, lo que puede ser útil para solicitudes más exploratorias o flexibles.

<CodeGroup>
  <CodeBlockTabs defaultValue="Python" groupId="curl+node+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Node">
        Node
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="cURL">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="Python">
      ```python  
      from firecrawl import Firecrawl

      # Inicializa Firecrawl con tu clave de API
      firecrawl = Firecrawl(api_key='your_api_key')

      data = firecrawl.extract([
        'https://docs.firecrawl.dev/',
        'https://firecrawl.dev/'
      ], prompt="Extrae la misión de Firecrawl de la página.")
      print(data)
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Node">
      ```js  
      import { Firecrawl } from "firecrawl";

      const firecrawl = new Firecrawl({
      apiKey: "fc-YOUR_API_KEY"
      });

      const scrapeResult = await firecrawl.extract([
      'https://docs.firecrawl.dev/',
      'https://firecrawl.dev/'
      ], {
      prompt: "Extrae la misión de Firecrawl de la página."
      });

      console.log(scrapeResult);
      ```
    </CodeBlockTab>

    <CodeBlockTab value="cURL">
      ```bash  
      curl -X POST https://api.firecrawl.dev/v2/extract \
          -H 'Content-Type: application/json' \
          -H 'Authorization: Bearer TU_API_KEY' \
          -d '{
            "urls": [
              "https://docs.firecrawl.dev/",
              "https://firecrawl.dev/"
            ],
            "prompt": "Extrae la misión de Firecrawl de la página."
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

```json title="JSON"
{
  "success": true,
  "data": {
    "company_mission": "Convierte sitios web en datos listos para LLM. Impulsa tus aplicaciones de IA con datos limpios extraídos de cualquier sitio web."
  }
}
```

<div id="improving-results-with-web-search">
  ## Mejora de resultados con búsqueda web [#mejora-de-resultados-con-búsqueda-web]
</div>

Establecer `enableWebSearch = true` en tu solicitud ampliará el rastreo más allá del conjunto de URL proporcionado. Esto puede capturar información de respaldo o relacionada de páginas enlazadas.

Aquí tienes un ejemplo que extrae información sobre cámaras para tablero (dash cams), enriqueciendo los resultados con datos de páginas relacionadas:

<CodeGroup>
  <CodeBlockTabs defaultValue="Python" groupId="curl+node+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Node">
        Node
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="cURL">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="Python">
      ```python  
      from firecrawl import Firecrawl

      # Inicializa Firecrawl con tu clave de API

      firecrawl = Firecrawl(api_key='your_api_key')

      data = firecrawl.extract([
      'https://nextbase.com/dash-cams/622gw-dash-cam'
      ], prompt="Extrae información sobre las mejores cámaras para salpicadero, incluidos precios, características, ventajas/desventajas y reseñas.", enable_web_search=True)
      print(data)
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Node">
      ```js  
      import { Firecrawl } from "firecrawl";

      const firecrawl = new Firecrawl({
      apiKey: "fc-YOUR_API_KEY"
      });

      const scrapeResult = await firecrawl.extract([
      'https://nextbase.com/dash-cams/622gw-dash-cam'
      ], {
      prompt: "Extrae detalles sobre las mejores dash cams, incluidos precios, características, pros y contras, y reseñas.",
      enableWebSearch: true // Habilita la búsqueda web para obtener un mejor contexto
      });

      console.log(scrapeResult);
      ```
    </CodeBlockTab>

    <CodeBlockTab value="cURL">
      ```bash  
      curl -X POST https://api.firecrawl.dev/v2/extract \
          -H 'Content-Type: application/json' \
          -H 'Authorization: Bearer TU_API_KEY' \
          -d '{
            "urls": ["https://nextbase.com/dash-cams/622gw-dash-cam"],
            "prompt": "Extrae detalles sobre las mejores dash cams, incluidos precios, características, pros y contras, y reseñas.",
            "enableWebSearch": true
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

<div id="example-response-with-web-search">
  ### Respuesta de ejemplo con búsqueda en la web [#respuesta-de-ejemplo-con-búsqueda-en-la-web]
</div>

```json title="JSON"
{
  "success": true,
  "data": {
    "dash_cams": [
      {
        "name": "Nextbase 622GW",
        "price": "$399.99",
        "features": [
          "Grabación de video en 4K",
          "Estabilización de imagen",
          "Alexa integrado",
          "Integración con What3Words"
        ],
        /* Información de abajo enriquecida con otros sitios web como 
        https://www.techradar.com/best/best-dash-cam, encontrada 
        mediante el parámetro enableWebSearch */
        "pros": [
          "Excelente calidad de video",
          "Muy buena visión nocturna",
          "GPS integrado"
        ],
        "cons": ["Precio elevado", "La app puede ser inestable"]
      }
    ],
  }

```

La respuesta incluye contexto adicional obtenido de páginas relacionadas, lo que ofrece información más completa y precisa.

<div id="extracting-without-urls">
  ## Extracción sin URLs [#extracción-sin-urls]
</div>

El punto de conexión `/extract` ahora permite extraer datos estructurados con un prompt sin necesidad de URLs específicas. Es útil para investigación o cuando se desconocen las URLs exactas. Actualmente en alfa.

<CodeGroup>
  <CodeBlockTabs defaultValue="Python" groupId="curl+node+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Node">
        Node
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="cURL">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="Python">
      ```python  
      from pydantic import BaseModel

      class ExtractSchema(BaseModel):
          company_mission: str


      # Define el prompt para la extracción
      prompt = 'Extrae la misión de la empresa del sitio web de Firecrawl.'

      # Realiza la extracción
      scrape_result = firecrawl.extract(prompt=prompt, schema=ExtractSchema)

      print(scrape_result)
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Node">
      ```js  
      import { z } from "zod";

      // Define el esquema para extraer el contenido
      const schema = z.object({
        company_mission: z.string(),
      });

      const scrapeResult = await firecrawl.extract([], {
        prompt: "Extrae la misión de la empresa del sitio web de Firecrawl.",
        schema: schema
      });

      console.log(scrapeResult);
      ```
    </CodeBlockTab>

    <CodeBlockTab value="cURL">
      ```bash  
      curl -X POST https://api.firecrawl.dev/v2/extract \
          -H 'Content-Type: application/json' \
          -H 'Authorization: Bearer YOUR_API_KEY' \
          -d '{
            "urls": [],
            "prompt": "Extrae la misión de la empresa del sitio web de Firecrawl.",
            "schema": {
              "type": "object",
              "properties": {
                "company_mission": {
                  "type": "string"
                }
              },
              "required": ["company_mission"]
            }
          }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

<div id="known-limitations-beta">
  ## Limitaciones conocidas (Beta) [#limitaciones-conocidas-beta]
</div>

1. **Cobertura de sitios a gran escala**\
   Aún no se admite cubrir por completo sitios masivos (p. ej., “todos los productos de Amazon”) en una sola solicitud.

2. **Consultas lógicas complejas**\
   Solicitudes como “encontrar todas las publicaciones de 2025” pueden no devolver de forma fiable todos los datos esperados. Estamos trabajando en capacidades de consulta más avanzadas.

3. **Inconsistencias ocasionales**\
   Los resultados pueden variar entre ejecuciones, especialmente en sitios muy grandes o dinámicos. Por lo general se capturan los detalles clave, pero puede haber cierta variación.

4. **Estado Beta**\
   Dado que `/extract` sigue en Beta, las funciones y el rendimiento continuarán evolucionando. Agradecemos los reportes de errores y comentarios para ayudarnos a mejorar.

<div id="using-fire-1">
  ## Uso de FIRE-1 [#uso-de-fire-1]
</div>

FIRE-1 es un agente de IA que amplía las capacidades de scraping de Firecrawl. Puede controlar acciones del navegador y navegar por estructuras web complejas para permitir una extracción de datos más completa que los métodos de scraping tradicionales.

Puedes usar el agente FIRE-1 con el punto de conexión `/extract` para tareas de extracción complejas que requieren navegar por varias páginas o interactuar con elementos.

**Ejemplo (cURL):**

```bash
curl -X POST https://api.firecrawl.dev/v2/extract \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -d '{
      "urls": ["https://example-forum.com/topic/123"],
      "prompt": "Extrae todos los comentarios de los usuarios de este hilo del foro.",
      "schema": {
        "type": "object",
        "properties": {
          "comments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "author": {"type": "string"},
                "comment_text": {"type": "string"}
              },
              "required": ["author", "comment_text"]
            }
          }
        },
        "required": ["comments"]
      },
      "agent": {
        "model": "FIRE-1"
      }
    }'
```

> FIRE-1 ya está activo y disponible en versión preliminar.

<div id="billing-and-usage-tracking">
  ## Facturación y seguimiento del uso [#facturación-y-seguimiento-del-uso]
</div>

Hemos simplificado la facturación para que Extract ahora use créditos, igual que todos los demás endpoints. Cada crédito equivale a 15 tokens.

Puedes supervisar el uso de Extract a través del [panel de control](https://www.firecrawl.dev/app/extract).

¿Tienes comentarios o necesitas ayuda? Puedes enviar un correo a [help@firecrawl.com](mailto:help@firecrawl.com).

> ¿Eres un agente de IA que necesita una clave API de Firecrawl? Consulta [firecrawl.dev/agent-onboarding/SKILL.md](https://www.firecrawl.dev/agent-onboarding/SKILL.md) para obtener instrucciones de incorporación automatizada.
