Pular para o conteúdo principal
Ferramentas Firecrawl para o Vercel AI SDK. Busque, faça scraping, interaja com páginas e rastreie a web em suas aplicações de IA.

Instalação

npm install firecrawl-aisdk ai
Configure as variáveis de ambiente:
FIRECRAWL_API_KEY=fc-your-key       # https://firecrawl.dev
AI_GATEWAY_API_KEY=your-key         # https://vercel.com/ai-gateway
Estes exemplos usam o formato de modelo de string do Vercel AI Gateway, mas as ferramentas do Firecrawl funcionam com qualquer provedor de SDK de IA. Você também pode usar importações de provedores, como anthropic('claude-sonnet-4-5-20250514'), de @ai-sdk/anthropic.

Início rápido

FirecrawlTools() inclui search, scrape e interact por padrão.
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

FirecrawlTools() inclui as ferramentas default e um systemPrompt gerado automaticamente, que você pode passar para 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.',
});
Você pode personalizar as configurações padrão, usar ferramentas assíncronas ou desativar ferramentas individuais:
const tools = FirecrawlTools({
  search: { limit: 5 },
  scrape: { formats: ['markdown'], onlyMainContent: true },
  interact: { profile: { name: 'my-session', saveChanges: true } },
  crawl: true,
  agent: true,
});
// Desabilitar interact, manter search + scrape
FirecrawlTools({ interact: false });

// Ativar compatibilidade com navegador depreciado
FirecrawlTools({ browser: {} });

// Incluir todas as ferramentas disponíveis
FirecrawlTools({ all: true });
Ao fazer scraping para responder a uma pergunta sobre uma página, prefira usar o formato de consulta:
formats: [{ type: 'query', prompt: 'What does this page say about pricing and rate limits?' }]
Use formats: ['markdown'] apenas quando precisar do conteúdo completo da página.

Ferramentas Individuais

Cada ferramenta pode ser usada diretamente ou chamada com opções:
import { generateText } from 'ai';
import { scrape, search } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Search for Firecrawl, then scrape the most relevant result.',
  tools: { search, scrape },
});

const customScrape = scrape({ apiKey: 'fc-custom-key', apiUrl: 'https://api.firecrawl.dev' });

Busca + Scraping

import { generateText } from 'ai';
import { search, scrape } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Busque por Firecrawl, faça scrape do primeiro resultado oficial e explique o que ele faz.',
  tools: { search, scrape },
});

Mapeamento

import { generateText } from 'ai';
import { map } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Map https://docs.firecrawl.dev and list the main sections.',
  tools: { map },
});

Streaming

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;

Interagir

interact() cria uma sessão interativa baseada em scraping. Chame start(url) para iniciar uma sessão e obter uma URL de visualização em tempo real; depois, permita que o modelo reutilize essa sessão por meio da ferramenta 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: 'Use interact na sessão atual do Hacker News, encontre a principal notícia e faça uma busca por mais contexto.',
});

await interactTool.close();
Se você precisar da URL explícita da visualização em tempo real após a inicialização, use interactTool.interactiveLiveViewUrl. Reutilize o estado do navegador entre sessões usando perfis:
const interactTool = interact({
  profile: { name: 'my-session', saveChanges: true },
});
browser() foi descontinuado. Prefira interact().

Ferramentas assíncronas

Rastreamento, batch scrape e agent retornam um ID de job. Use-os com poll.

Rastreamento

import { generateText } from 'ai';
import { crawl, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Crawl https://docs.firecrawl.dev (limit 3 pages) and summarize.',
  tools: { crawl, poll },
});

Batch Scrape

import { generateText } from 'ai';
import { batchScrape, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Scrape https://firecrawl.dev and https://docs.firecrawl.dev, then compare them.',
  tools: { batchScrape, poll },
});

Agent

Coleta autônoma de dados na web que busca, navega e extrai dados por conta própria.
import { generateText, stepCountIs } from 'ai';
import { agent, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Find the founders of Firecrawl, their roles, and their backgrounds.',
  tools: { agent, poll },
  stopWhen: stepCountIs(10),
});

Logs

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: 'Scrape 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: 'Scrape https://firecrawl.dev and summarize it again.',
  tools: { scrape },
  onStepFinish: logStep,
});

Todas as exportações

import {
  // Ferramentas principais
  search,             // Fazer uma busca na web
  scrape,             // Scraping de uma única URL
  map,                // Descobrir URLs em um site
  crawl,              // Rastreamento de múltiplas páginas (assíncrono, use poll)
  batchScrape,        // Scraping de múltiplas URLs (assíncrono, use poll)
  agent,              // Pesquisa web autônoma (assíncrono, use poll)

  // Gerenciamento de jobs
  poll,               // Consultar jobs assíncronos para obter resultados
  status,             // Verificar status do job
  cancel,             // Cancelar jobs em execução

  // Ferramentas de navegador/sessão
  interact,           // interact({ profile: { name: '...' } })
  browser,            // exportação de compatibilidade depreciada

  // Pacote completo
  FirecrawlTools,     // FirecrawlTools({ search, scrape, interact, crawl, agent })

  // Utilitários
  stepLogger,         // Estatísticas de tokens por chamada de ferramenta
  logStep,            // Log simples em uma linha
} from 'firecrawl-aisdk';