Documentation Index
Fetch the complete documentation index at: https://firecrawl-mog-search-exclude-include-domains.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Herramientas de Firecrawl para Vercel AI SDK. Busca, haz scraping, interactúa con páginas y rastrea la web en tus aplicaciones de IA.
npm install firecrawl-aisdk ai
Configura las variables de entorno:
FIRECRAWL_API_KEY=fc-your-key # https://firecrawl.dev
AI_GATEWAY_API_KEY=your-key # https://vercel.com/ai-gateway
Estos ejemplos usan el formato de modelo string de Vercel AI Gateway, pero las herramientas de Firecrawl funcionan con cualquier proveedor de SDK de IA. También puedes usar importaciones de proveedores como anthropic('claude-sonnet-4-5-20250514') de @ai-sdk/anthropic.
FirecrawlTools() incluye search, scrape e interact de forma predeterminada.
import { generateText, stepCountIs } from 'ai';
import { FirecrawlTools } from 'firecrawl-aisdk';
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
tools: FirecrawlTools(),
stopWhen: stepCountIs(30),
prompt: `
1. Use interact on Hacker News to identify the top story
2. Search for other perspectives on the same topic
3. Scrape the most relevant pages you found
4. Summarize everything you found
`,
});
FirecrawlTools() incluye las herramientas predeterminadas y un systemPrompt generado automáticamente que puedes pasar a generateText.
import { generateText, stepCountIs } from 'ai';
import { FirecrawlTools } from 'firecrawl-aisdk';
const tools = FirecrawlTools();
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
system: `${tools.systemPrompt}\n\nAnswer with citations when possible.`,
tools,
stopWhen: stepCountIs(20),
prompt: 'Find the current Firecrawl pricing page and explain the available plans.',
});
Puedes personalizar los valores predeterminados, usar herramientas asíncronas o deshabilitar herramientas individuales:
const tools = FirecrawlTools({
search: { limit: 5 },
scrape: { formats: ['markdown'], onlyMainContent: true },
interact: { profile: { name: 'my-session', saveChanges: true } },
crawl: true,
agent: true,
});
// Deshabilitar interact, mantener search + scrape
FirecrawlTools({ interact: false });
// Activar compatibilidad con browser obsoleto
FirecrawlTools({ browser: {} });
// Incluir todas las herramientas disponibles
FirecrawlTools({ all: true });
Al hacer scraping para responder una pregunta sobre una página, prefiere el formato de consulta:
formats: [{ type: 'query', prompt: 'What does this page say about pricing and rate limits?' }]
Usa formats: ['markdown'] solo cuando necesites el contenido completo de la página.
Cada herramienta se puede usar directamente o invocar con opciones:
import { generateText } from 'ai';
import { scrape, search } from 'firecrawl-aisdk';
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'Buscar Firecrawl, then scraping the most relevant result.',
tools: { search, scrape },
});
const customScrape = scrape({ apiKey: 'fc-custom-key', apiUrl: 'https://api.firecrawl.dev' });
import { generateText } from 'ai';
import { search, scrape } from 'firecrawl-aisdk';
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'Busca Firecrawl, extrae el resultado oficial principal y explica qué hace.',
tools: { search, scrape },
});
import { generateText } from 'ai';
import { map } from 'firecrawl-aisdk';
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'Mapea https://docs.firecrawl.dev y lista las secciones principales.',
tools: { map },
});
import { streamText, stepCountIs } from 'ai';
import { scrape } from 'firecrawl-aisdk';
const result = streamText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'What is the first 100 words of firecrawl.dev?',
tools: { scrape },
stopWhen: stepCountIs(3),
});
for await (const chunk of result.textStream) {
process.stdout.write(chunk);
}
await result.fullStream;
interact() crea una sesión interactiva basada en scraping. Llama a start(url) para iniciar una sesión y obtener una URL de vista en vivo, y luego permite que el modelo reutilice esa sesión mediante la herramienta interact.
import { generateText, stepCountIs } from 'ai';
import { interact, search } from 'firecrawl-aisdk';
const interactTool = interact();
console.log('Live view:', await interactTool.start('https://news.ycombinator.com'));
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
tools: { interact: interactTool, search },
stopWhen: stepCountIs(25),
prompt: 'Usa interact en la sesión actual de Hacker News, encuentra la historia principal y luego busca más contexto.',
});
await interactTool.close();
Si necesitas la URL explícita de la vista en vivo tras el inicio, usa interactTool.interactiveLiveViewUrl.
Reutiliza el estado del browser entre sesiones con perfiles:
const interactTool = interact({
profile: { name: 'my-session', saveChanges: true },
});
browser() está obsoleto. Usa interact() en su lugar.
rastreo, extracción por lotes y agent devuelven un ID de trabajo. Combínalos con poll.
import { generateText } from 'ai';
import { crawl, poll } from 'firecrawl-aisdk';
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'Rastreo https://docs.firecrawl.dev (limit 3 pages) and summarize.',
tools: { crawl, poll },
});
import { generateText } from 'ai';
import { batchScrape, poll } from 'firecrawl-aisdk';
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'Scraping https://firecrawl.dev and https://docs.firecrawl.dev, then compare them.',
tools: { batchScrape, poll },
});
Recopilación autónoma de datos web que busca, navega y extrae por sí sola.
import { generateText, stepCountIs } from 'ai';
import { agent, poll } from 'firecrawl-aisdk';
const { text } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'Encuentra los fundadores de Firecrawl, sus roles y sus trayectorias.',
tools: { agent, poll },
stopWhen: stepCountIs(10),
});
import { generateText } from 'ai';
import { logStep, scrape, stepLogger } from 'firecrawl-aisdk';
const logger = stepLogger();
const { text, usage } = await generateText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'Scraping https://firecrawl.dev and summarize it.',
tools: { scrape },
onStepFinish: logger.onStep,
experimental_onToolCallFinish: logger.onToolCallFinish,
});
logger.close();
logger.summary(usage);
await generateText({
model: 'anthropic/claude-sonnet-4-5',
prompt: 'Scraping https://firecrawl.dev and summarize it again.',
tools: { scrape },
onStepFinish: logStep,
});
import {
// Herramientas principales
search, // Buscar en la web
scrape, // Scraping de una sola URL
map, // Descubrir URLs en un sitio
crawl, // rastreo de múltiples páginas (async, usar poll)
batchScrape, // Scraping de múltiples URLs (async, usar poll)
agent, // Investigación web autónoma (async, usar poll)
// Gestión de trabajos
poll, // Consultar trabajos async para obtener resultados
status, // Comprobar el status del trabajo
cancel, // Cancelar trabajos en ejecución
// Herramientas de browser/sesión
interact, // interact({ profile: { name: '...' } })
browser, // exportación de compatibilidad obsoleta
// Paquete todo en uno
FirecrawlTools, // FirecrawlTools({ search, scrape, interact, crawl, agent })
// Utilidades
stepLogger, // Estadísticas de tokens por llamada a herramienta
logStep, // Registro simple en una línea
} from 'firecrawl-aisdk';