Suivi des modifications Le suivi des modifications vous permet de surveiller et de détecter les changements dans le contenu web au fil du temps. Cette fonctionnalité est disponible dans les SDK JavaScript et Python.

Vue d’ensemble

Le suivi des modifications vous permet de :
  • Détecter si une page web a changé depuis le dernier scrape
  • Voir les changements précis entre les scrapes
  • Obtenir des données structurées sur ce qui a changé
  • Contrôler la visibilité des changements
En utilisant le format suiviDesModifications, vous pouvez surveiller les changements sur un site web et recevoir des informations sur :
  • previousScrapeAt : l’horodatage du scrape précédent auquel la page actuelle est comparée (null s’il n’y a pas eu de scrape précédent)
  • changeStatus : le résultat de la comparaison entre les deux versions de la page
    • new : cette page n’existait pas ou n’avait pas été découverte auparavant (a généralement un previousScrapeAt à null)
    • same : le contenu de cette page n’a pas changé depuis le dernier scrape
    • changed : le contenu de cette page a changé depuis le dernier scrape
    • removed : cette page a été supprimée depuis le dernier scrape
  • visibility : la visibilité de la page/URL actuelle
    • visible : cette page est visible, ce qui signifie que son URL a été découverte par une voie organique (via des liens sur d’autres pages visibles ou le sitemap)
    • hidden : cette page n’est pas visible, ce qui signifie qu’elle est toujours accessible sur le web, mais n’est plus découvrable via le sitemap ou l’exploration du site. Nous ne pouvons identifier des liens invisibles que s’ils avaient été visibles, et capturés, lors d’un crawl ou d’un scrape précédent

SDKs

Utilisation de base

Pour utiliser le suivi des modifications, incluez « suiviDesModifications » dans les formats lors du scraping d’une URL :
const firecrawl = new Firecrawl({ apiKey: 'your-api-key' });
const result = await firecrawl.scrape('https://example.com', {
  formats: ['markdown', 'changeTracking']
});

// Accéder aux données de suivi des modifications
console.log(result.changeTracking)
Exemple de réponse :
{
  "url": "https://firecrawl.dev",
  "markdown": "# Agents IA pour offrir d’excellentes expériences client\n\nDes chatbots qui enchantent vos utilisateurs...",
  "changeTracking": {
    "previousScrapeAt": "2025-04-10T12:00:00Z",
    "changeStatus": "changé",
    "visibility": "visible"
  }
}

Options avancées

Vous pouvez configurer le suivi des modifications en passant un objet dans le tableau formats :
const result = await firecrawl.scrape('https://example.com', {
  formats: [
    'markdown',
    {
      type: 'changeTracking',
      modes: ['git-diff', 'json'], // Activer des modes spécifiques de suivi des modifications
      schema: {
        type: 'object',
        properties: {
          title: { type: 'string' },
          content: { type: 'string' }
        }
      }, // Schéma pour la comparaison JSON structurée
      prompt: 'Invite personnalisée pour l’extraction', // Invite personnalisée facultative
      tag: 'production' // Tag facultatif pour des historiques de suivi distincts
    }
  ]
});

// Accéder aux changements au format git-diff
if (result.changeTracking.diff) {
  console.log(result.changeTracking.diff.text); // Texte de diff au style Git
  console.log(result.changeTracking.diff.json); // Données de diff structurées
}

// Accéder aux changements de comparaison JSON
if (result.changeTracking.json) {
  console.log(result.changeTracking.json.title.previous); // Titre précédent
  console.log(result.changeTracking.json.title.current); // Titre actuel
}

Exemple de résultats Git‑diff :

 **13 avril 2025**
 
-**17:55:05**
+**17:58:57**

...

Exemple de résultats de comparaison JSON :

{
  "time": { 
    "previous": "2025-04-13T17:54:32Z", 
    "current": "2025-04-13T17:55:05Z" 
  }
}

Modèles de données

La fonctionnalité de suivi des modifications comprend les modèles de données suivants :
interface FirecrawlDocument {
  // ... other properties
  changeTracking?: {
    previousScrapeAt: string | null;
    changeStatus: "new" | "same" | "changed" | "removed";
    visibility: "visible" | "hidden";
    diff?: {
      text: string;
      json: {
        files: Array<{
          from: string | null;
          to: string | null;
          chunks: Array<{
            content: string;
            changes: Array<{
              type: string;
              normal?: boolean;
              ln?: number;
              ln1?: number;
              ln2?: number;
              content: string;
            }>;
          }>;
        }>;
      };
    };
    json?: any;
  };
}

interface ChangeTrackingFormat {
  type: 'changeTracking';
  prompt?: string;
  schema?: any;
  modes?: ("json" | "git-diff")[];
  tag?: string | null;
}

interface ScrapeParams {
  // ... other properties
  formats?: Array<'markdown' | 'html' | ChangeTrackingFormat>;
}

Modes de suivi des modifications

La fonctionnalité de suivi des modifications prend en charge deux modes :

Mode Git-Diff

Le mode git-diff propose un format de diff classique, similaire à la sortie de Git. Il affiche les changements ligne par ligne, avec les ajouts et suppressions clairement signalés. Exemple de sortie :
@@ -1,1 +1,1 @@
-ancien contenu
+nouveau contenu
La représentation JSON structurée du diff comprend :
  • files : tableau des fichiers modifiés (dans un contexte web, généralement un seul)
  • chunks : sections de modifications à l’intérieur d’un fichier
  • changes : modifications de lignes individuelles avec type (add, delete, normal)

Mode JSON

Le mode json fournit une comparaison structurée de champs spécifiques extraits du contenu. C’est utile pour suivre les modifications sur des points de données précis plutôt que sur l’ensemble du contenu. Exemple de sortie :
{
  "title": {
    "previous": "Ancien titre",
    "current": "Nouveau titre"
  },
  "price": {
    "previous": "19,99 $",
    "current": "24,99 $"
  }
}
Pour utiliser le mode JSON, vous devez fournir un schéma qui définit les champs à extraire et à comparer.

Faits importants

Voici quelques points essentiels à connaître lors de l’utilisation de la fonctionnalité de suiviDesModifications :
  • Méthode de comparaison : Les extractions sont toujours comparées à partir de leur réponse en markdown.
    • Le format markdown doit également être spécifié lorsque vous utilisez le format suiviDesModifications (changeTracking). D’autres formats peuvent être ajoutés en complément.
    • L’algorithme de comparaison est tolérant aux variations d’espaces et à l’ordre du contenu. Les URL sources des iframes sont actuellement ignorées afin de mieux gérer les captchas et les antibots qui génèrent des URL aléatoires.
  • Correspondance avec les extractions précédentes : Les extractions précédentes utilisées pour la comparaison sont actuellement appariées sur l’URL source, l’ID d’équipe, le format markdown et le paramètre tag.
    • Pour une comparaison fiable, l’URL fournie doit être exactement la même que lors de la requête précédente visant le même contenu.
    • Explorer les mêmes URL avec des includePaths/excludePaths différents entraînera des incohérences avec suiviDesModifications.
    • Scraper les mêmes URL avec des includeTags/excludeTags/onlyMainContent différents entraînera des incohérences avec suiviDesModifications.
    • Les pages seront également comparées à des extractions précédentes qui n’avaient que le format markdown, sans le format suiviDesModifications.
    • Les comparaisons sont limitées à votre équipe. Si vous scrapez une URL pour la première fois avec votre clé API, son changeStatus sera toujours new, même si d’autres utilisateurs de Firecrawl l’ont déjà traitée auparavant.
  • Statut bêta : Pendant la bêta, il est recommandé de surveiller le champ warning du document résultant et de prendre en compte l’éventuelle absence de l’objet suiviDesModifications dans la réponse.
    • Cela peut se produire si la recherche en base de données du précédent scrape à comparer arrive à expiration.

Exemples

Exemple de scraping simple

// Requête
{
    "url": "https://firecrawl.dev",
    "formats": ["markdown", "suiviDesModifications"]
}

// Réponse
{
  "success": true,
  "data": {
    "markdown": "...",
    "metadata": {...},
    "suiviDesModifications": {
      "previousScrapeAt": "2025-03-30T15:07:17.543071+00:00",
      "changeStatus": "identique",
      "visibility": "visible"
    }
  }
}

Exemple d’exploration

// Requête
{
    "url": "https://firecrawl.dev",
    "scrapeOptions": {
        "formats": ["markdown", "suiviDesModifications"]
    }
}

Suivi des variations de prix des produits

const result = await firecrawl.scrape('https://example.com/product', {
  formats: [
    'markdown',
    {
      type: 'changeTracking',
      modes: ['json'],
      schema: {
        type: 'object',
        properties: {
          price: { type: 'string' },
          availability: { type: 'string' }
        }
      }
    }
  ]
});

if (result.changeTracking.changeStatus === 'changed') {
  console.log(`Le prix est passé de ${result.changeTracking.json.price.previous} à ${result.changeTracking.json.price.current}`);
}

Suivre les modifications de contenu avec Git-Diff

const result = await firecrawl.scrape('https://example.com/blog', {
  formats: [
    'markdown',
    { type: 'changeTracking', modes: ['git-diff'] }
  ]
});

if (result.changeTracking.changeStatus === 'changed') {
  console.log('Modifications du contenu :');
  console.log(result.changeTracking.diff.text);
}

Facturation

La fonctionnalité de suivi des modifications est actuellement en bêta. L’utilisation des fonctionnalités de base de suivi des modifications et du mode git-diff n’entraîne aucun coût supplémentaire. En revanche, si vous utilisez le mode json pour comparer des données structurées, l’extraction de la page coûtera 5 crédits par page.