Aller au contenu principal

Web scraping avec Firecrawl

Firecrawl est une API de données web qui transforme des sites en Markdown propre ou en JSON structuré. Dans ce guide, vous intégrerez Firecrawl à des Tools Mastra afin que vos agents et workflows puissent rechercher et extraire à la demande des données web actualisées.

Prérequis
Lien direct vers Prérequis

Installation
Lien direct vers Installation

Installez le SDK Firecrawl :

npm install firecrawl

Configurer les variables d'environnement
Lien direct vers Configurer les variables d'environnement

Créez un fichier .env à la racine de votre projet :

.env
FIRECRAWL_API_KEY=fc-your-api-key
# Optional: FIRECRAWL_API_URL=http://localhost:3002

Créer les Tools Firecrawl
Lien direct vers Créer les Tools Firecrawl

Créez un fichier de Tool qui rend les fonctionnalités de recherche et de scraping de Firecrawl accessibles à Mastra.

  1. Créez src/mastra/tools/firecrawl.ts et configurez Firecrawl :

    src/mastra/tools/firecrawl.ts
    import { Firecrawl } from 'firecrawl'
    import { createTool } from '@mastra/core/tools'
    import { z } from 'zod'

    const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY! })

    export const firecrawlSearch = createTool({
    id: 'firecrawl-search',
    description: 'Search the web and return top results.',
    inputSchema: z.object({ query: z.string().min(1) }),
    outputSchema: z.object({
    results: z.array(
    z.object({
    title: z.string().nullable(),
    url: z.string(),
    }),
    ),
    }),
    execute: async ({ query }) => {
    const results = await firecrawl.search(query, { limit: 3 })
    return {
    results: (results.web ?? []).map(item => ({
    title: item.title ?? null,
    url: item.url,
    })),
    }
    },
    })

    export const firecrawlScrape = createTool({
    id: 'firecrawl-scrape',
    description: 'Scrape a URL and return markdown content.',
    inputSchema: z.object({ url: z.string().url() }),
    outputSchema: z.object({ markdown: z.string() }),
    execute: async ({ url }) => {
    const result = await firecrawl.scrape(url, {
    formats: ['markdown'],
    onlyMainContent: true,
    })
    return { markdown: result.markdown ?? '' }
    },
    })
  2. Créez un nouvel Agent dans src/mastra/agents/web-agent.ts :

    src/mastra/agents/web-agent.ts
    import { Agent } from '@mastra/core/agent'
    import { firecrawlSearch, firecrawlScrape } from '../tools/firecrawl'

    export const webAgent = new Agent({
    id: 'web-agent',
    name: 'Web Agent',
    instructions: 'Use Firecrawl tools to search and scrape web pages, then summarize the results.',
    model: 'openai/gpt-5.6-sol',
    tools: { firecrawlSearch, firecrawlScrape },
    })
  3. Enregistrez l'Agent que vous venez de créer dans src/mastra/index.ts, sur votre instance Mastra :

    src/mastra/index.ts
    import { Mastra } from '@mastra/core'
    import { webAgent } from './agents/web-agent'

    export const mastra = new Mastra({
    agents: { webAgent },
    })

Tester dans Studio
Lien direct vers Tester dans Studio

Lancez le serveur de développement et ouvrez Studio :

mastra dev

Dans Studio, ouvrez Web Agent et essayez les requêtes suivantes :

  • « Trouve le dernier changelog de Mastra et résume la version la plus récente. »
  • « Recherche les tarifs de Firecrawl et extrais les différents niveaux d'offre. »

Firecrawl auto-hébergé
Lien direct vers Firecrawl auto-hébergé

Si vous exécutez Firecrawl localement, définissez FIRECRAWL_API_URL ou transmettez apiUrl au client :

src/mastra/tools/firecrawl.ts
const firecrawl = new Firecrawl({
apiKey: process.env.FIRECRAWL_API_KEY!,
apiUrl: process.env.FIRECRAWL_API_URL,
})