> ## Documentation Index
> Fetch the complete documentation index at: https://firecrawl-abimaelmartell-agent-default-model.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Vercel AI SDK

> Ferramentas Firecrawl para o Vercel AI SDK. Web scraping, busca, navegação e extração de dados para aplicações de IA.

Ferramentas Firecrawl para o Vercel AI SDK. Faça scraping, busque, navegue e extraia dados da web em suas aplicações de IA.

<div id="install">
  ## Instalação
</div>

```bash theme={null}
npm install firecrawl-aisdk ai
```

Configure as variáveis de ambiente:

```bash theme={null}
FIRECRAWL_API_KEY=fc-your-key       # https://firecrawl.dev
AI_GATEWAY_API_KEY=your-key         # https://vercel.com/ai-gateway
```

<Note>
  Estes exemplos usam o formato de modelo de string do [Vercel AI Gateway](https://vercel.com/ai-gateway), mas as ferramentas do Firecrawl funcionam com qualquer provedor de SDK de IA. Você pode trocar por `openai('gpt-5-mini')`, `anthropic('claude-sonnet-4.5')` ou qualquer [provedor compatível](https://ai-sdk.dev/providers/ai-sdk-providers).
</Note>

<div id="quick-start">
  ## Início rápido
</div>

A forma mais fácil de começar. `FirecrawlTools()` fornece ferramentas de busca, scraping e navegador com um prompt de sistema gerado automaticamente que orienta o modelo na escolha das ferramentas.

```typescript theme={null}
import { generateText, stepCountIs } from 'ai';
import { FirecrawlTools } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  prompt: 'Search for Firecrawl, scrape the top result, and summarize what it does',
  tools: FirecrawlTools(),
  stopWhen: stepCountIs(5),
});
```

Com opções personalizadas:

```typescript theme={null}
const tools = FirecrawlTools({
  apiKey: 'fc-custom-key',                // opcional, usa variável de ambiente por padrão
  search: { limit: 3, country: 'US' },    // opções padrão de busca
  scrape: { onlyMainContent: true },       // opções padrão de scrape
  browser: {},                             // habilitar ferramenta de navegador
});
```

Desative qualquer ferramenta passando `false`:

```typescript theme={null}
const tools = FirecrawlTools({
  browser: false,   // somente search + scrape
});
```

<div id="individual-tools">
  ## Ferramentas Individuais
</div>

Cada ferramenta é **de uso duplo** – você pode usá-la diretamente como ferramenta (lê `FIRECRAWL_API_KEY` das variáveis de ambiente) ou chamá-la como uma factory para configuração personalizada:

```typescript theme={null}
import { scrape, search } from 'firecrawl-aisdk';

// Use diretamente - lê FIRECRAWL_API_KEY do env
const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  tools: { scrape, search },
  prompt: '...',
});

// Ou chame como factory para configuração personalizada
const customScrape = scrape({ apiKey: 'fc-custom-key' });
const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  tools: { scrape: customScrape },
  prompt: '...',
});
```

<div id="scrape">
  ### Scrape
</div>

```typescript theme={null}
import { generateText } from 'ai';
import { scrape } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  prompt: 'Faça scraping de https://firecrawl.dev e resuma o que ele faz',
  tools: { scrape },
});
```

<div id="search">
  ### Pesquisa
</div>

```typescript theme={null}
import { generateText } from 'ai';
import { search } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  prompt: 'Pesquise sobre Firecrawl e resuma o que encontrar',
  tools: { search },
});
```

<div id="search-scrape">
  ### Busca + Raspagem
</div>

```typescript theme={null}
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 e explique o que ele faz',
  tools: { search, scrape },
});
```

<div id="map">
  ### Mapeamento
</div>

```typescript theme={null}
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 },
});
```

<div id="stream">
  ### Streaming
</div>

```typescript theme={null}
import { streamText } from 'ai';
import { scrape } from 'firecrawl-aisdk';

const result = streamText({
  model: 'anthropic/claude-sonnet-4.5',
  prompt: 'Faça scraping de https://firecrawl.dev e explique o que ele faz',
  tools: { scrape },
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}
```

<div id="browser">
  ## Browser
</div>

A ferramenta de navegador cria automaticamente uma sessão em nuvem no primeiro uso e realiza a limpeza ao encerrar o processo:

```typescript theme={null}
import { generateText, stepCountIs } from 'ai';
import { browser } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  tools: { browser: browser() },
  stopWhen: stepCountIs(25),
  prompt: 'Go to https://news.ycombinator.com and get the top 3 stories.',
});
```

Para obter uma URL de visualização em tempo real (para acompanhar o navegador ao vivo) ou controlar manualmente o ciclo de vida da sessão:

```typescript theme={null}
const browserTool = browser();
console.log('Live view:', await browserTool.start());

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  tools: { browserTool },
  stopWhen: stepCountIs(25),
  prompt: 'Go to https://news.ycombinator.com and get the top 3 stories.',
});

await browserTool.close();
```

<div id="browser-search">
  ### Navegador + Busca
</div>

```typescript theme={null}
import { generateText, stepCountIs } from 'ai';
import { browser, search } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  tools: { browser: browser(), search },
  stopWhen: stepCountIs(25),
  prompt: 'Busque o principal artigo de IA desta semana, navegue nele e resuma as principais descobertas.',
});
```

<div id="async-tools">
  ## Ferramentas assíncronas
</div>

Crawl, batch scrape, extract e agent retornam um ID de job. Use-os com `poll` para obter os resultados:

<div id="crawl">
  ### Crawl
</div>

```typescript theme={null}
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 },
});
```

<div id="batch-scrape">
  ### Batch Scrape
</div>

```typescript theme={null}
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',
  tools: { batchScrape, poll },
});
```

<div id="agent">
  ### Agent
</div>

Coleta autônoma de dados na web - pesquisa, navega e extrai dados por conta própria.

```typescript theme={null}
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),
});
```

<div id="all-exports">
  ## Todas as exportações
</div>

```typescript theme={null}
import {
  // Ferramentas de uso duplo (use diretamente ou chame como factory)
  scrape,             // Faz scrape de uma única URL
  search,             // Pesquisa na web
  map,                // Descobre URLs em um site
  crawl,              // Faz crawl de múltiplas páginas (async)
  batchScrape,        // Faz scrape de múltiplas URLs (async)
  agent,              // Agente web autônomo (async)
  extract,            // Extrai dados estruturados (async)

  // Gerenciamento de jobs
  poll,               // Consulta jobs assíncronos por resultados
  status,             // Verifica o status do job
  cancel,             // Cancela jobs em execução

  // Browser (somente factory)
  browser,            // browser({ firecrawlApiKey: '...' })

  // Pacote tudo-em-um
  FirecrawlTools,     // FirecrawlTools({ apiKey, search, scrape, browser })

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