Busca en la web y obtén el contenido completo de los resultados
Busca en la web y obtén contenido limpio y estructurado de cada resultado en una sola llamada a la API. Envía una consulta a /search y Firecrawl devuelve títulos, descripciones y URLs. Agrega scrapeOptions para recuperar también el markdown completo de la página, HTML, links o capturas de pantalla de cada resultado.Para ver la lista completa de parámetros, consulta la referencia de la API del endpoint Search.
Recompensa: 5.000 créditos por comentarios valiosos sobre /search (GitHub)
Para optar, completa una entrevista de alta calidad (casos de uso bien pensados, concretos, etc.) con nuestro Asistente de Feedback de Firecrawl. Solo lleva unos minutos, puedes detenerla en cualquier momento y funciona bien tanto para personas como para agentes (¡solo pega el enlace en tu harness agéntico!).
# 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",)
// npm install firecrawlimport { Firecrawl } from 'firecrawl';const firecrawl = new Firecrawl({ // No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: // apiKey: "fc-YOUR-API-KEY",});
# Instalar globalmente con npmnpm install -g firecrawl# Autenticar (configuración de una sola vez)firecrawl login
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",)results = firecrawl.search( query="firecrawl", limit=3,)print(results)
import { Firecrawl } from 'firecrawl';const firecrawl = new Firecrawl({ // No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: // apiKey: "fc-YOUR-API-KEY",});const results = await firecrawl.search('firecrawl', { limit: 3, scrapeOptions: { formats: ['markdown'] }});console.log(results);
# No se necesita API key para comenzar — agrega -H "Authorization: Bearer $FIRECRAWL_API_KEY" para límites de tasa más altos:curl -s -X POST "https://api.firecrawl.dev/v2/search" \ -H "Content-Type: application/json" \ -d '{ "query": "firecrawl", "limit": 3 }'
# Buscar en la webfirecrawl search "firecrawl web scraping" --limit 5 --pretty
Los SDKs devuelven directamente el objeto de datos. cURL devuelve la carga útil completa.
JSON
{ "success": true, "data": { "web": [ { "url": "https://www.firecrawl.dev/", "title": "Firecrawl - The Web Data API for AI", "description": "The web crawling, scraping, and search API for AI. Built for scale. Firecrawl delivers the entire internet to AI agents and builders.", "position": 1 }, { "url": "https://github.com/firecrawl/firecrawl", "title": "mendableai/firecrawl: Turn entire websites into LLM-ready ... - GitHub", "description": "Firecrawl is an API service that takes a URL, crawls it, and converts it into clean markdown or structured data.", "position": 2 }, ... ], "images": [ { "title": "Quickstart | Firecrawl", "imageUrl": "https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/logo/logo.png", "imageWidth": 5814, "imageHeight": 1200, "url": "https://docs.firecrawl.dev/", "position": 1 }, ... ], "news": [ { "title": "Y Combinator startup Firecrawl is ready to pay $1M to hire three AI agents as employees", "url": "https://techcrunch.com/2025/05/17/y-combinator-startup-firecrawl-is-ready-to-pay-1m-to-hire-three-ai-agents-as-employees/", "snippet": "It's now placed three new ads on YC's job board for “AI agents only” and has set aside a $1 million budget total to make it happen.", "date": "3 months ago", "position": 1 }, ... ] }}
Si usas los SDKs: los resultados de búsqueda se agrupan por tipo de fuente, no en un array genérico .data. Accede a los resultados web con result.web, a las noticias con result.news y a las imágenes con result.images.
Python
result = firecrawl.search("query")for item in result.web or []: print(item.url, item.title)
JavaScript
const result = await firecrawl.search("query");for (const item of result.web ?? []) { console.log(item.url, item.title);}
Además de los resultados web habituales, Search admite tipos de resultados especializados mediante el parámetro sources:
web: resultados web estándar (predeterminado)
news: resultados enfocados en noticias
images: resultados de búsqueda de imágenes
Puedes solicitar varias fuentes en una sola llamada (por ejemplo, sources: ["web", "news"]). Cuando lo haces, el parámetro limit se aplica por tipo de fuente; así, limit: 5 con sources: ["web", "news"] devuelve hasta 5 resultados web y hasta 5 resultados de noticias (10 en total). Si necesitas parámetros diferentes por fuente (por ejemplo, valores limit distintos o diferentes scrapeOptions), haz llamadas separadas en su lugar.
Usa includeDomains para restringir los resultados de búsqueda a dominios específicos, o excludeDomains para excluir dominios específicos de la búsqueda. Estos campos añaden internamente los operadores site: y -site: a la consulta, así que pasa únicamente los dominios, sin protocolo ni ruta.
includeDomains y excludeDomains son mutuamente excluyentes. Usa uno u otro en una misma solicitud.
Busca y recupera contenido de los resultados de búsqueda en una sola operación.
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",)# Buscar y hacer scraping de contenidoresults = firecrawl.search( "firecrawl web scraping", limit=3, scrape_options={ "formats": ["markdown", "links"] })
import { Firecrawl } from 'firecrawl';const firecrawl = new Firecrawl({ // No se necesita API key para comenzar — agrega una para obtener límites de tasa más altos: // apiKey: "fc-YOUR-API-KEY",});const results = await firecrawl.search('firecrawl', { limit: 3, scrapeOptions: { formats: ['markdown'] }});console.log(results);
# No se necesita API key para comenzar — agrega -H "Authorization: Bearer fc-YOUR_API_KEY" para límites de tasa más altos:curl -X POST https://api.firecrawl.dev/v2/search \ -H "Content-Type: application/json" \ -d '{ "query": "firecrawl web scraping", "limit": 3, "scrapeOptions": { "formats": ["markdown", "links"] } }'
{ "success": true, "data": [ { "title": "Firecrawl - La API definitiva de web scraping", "description": "Firecrawl es una potente API de web scraping que convierte cualquier sitio web en datos limpios y estructurados para IA y análisis.", "url": "https://firecrawl.dev/", "markdown": "# Firecrawl\n\nLa API definitiva de web scraping\n\n## Convierte cualquier sitio web en datos limpios y estructurados\n\nFirecrawl facilita la extracción de datos de sitios web para aplicaciones de IA, investigación de mercados, agregación de contenido y más...", "links": [ "https://firecrawl.dev/pricing", "https://firecrawl.dev/docs", "https://firecrawl.dev/guides" ], "metadata": { "title": "Firecrawl - La API definitiva de web scraping", "description": "Firecrawl es una potente API de web scraping que convierte cualquier sitio web en datos limpios y estructurados para IA y análisis.", "sourceURL": "https://firecrawl.dev/", "statusCode": 200 } } ]}
Buscar y luego hacer scraping (patrón de dos pasos)
Si necesitas filtrar o procesar los resultados de búsqueda antes de hacer scraping, usa un enfoque de dos pasos: primero busca y luego haz scraping de las URL que quieras.
from firecrawl import Firecrawlfirecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")# Paso 1: Buscarresults = firecrawl.search("firecrawl web scraping", limit=5)# Paso 2: Hacer scraping de la URL de cada resultado para obtener el contenido completofor item in results.web or []: page = firecrawl.scrape(item.url, formats=["markdown"]) print(page.markdown[:200])
import Firecrawl from '@mendable/firecrawl-js';const firecrawl = new Firecrawl({ apiKey: "fc-YOUR_API_KEY" });// Paso 1: Buscarconst results = await firecrawl.search("firecrawl web scraping", { limit: 5 });// Paso 2: Hacer scraping de la URL de cada resultado para obtener el contenido completofor (const item of results.web ?? []) { const page = await firecrawl.scrape(item.url, { formats: ["markdown"] }); console.log(page.markdown?.substring(0, 200));}
Cuándo usar cada enfoque:
Un solo paso (scrapeOptions en search): quieres el contenido de todos los resultados. Es más simple y rápido.
Dos pasos (buscar y luego hacer scraping): quieres filtrar, ordenar o hacer scraping selectivo de los resultados. Es más flexible.
Ambos enfoques usan Firecrawl para el paso de scraping. No uses peticiones HTTP genéricas ni generes resúmenes solo a partir de fragmentos de búsqueda: el contenido completo de la página obtenido con el scraping de Firecrawl es lo que hace que los resultados sean fiables y completos.
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — añade una para límites de tasa más altos: # api_key="fc-YOUR_API_KEY",)# Search with location settings (Germany)search_result = firecrawl.search( "web scraping tools", limit=5, location="Germany")# Process the resultsfor result in search_result.data: print(f"Title: {result['title']}") print(f"URL: {result['url']}")
import { Firecrawl } from 'firecrawl';const firecrawl = new Firecrawl({ // No se necesita API key para comenzar — añade una para límites de tasa más altos: // apiKey: "fc-YOUR-API-KEY",});// Búsqueda con configuración de ubicación (Alemania)const results = await firecrawl.search('web scraping tools', { limit: 5, location: "Germany"});// Procesar los resultadosconsole.log(results);
# No se necesita API key para comenzar — agrega -H "Authorization: Bearer fc-YOUR_API_KEY" para límites de tasa más altos:curl -X POST https://api.firecrawl.dev/v2/search \ -H "Content-Type: application/json" \ -d '{ "query": "web scraping tools", "limit": 5, "location": "Germany" }'
# Buscar con ubicaciónfirecrawl search "local restaurants" --location "San Francisco,California,United States" --country US --pretty
Usa el parámetro tbs para filtrar resultados por periodo. Ten en cuenta que tbs solo se aplica a resultados de web — no filtra resultados de news ni de images. Si necesitas noticias filtradas por tiempo, considera usar web como origen con el operador site: para restringir la búsqueda a dominios de noticias específicos.
from firecrawl import Firecrawlfirecrawl = Firecrawl( # No se necesita API key para comenzar — añade una para límites de tasa más altos: # api_key="fc-YOUR-API-KEY",)results = firecrawl.search( query="firecrawl", limit=5, tbs="qdr:d",)print(len(results.get('web', [])))
import { Firecrawl } from 'firecrawl';const firecrawl = new Firecrawl({ // No se necesita API key para comenzar — agrega una para límites de tasa más altos: // apiKey: "fc-YOUR-API-KEY",});const results = await firecrawl.search('firecrawl', { limit: 5, tbs: 'qdr:d', // último día});console.log(results.web);
# No se necesita API key para comenzar — agrega -H "Authorization: Bearer fc-YOUR_API_KEY" para límites de tasa más altos:curl -X POST https://api.firecrawl.dev/v2/search \ -H "Content-Type: application/json" \ -d '{ "query": "latest web scraping techniques", "limit": 5, "tbs": "qdr:w" }'
# Búsqueda con filtro de tiempo (última semana)firecrawl search "firecrawl updates" --tbs qdr:w --limit 5 --pretty
Valores comunes de tbs:
qdr:h - Última hora
qdr:d - Últimas 24 horas
qdr:w - Última semana
qdr:m - Último mes
qdr:y - Último año
sbd:1 - Ordenar por fecha (las más recientes primero)
Para un filtrado temporal más preciso, puedes especificar rangos exactos usando el formato de rango de fechas personalizado:
from firecrawl import Firecrawl# Inicializa el cliente con tu clave de APIfirecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")# Busca resultados de diciembre de 2024search_result = firecrawl.search( "firecrawl updates", limit=10, tbs="cdr:1,cd_min:12/1/2024,cd_max:12/31/2024")
import { Firecrawl } from 'firecrawl';// Inicializa el cliente con tu clave de APIconst firecrawl = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});// Busca resultados de diciembre de 2024firecrawl.search("firecrawl updates", { limit: 10, tbs: "cdr:1,cd_min:12/1/2024,cd_max:12/31/2024"}).then(searchResult => { console.log(searchResult.data);});
Puedes combinar sbd:1 con filtros de tiempo para obtener resultados ordenados por fecha dentro de un rango temporal. Por ejemplo, sbd:1,qdr:w devuelve resultados de la última semana ordenados de más recientes a más antiguos, y sbd:1,cdr:1,cd_min:12/1/2024,cd_max:12/31/2024 devuelve resultados de diciembre de 2024 ordenados por fecha.
Configura un tiempo de espera personalizado para las operaciones de búsqueda:
from firecrawl import Firecrawl# Inicializa el cliente con tu clave de APIfirecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")# Establece un tiempo de espera de 30 segundossearch_result = firecrawl.search( "complex search query", limit=10, timeout=30000 # 30 segundos en milisegundos)
import { Firecrawl } from 'firecrawl';// Inicializa el cliente con tu clave de APIconst firecrawl = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});// Establece un tiempo de espera de 30 segundosfirecrawl.search("complex search query", { limit: 10, timeout: 30000 // 30 segundos en milisegundos}).then(searchResult => { // Procesar los resultados console.log(searchResult.data);});
Para equipos con requisitos estrictos de tratamiento de datos, Firecrawl ofrece opciones de Retención de datos cero (ZDR) para el punto de conexión /search mediante el parámetro enterprise. La búsqueda con ZDR está disponible en los planes Enterprise — visita firecrawl.dev/enterprise para comenzar.
Esto es distinto de la opción de scrape zeroDataRetention, que controla la ZDR para las operaciones de scraping. Consulta Scrape ZDR para obtener más información. El parámetro enterprise solo se aplica a la parte de búsqueda de la solicitud.
Con ZDR de extremo a extremo, tanto Firecrawl como nuestro proveedor de búsqueda upstream aplican retención de datos cero. No se almacenan datos de consultas ni de resultados en ningún punto del pipeline.
Con ZDR anonimizado, Firecrawl aplica retención de datos cero completa por nuestra parte. Nuestro proveedor de búsqueda puede almacenar en caché la consulta, pero está completamente anonimizada — no se adjunta ninguna información identificativa.
Si estás usando search con scraping de contenido (scrapeOptions), el parámetro enterprise cubre la parte de búsqueda, mientras que zeroDataRetention en scrapeOptions cubre la parte de scraping. Para obtener ZDR completo en ambos, configura ambos:
El costo de una búsqueda es de 2 créditos por cada 10 resultados, redondeado hacia arriba (1–10 resultados = 2 créditos, 11–20 = 4 créditos, y así sucesivamente). Si las opciones de scraping están habilitadas, se aplican los costos estándar de scraping a cada resultado de búsqueda:
Basic scrape: 1 crédito por página web
PDF parsing: 1 crédito por página de PDF
Enhanced proxy mode: 4 créditos adicionales por página web
JSON mode: 4 créditos adicionales por página web
Para ayudar a controlar los costos:
Establece parsers: [] si no se requiere el análisis de PDF
Usa proxy: "basic" en lugar de "enhanced" cuando sea posible, o configúralo en "auto"
Limita la cantidad de resultados de búsqueda con el parámetro limit
Para más detalles sobre las opciones de scraping, consulta la documentación de la función Scrape. Todo, excepto FIRE-1 (Agente) y seguimientoDeCambios, es compatible con este punto de conexión de búsqueda.
¿Eres un agente de IA que necesita una API key de Firecrawl? Consulta firecrawl.dev/agent-onboarding/SKILL.md para ver las instrucciones de incorporación automatizada.
Cuando un resultado de búsqueda es útil o le falta contenido importante, envía tus comentarios con POST /v2/search/{jobId}/feedback. El primer envío de comentarios para un trabajo de búsqueda puede reembolsar 1 crédito, según los límites del equipo, y ayuda a mejorar la calidad de búsqueda de Firecrawl. Consulta Comentarios sobre la búsqueda.