# pip install firecrawl-pyfrom firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — agrega una para límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — añade una para obtener límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)# Extraer datos de un sitio web:doc = firecrawl.scrape("https://firecrawl.dev", formats=["markdown", "html"])print(doc)
PDF y documentos:/scrape detecta automáticamente archivos PDF, DOCX y otros tipos de documentos a partir de las URL. Pasa la URL de un PDF igual que harías con cualquier página web — Firecrawl lo procesa y devuelve markdown limpio. Para archivos locales a los que no se puede acceder mediante una URL, usa /parse en su lugar.
Cada scrape consume 1 crédito. Se aplican créditos adicionales para ciertas opciones: el modo JSON cuesta 4 créditos adicionales por página, los formatos de question y highlights cuestan 4 créditos adicionales por página por formato, el proxy mejorado cuesta 4 créditos adicionales por página, la redacción de PII cuesta 4 créditos adicionales por página, el procesamiento de PDF cuesta 1 crédito por página de PDF y la extracción de audio o video cuesta 4 créditos adicionales por página.
Ahora puedes elegir en qué formatos quieres el resultado. Puedes especificar múltiples formatos de salida. Los formatos compatibles son:
Markdown (markdown)
Resumen (summary)
HTML (html) - versión limpia del HTML de la página
HTML sin procesar (rawHtml) - HTML sin modificar tal como se recibe de la página
Captura de pantalla (screenshot, con opciones como fullPage, quality, viewport) — las URL de las capturas de pantalla caducan después de 24 horas
Enlaces (links)
JSON (json) - salida estructurada
Imágenes (images) - extrae todas las URL de imágenes de la página
Branding (branding) - extrae la identidad de marca y el sistema de diseño
Producto (product) - extrae un producto estructurado (título, precio, disponibilidad y variantes) de las páginas de producto
Audio (audio) - extrae audio MP3 de URL de vídeo compatibles, p. ej., YouTube (devuelve una URL firmada de GCS, caduca después de 1 hora)
Vídeo (video) - extrae vídeo de la mejor calidad de URL de vídeo compatibles, p. ej., YouTube (devuelve una URL firmada de GCS, caduca después de 1 hora)
Query (query, con prompt y mode opcional) - haz una pregunta en lenguaje natural sobre la página; la respuesta se devuelve en el campo answer
Las claves de salida coincidirán con el formato que elijas.
Se usa para extraer datos estructurados de páginas rastreadas.
¿Vas a extraer productos? En las páginas de producto, el formatproduct devuelve campos de producto estructurados (título, precio, disponibilidad y variantes) de forma determinista, sin llamada al LLM ni schema que definir. Usa json cuando necesites campos personalizados o páginas que no sean de producto.
from firecrawl import Firecrawlfrom pydantic import BaseModelapp = Firecrawl( # No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)class CompanyInfo(BaseModel): company_mission: str supports_sso: bool is_open_source: bool is_in_yc: boolresult = app.scrape( 'https://firecrawl.dev', formats=[{ "type": "json", "schema": CompanyInfo.model_json_schema() }], only_main_content=False, timeout=120000)print(result)
Salida:
JSON
{ "success": true, "data": { "json": { "company_mission": "Rastreo y extracción de datos web con IA", "supports_sso": true, "is_open_source": true, "is_in_yc": true }, "metadata": { "title": "Firecrawl", "description": "Rastreo y extracción de datos web con IA", "robots": "seguir, indexar", "ogTitle": "Firecrawl", "ogDescription": "Rastreo y extracción de datos web con IA", "ogUrl": "https://firecrawl.dev/", "ogImage": "https://firecrawl.dev/og.png", "ogLocaleAlternate": [], "ogSiteName": "Firecrawl" "sourceURL": "https://firecrawl.dev/" }, }}
Ahora puedes extraer sin un esquema con solo pasar un prompt al punto de conexión. El LLM elige la estructura de los datos.
from firecrawl import Firecrawlapp = Firecrawl( # No se necesita API key para comenzar — añade una para obtener límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)result = app.scrape( 'https://firecrawl.dev', formats=[{ "type": "json", "prompt": "Extract the company mission from the page." }], only_main_content=False, timeout=120000)print(result)
Salida:
JSON
{ "success": true, "data": { "json": { "company_mission": "Rastreo web y extracción de datos impulsados por IA", }, "metadata": { "title": "Firecrawl", "description": "Rastreo web y extracción de datos impulsados por IA", "robots": "seguir, indexar", "ogTitle": "Firecrawl", "ogDescription": "Rastreo web y extracción de datos impulsados por IA", "ogUrl": "https://firecrawl.dev/", "ogImage": "https://firecrawl.dev/og.png", "ogLocaleAlternate": [], "ogSiteName": "Firecrawl", "sourceURL": "https://firecrawl.dev/" }, }}
El formato de branding extrae información completa sobre la identidad de marca de una página web, incluidos colores, fuentes, tipografía, espaciado, componentes de la UI y más. Es útil para analizar sistemas de diseño, monitorear marcas o crear herramientas que necesiten comprender la identidad visual de un sitio web.
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: # api_key='fc-YOUR_API_KEY',)result = firecrawl.scrape( url='https://firecrawl.dev', formats=['branding'])print(result['branding'])
Puedes combinar el formato de branding con otros formatos para obtener datos completos de la página:
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: # api_key='fc-YOUR_API_KEY',)result = firecrawl.scrape( url='https://firecrawl.dev', formats=['markdown', 'branding', 'screenshot'])print(result['markdown'])print(result['branding'])print(result['screenshot'])
El formato product extrae un producto estructurado de forma determinista: el mismo tipo de salida estructurada que el formato json, pero sin una llamada a un LLM ni un esquema definido por ti, y diseñado específicamente para páginas de producto. Si has estado extrayendo campos de producto con un esquema json, usa formats: ["product"] en su lugar: es más rápido y más barato, aunque se limita a productos.Devuelve un objeto product con título, marca, categoría, descripción y variantes, donde cada variante incluye precio, precio original, disponibilidad e imágenes; útil para el seguimiento de precios, la ingesta de catálogos o las herramientas de comparación de precios.
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para empezar — agrega una para obtener límites de tasa más altos: # api_key='fc-YOUR_API_KEY',)result = firecrawl.scrape( url='https://example.com/products/wireless-headphones', formats=['product'])print(result['product'])
El objeto product contiene las siguientes propiedades:
title: El nombre del producto
brand: La marca del producto (opcional)
category: La categoría del producto (opcional)
url: La URL canónica del producto
description: La descripción del producto (opcional)
variants: array de variantes del producto. El precio, la disponibilidad y las imágenes se encuentran en cada variante; un producto con un solo SKU sigue devolviendo exactamente una variante que contiene estos datos. Cada variante tiene:
id, sku, title: identificadores y nombre de la variante (todos opcionales)
values: un mapa del nombre de la opción a su valor, p. ej., { "color": "Charcoal" } (opcional)
price: el objeto del precio actual (opcional):
amount: El valor numérico del precio
currency: El código de moneda, solo se informa cuando la página lo proporciona (opcional)
formatted: El precio tal como se muestra en la página (opcional)
sale: presente solo cuando la variante tiene descuento (opcional). Contiene:
originalPrice: El precio original (antes del descuento), con la misma estructura que price
availability: información de disponibilidad, siempre presente en una variante:
inStock: Si la variante está en stock
text: El texto de disponibilidad sin procesar de la página (opcional)
images: array de imágenes de la variante, cada una con una url y texto alt opcional (opcional)
El formato de producto extrae el producto de forma determinista a partir de los datos estructurados de la página; no interviene ningún LLM. Combina varias fuentes por prioridad: JSON-LD > microdatos de schema.org > RDFa > estado integrado (__NEXT_DATA__/Nuxt/Apollo/Redux/Remix) > runParams de AliExpress > dataLayer de GA4 > OpenGraph/<meta>. La combinación tiene en cuenta la identidad, por lo que nunca se mezclan campos de productos distintos. La moneda solo se informa cuando aparece en las fuentes de la página.
La extracción de productos funciona en modo fail-closed: las páginas ambiguas no devuelven ningún producto, y las fuentes menos fiables, como OpenGraph, solo contribuyen cuando hay un precio presente. En una página sin un producto extraíble, la respuesta omite el objeto product y añade una advertencia (warning) (por ejemplo, “No product found…”).
Alojamiento propio: el formato product depende de un servicio dedicado de extracción de productos. En Firecrawl Cloud funciona de inmediato. Si haces self-hosting, configura PRODUCT_EXTRACTION_SERVICE_URL para que apunte a ese servicio; si no está definida, solicitar el formato product devuelve una advertencia y ningún producto (el mismo patrón que usan los formatos de audio/video para su servicio).
Puedes combinar el formato de producto con otros formatos para obtener datos completos de la página:
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para empezar — agrega una para obtener límites de tasa más altos: # api_key='fc-YOUR_API_KEY',)result = firecrawl.scrape( url='https://example.com/products/wireless-headphones', formats=['markdown', 'product'])print(result['markdown'])print(result['product'])
El formato audio extrae el audio de sitios web compatibles (p. ej., YouTube) como archivos MP3 y devuelve una URL firmada de Google Cloud Storage. Esto es útil para crear flujos de procesamiento de audio, servicios de transcripción o herramientas para pódcasts.
La extracción de audio cuesta 5 créditos por página (1 base + 4 adicionales).
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — agrega una para límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)doc = firecrawl.scrape("https://www.youtube.com/watch?v=dQw4w9WgXcQ", formats=["audio"])print(doc.audio) # URL firmada de GCS para el archivo MP3
El formato video extrae el video con la mejor calidad de sitios web compatibles (p. ej., YouTube) y devuelve una URL firmada de Google Cloud Storage. Esto resulta útil para crear pipelines de procesamiento de video, herramientas de moderación o flujos de trabajo de archivado de contenido multimedia.
La extracción de video cuesta 5 créditos por página (1 base + 4 adicionales).
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)doc = firecrawl.scrape("https://www.youtube.com/watch?v=dQw4w9WgXcQ", formats=["video"])print(doc.video) # URL firmada de GCS del archivo de video
Usa el formato question para hacer una pregunta en lenguaje natural sobre la página. Firecrawl devuelve la respuesta en el campo answer de la respuesta.
El formato question cuesta 5 créditos por página (1 base + 4 adicionales por la llamada al LLM).
Opciones dentro del objeto de formato:
question (obligatorio para type: "question"): la pregunta que se debe responder. Máximo: 10.000 caracteres.
Puedes combinar question con otros formatos; por ejemplo, solicita markdown y question a la vez para obtener el contenido de la página y una respuesta en una sola llamada.
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)doc = firecrawl.scrape( "https://firecrawl.dev", formats=[{"type": "question", "question": "What is Firecrawl?"}],)print(doc.answer)
El formato question también está disponible en /search mediante scrapeOptions, que ejecuta la misma extracción en cada resultado de búsqueda.
Usa el formato highlights para encontrar texto fuente relevante en la página. Firecrawl devuelve el texto seleccionado en el campo highlights de la respuesta.
El formato highlights cuesta 5 créditos por página (1 base + 4 adicionales por la llamada al LLM).
Opciones dentro del objeto de formato:
query (obligatorio para type: "highlights"): la solicitud para seleccionar texto fuente. Máximo 10.000 caracteres.
Puedes combinar highlights con otros formatos; por ejemplo, solicita markdown y highlights juntos para obtener el contenido de la página y el texto fuente en una sola llamada.
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)doc = firecrawl.scrape( "https://firecrawl.dev", formats=[{"type": "highlights", "query": "What is Firecrawl?"}],)print(doc.highlights)
El formato highlights también está disponible en /search mediante scrapeOptions, que ejecuta la misma extracción en cada resultado de búsqueda.
Configura redactPII: true para ocultar la información de identificación personal del markdown devuelto. El campo markdown contiene el resultado con la información ocultada.Consulta Ocultación de PII para ver ejemplos de SDK, cURL, CLI y MCP.
Firecrawl te permite realizar varias acciones en una página web antes de extraer su contenido. Esto es especialmente útil para interactuar con contenido dinámico, navegar entre páginas o acceder a contenido que requiera interacción del usuario.
Recomendamos Interact en lugar de las acciones: nuestra forma más reciente y potente de interactuar con páginas extraídas.Interact se ejecuta como una sesión de navegador con estado que permanece activa entre llamadas, para que puedas controlar una página paso a paso con cualquiera de estas opciones:
Lenguaje natural para flujos flexibles y no deterministas. Por ejemplo, “busca ‘wireless headphones’, filtra a 4+ estrellas por menos de $200 y devuelve los resultados”.
Código de Playwright o agent-browser para pasos deterministas. Por ejemplo, await page.click('#export').
Interact también admite perfiles, sesiones persistentes y una vista del navegador en vivo que se puede integrar (con un modo interactivo en el que los usuarios finales pueden controlar el navegador por sí mismos).
Aquí tienes un ejemplo de cómo usar acciones para ir a google.com, buscar Firecrawl, hacer clic en el primer resultado y tomar una captura de pantalla.Es importante usar casi siempre la acción wait antes y/o después de ejecutar otras acciones para dar tiempo suficiente a que la página cargue.
{ "success": true, "data": { "markdown": "¡Nuestra primera Launch Week ha terminado! [Consulta el resumen 🚀](blog/firecrawl-launch-week-1-recap)...", "actions": { "screenshots": [ "https://alttmdsdujxrfnakrkyi.supabase.co/storage/v1/object/public/media/screenshot-75ef2d87-31e0-4349-a478-fb432a29e241.png" ], "scrapes": [ { "url": "https://www.firecrawl.dev/", "html": "<html><body><h1>Firecrawl</h1></body></html>" } ] }, "metadata": { "title": "Inicio - Firecrawl", "description": "Firecrawl rastrea y convierte cualquier sitio web en Markdown limpio.", "language": "en", "keywords": "Firecrawl,Markdown,Datos,Mendable,LangChain", "robots": "seguir, index", "ogTitle": "Firecrawl", "ogDescription": "Convierte cualquier sitio web en datos listos para LLM.", "ogUrl": "https://www.firecrawl.dev/", "ogImage": "https://www.firecrawl.dev/og.png?123", "ogLocaleAlternate": [], "ogSiteName": "Firecrawl", "sourceURL": "http://google.com", "statusCode": 200 } }}
Para los flujos de trabajo que requieren un mayor control del navegador después del scraping, como sesiones autenticadas, navegación de varios pasos o una vista en vivo de la página, recomendamos Interact en lugar de ampliar el array de acciones.
Cuando especificas la ubicación, Firecrawl usará un proxy adecuado si está disponible y emulará el idioma y la zona horaria correspondientes. De forma predeterminada, la ubicación se establece en “US” si no se indica lo contrario.
Para usar la configuración de ubicación e idioma, incluye el objeto location en el cuerpo de la solicitud con las siguientes propiedades:
country: código de país ISO 3166-1 alfa-2 (p. ej., ‘US’, ‘AU’, ‘DE’, ‘JP’). Por defecto: ‘US’.
languages: una lista de idiomas y configuraciones regionales preferidas para la solicitud en orden de prioridad. Por defecto, usa el idioma de la ubicación especificada.
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — agrega una para obtener mayores límites de tasa: # api_key="fc-YOUR-API-KEY",)doc = firecrawl.scrape('https://example.com', formats=['markdown'], location={ 'country': 'US', 'languages': ['en'] })print(doc)
Para acelerar las solicitudes, Firecrawl sirve resultados desde la caché por defecto cuando hay una copia reciente disponible.
Ventana de frescura predeterminada: maxAge = 172800000 ms (2 días). Si la copia en caché es más reciente que esto, se devuelve al instante; de lo contrario, la página se vuelve a extraer y luego se almacena en caché.
Rendimiento: Esto puede acelerar las extracciones hasta 5× cuando los datos no necesitan estar ultra frescos.
Obtener siempre contenido fresco: Establece maxAge en 0. Ten en cuenta que esto evita el uso de la caché por completo, por lo que cada solicitud recorre todo el pipeline de scraping, lo que significa que la solicitud tardará más en completarse y es más probable que falle. Utiliza un maxAge distinto de cero si la frescura en cada solicitud no es crítica.
Evitar almacenamiento: Establece storeInCache en false si no quieres que Firecrawl almacene/guarde los resultados de esta solicitud en la caché.
Consulta solo en caché: Establece minAge para realizar una consulta solo en caché sin activar una nueva extracción. El valor está en milisegundos y especifica la antigüedad mínima que deben tener los datos en caché. Si no se encuentran datos en caché, se devuelve un 404 con el código de error SCRAPE_NO_CACHED_DATA. Establece minAge en 1 para aceptar cualquier dato en caché independientemente de su antigüedad.
Seguimiento de cambios: Las solicitudes que incluyen changeTracking omiten la caché, por lo que se ignora maxAge.
Créditos: Los resultados en caché siguen costando 1 crédito por página. El almacenamiento en caché mejora la velocidad, no el consumo de créditos.
Ejemplo (forzar contenido fresco):
from firecrawl import Firecrawlfirecrawl = Firecrawl(api_key='fc-YOUR_API_KEY')doc = firecrawl.scrape(url='https://example.com', max_age=0, formats=['markdown'])print(doc)
Ejemplo (usar una ventana de caché de 10 minutos):
Ahora puedes raspar varias URL en lote al mismo tiempo. Recibe las URL iniciales y parámetros opcionales como argumentos. El argumento params te permite especificar opciones adicionales para el trabajo de raspado por lotes, como los formatos de salida.
Es muy similar al funcionamiento del punto de conexión /crawl. Envía un trabajo de scraping por lotes y devuelve un ID de trabajo para consultar el estado del scraping por lotes.El SDK ofrece 2 métodos: sincrónico y asincrónico. El método sincrónico devuelve los resultados del trabajo de scraping por lotes, mientras que el asincrónico devuelve un ID de trabajo que puedes usar para consultar el estado del scraping por lotes.
Si usas los métodos síncronos de los SDK, devolverá los resultados del scraping por lotes. De lo contrario, devolverá un ID de tarea que puedes usar para consultar el estado del scraping por lotes.
Luego puedes usar el ID del trabajo para consultar el estado del scrape por lotes llamando al punto de conexión /batch/scrape/{id}. Este punto de conexión está pensado para usarse mientras el trabajo sigue en ejecución o justo después de que haya finalizado, ya que los trabajos de scrape por lotes expiran a las 24 horas.
Para sitios web complejos, Firecrawl ofrece un modo mejorado que proporciona mayores tasas de éxito a la vez que mantiene la privacidad.Obtén más información sobre el Modo mejorado.
Firecrawl admite la Retención cero de datos (ZDR) para equipos con requisitos estrictos de gestión de datos. Cuando está habilitada, Firecrawl no conservará ningún contenido de la página ni datos extraídos más allá de la duración de la solicitud.Para habilitar ZDR, establece zeroDataRetention: true en tu solicitud:
ZDR está disponible en los planes Enterprise y debe estar habilitado para tu equipo. Visita firecrawl.dev/enterprise para comenzar.ZDR añade 1 crédito adicional por página además del costo base del scrape.
Las capturas de pantalla no están disponibles en el modo ZDR. Como requieren cargarse en almacenamiento persistente, son incompatibles con la garantía de ZDR. Las solicitudes que incluyan tanto zeroDataRetention: true como un formato screenshot devolverán un error.
¿Eres un agente de IA que necesita una clave de API de Firecrawl? Consulta firecrawl.dev/agent-onboarding/SKILL.md para ver las instrucciones de incorporación automatizada.