Guide gratuit
Automatiser l’extraction de données de factures avec n8n et un OCR IA
Automatiser l’extraction de données à partir de factures est devenu un enjeu clé pour les indépendants, comptables, ou PME souhaitant gagner du temps sur le traitement administratif, réduire les erreurs manuelles, et centraliser facilement leurs justificatifs.
Grâce à n8n, une plateforme d’automatisation visuelle, et à un moteur d’OCR basé sur l’intelligence artificielle, il est aujourd’hui possible d’extraire automatiquement les informations contenues dans des factures PDF ou des tickets de caisse : montant, TVA, date, fournisseur, lignes produits, etc.
Cette formation vous montre pas à pas comment mettre en place un workflow complet : depuis la récupération automatique de documents jusqu’à leur structuration et leur export dans un outil comptable comme Excel, Google Sheets ou Airtable.
Exemples de cas d’usage :
- Extraction automatisée de tickets restaurant pour notes de frais
- Lecture de justificatifs fournisseurs pour classement comptable
- Création d’un tableau de suivi des factures clients avec TVA
1. Préparer ses factures pour l’automatisation
1.1 Centraliser vos documents
Pour que l’automatisation fonctionne de manière fiable, il est recommandé de regrouper toutes les factures et tickets dans un emplacement centralisé. Les options les plus simples à intégrer avec n8n sont :
- Google Drive
- Dropbox
- Amazon S3
- FTP / WebDAV
1.2 Formats supportés
Les moteurs OCR acceptent généralement les formats suivants :
- PDF (idéal pour les factures)
- JPG / PNG (utile pour les tickets scannés ou photos)
Évitez les formats complexes ou hybrides (PDF scanné avec contenu vectoriel partiel).
1.3 Bonnes pratiques
- Utilisez une résolution suffisante : 300 DPI recommandé
- Évitez les documents flous ou mal cadrés
- Ajoutez un système de nommage clair (ex :
facture_fournisseur_2024-05.pdf) - Triez les fichiers par dossier mensuel ou fournisseur pour faciliter le traitement en lot
2. Déclencher le workflow dans n8n
Pour lancer automatiquement le traitement des factures, il faut définir un point de départ (trigger) dans n8n. Deux méthodes principales sont possibles :
2.1 Déclenchement manuel (mode test ou ponctuel)
Idéal pour les tests ou les utilisateurs qui préfèrent déposer manuellement un fichier dans un dossier :
- Créer un trigger de type Manual Trigger dans n8n
- Lancer manuellement le traitement à chaque ajout de document
2.2 Déclenchement automatique (en production)
Pour automatiser complètement l’import de nouveaux fichiers, utilisez un trigger relié à une source externe comme :
- Google Drive : avec le nœud
Google Drive → Watch Files - Dropbox : avec le nœud
Dropbox → Watch Files - Webhook : si un autre outil ou formulaire peut envoyer le fichier
2.3 Exemple concret : surveillance d’un dossier Drive
Dans ce cas, le trigger détectera l’ajout d’un nouveau PDF :
- Ajouter le nœud Google Drive → Watch Files
- Configurer l’authentification OAuth2 avec votre compte Google
- Spécifier le dossier à surveiller
- Choisir le mode “Only Files” et le type “Added”
Chaque nouveau fichier déclenchera automatiquement le workflow d’analyse OCR.
3. Télécharger et convertir les fichiers à analyser
Avant d’envoyer un document à un moteur OCR, il faut le récupérer depuis sa source (Google Drive, Dropbox, etc.) et le convertir en base64 si l’API OCR ne prend pas les URLs directement.
3.1 Téléchargement du fichier depuis la source
Selon la plateforme utilisée, n8n propose des nœuds natifs pour récupérer le fichier :
- Google Drive → Download : à partir de l’ID transmis par le trigger
- Dropbox → Download File
- Webhook ou API : pour recevoir un fichier depuis un autre outil
Ce nœud retournera le document au format binary, prêt à être transformé.
3.2 Conversion en base64
La majorité des APIs OCR, comme celle de Mistral, exigent que le document soit encodé en base64 dans l’appel HTTP.
Voici un exemple de conversion dans n8n avec un nœud Function :
// Récupération des données binaires du fichier PDF
const binaryData = items[0].binary.data;
let base64Data = '';
// Extraction du contenu base64
if (binaryData) {
base64Data = binaryData.data;
// Sortie propre au format JSON
items = [
{
json: {
data: base64Data
}
}
];
}
return items;
Le résultat est une variable {{$json["data"]}} contenant le document encodé en base64, prête à être utilisée dans l’appel à l’API OCR.
💡 Astuce
Tu peux aussi renommer la clé dans le retour JSON si tu veux l’appeler autrement (par ex. pdf_base64), ou concaténer directement la chaîne data:application/pdf;base64, à ce stade si l’API le demande.
4. Appel à un moteur OCR IA
Une fois le fichier PDF converti en base64, il est temps de l’envoyer à un moteur OCR basé sur l’intelligence artificielle pour en extraire les données lisibles.
4.1 Pourquoi ne pas utiliser OpenAI ou Sora ?
Bien que des modèles généralistes comme OpenAI GPT ou Sora soient capables de lire des fichiers texte ou images, ils posent de nombreux problèmes lorsqu’on leur soumet des documents structurés comme des factures :
- Ils réécrivent les phrases et modifient les intitulés de ligne
- Ils peuvent oublier des lignes entières ou tronquer après un certain nombre d’éléments
- Ils interprètent parfois mal les montants, dates ou numéros de facture
Résultat : des données erronées et inutilisables pour une comptabilité fiable.
4.2 Utiliser Mistral OCR pour une extraction fiable
La solution recommandée ici en 2025 est l’utilisation du moteur Mistral OCR, qui propose une API dédiée à l’analyse de documents comme les factures ou les tickets. Mais dans les prochaines années je ne doute pas que les modèles d’OpenAI et SORA sauront le faire facilement !
Le modèle utilisé est mistral-ocr-latest, et il fonctionne aussi bien avec des PDF qu’avec des images (JPG/PNG), en base64.
Exemple d’appel API depuis n8n (via HTTP Request)
Voici la structure à utiliser dans un nœud HTTP Request dans n8n :
{
"method": "POST",
"url": "https://api.mistral.ai/v1/ocr",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{YOUR_MISTRAL_API_KEY}}"
},
"body": {
"model": "mistral-ocr-latest",
"document": {
"type": "document_url",
"document_url": "data:application/pdf;base64,{{$json[\"data\"]}}"
},
"include_image_base64": true
},
"options": {
"bodyContentType": "json"
}
}
Important : l’URL doit contenir la chaîne complète data:application/pdf;base64, suivie du contenu base64 retourné par le nœud précédent.
4.3 En cas de format image (ticket restaurant, photo de note de frais)
Si tu traites un fichier image (JPG, PNG), la structure change légèrement :
{
"model": "mistral-ocr-latest",
"document": {
"type": "image_url",
"image_url": "data:image/jpeg;base64,{{$json[\"data\"]}}"
}
}
Dans ce cas, pense à adapter le type MIME : image/jpeg ou image/png.
Résultat attendu
Le moteur retourne un objet JSON contenant le texte brut, séparé par page, et dans un format facile à parser ou à restructurer. Il reconnaît généralement :
- Le nom du client et du fournisseur
- Les lignes de prestation ou produits
- Les totaux, TVA, date et numéro de facture
Dans nos tests, Mistral a réussi à extraire 100 % des lignes d’une facture PDF de 3 pages, sans perte ni altération des intitulés ou des montants.
5. Nettoyer et structurer les données extraites par OCR
Une fois la réponse de l’API OCR récupérée, le texte peut être long, structuré par pages, et parfois difficile à exploiter tel quel. Il est donc essentiel de le nettoyer et de le restructurer.
5.1 Réunir le texte OCR (multi-pages)
Le moteur OCR (comme Mistral) retourne souvent un tableau avec une entrée par page. Pour reconstituer un seul texte complet :
- Ajouter un nœud Split Out pour découper chaque page
- Utiliser un nœud Edit Fields ou Set pour cibler uniquement le contenu utile (ex :
markdown,text,raw) - Ajouter un nœud Merge / Combine ou Summarize avec l’option
concatenatepour rassembler les textes
5.2 Exemple de fusion Markdown dans n8n
// Dans un nœud Function
return [{
json: {
fullText: items.map(i => i.json.markdown).join('\n\n')
}
}];
Ce code permet de créer un seul champ fullText avec le contenu complet du document OCR.
5.3 Structurer proprement les données (via un LLM)
Une fois le texte réuni, il peut être utile de le transformer en tableau structuré (ex : nom du client, tableau de produits, total HT/TTC, TVA, etc.).
Ajoute pour cela un nœud Agent LLM ou Basic LLM Chain dans n8n, relié à un modèle comme :
- Anthropic Claude (idéal pour structurer sans halluciner)
- Mistral instruct
- OpenAI GPT-4 (en mode très strict avec consignes claires)
🎯 Exemple de prompt système
Tu es un assistant expert en structuration de documents.
Ne modifie pas le contenu fourni. Ton objectif est uniquement de structurer les données.
Retourne :
1. Les informations du client et de la société (nom, adresse, SIRET, etc.)
2. Un tableau des prestations ou produits (désignation, quantité, prix unitaire, total)
3. Les totaux (HT, TVA, TTC), numéro de facture, date, IBAN si présent
Format attendu : Markdown clair et exploitable.
Le résultat pourra ensuite être utilisé tel quel ou transformé en tableau pour l’export.
6. Export vers Excel, Google Sheets ou un outil comptable
Une fois les données extraites et structurées, l’étape suivante est de les stocker dans un format exploitable pour la comptabilité ou l’analyse.
6.1 Export vers Google Sheets
Google Sheets est simple à intégrer avec n8n et permet de créer des tableaux de suivi des factures ou notes de frais.
- Ajouter un nœud Google Sheets → Append Row
- Se connecter à ton compte Google via OAuth2
- Indiquer l’ID de la feuille et l’onglet cible
- Mapper les colonnes (date, client, montant, TVA, etc.) avec les champs JSON extraits
💡 Astuce : tu peux aussi créer un onglet par mois ou par fournisseur pour une meilleure organisation.
6.2 Export vers Excel (via OneDrive ou local)
Si tu utilises Excel au lieu de Google Sheets :
- Tu peux passer par Microsoft Excel Online (OneDrive) avec l’intégration native
- Ou exporter les données au format
.csvvia un nœud Spreadsheet File ou Function - Enfin, envoyer le fichier par email ou le sauvegarder sur un drive partagé
6.3 Connexion à un ERP ou logiciel comptable
Si tu travailles avec un outil de gestion comptable ou un ERP, il est souvent possible de :
- Utiliser une API REST pour pousser les données
- Automatiser une importation de fichier CSV dans le logiciel
- Créer des “brouillons” de factures dans l’ERP avec les informations OCRisées
Parmi les outils compatibles :
- QuickBooks
- Sage Business Cloud
- Odoo
- Axonaut, Indy, Dougs, Pennylane…
💡 Bonus : génération automatique de fichiers PDF ou emails
Tu peux également générer :
- Un PDF de synthèse avec les données extraites
- Un email automatique avec résumé de facture (par ex. pour le service comptable)
n8n propose pour cela des nœuds comme PDF Generator, Send Email ou HTML to PDF.
7. Améliorations et cas avancés
Une fois le workflow principal en place, il est possible d’ajouter des étapes supplémentaires pour améliorer la fiabilité, automatiser la classification comptable ou éviter les doublons.
7.1 Détection de doublons de factures
Pour éviter d’enregistrer deux fois la même facture, tu peux :
- Vérifier si le numéro de facture ou le montant total existe déjà dans ta base
- Interroger Google Sheets, Airtable ou une base de données avant insertion
- Ajouter une condition dans n8n (nœud IF) pour bloquer l’export en cas de doublon
7.2 Classification automatique des dépenses
Tu peux faire classer automatiquement les factures extraites dans des catégories comptables, par exemple :
- Repas (tickets restaurant, bars, cafés)
- Transports (essence, billets, péages)
- Fournitures (matériel de bureau, logiciels)
Pour cela, ajoute un nœud LLM ou Set avec une logique conditionnelle en fonction du contenu de la facture (description, fournisseur, montant).
7.3 Extraction et validation de la TVA
Le montant de la TVA est crucial pour la comptabilité :
- Si elle est explicitement mentionnée, extrais-la avec un regex ou LLM
- Sinon, tu peux la recalculer à partir du HT/TTC
- Vérifie sa cohérence avant enregistrement (ex. taux à 5,5 %, 10 %, 20 %…)
7.4 Intégration à un processus d’approbation
Pour les entreprises avec plusieurs collaborateurs, tu peux créer un système d’approbation :
- Envoyer un email ou Slack avec les infos extraites
- Attendre une validation manuelle ou un clic sur un lien
- Ne lancer l’export que si le ticket est “validé”
7.5 Traitement en masse (batch)
Tu peux aussi traiter plusieurs fichiers en une seule fois :
- Surveillance d’un dossier complet contenant 10 à 100 factures
- Boucle For Each pour les analyser une par une
- Génération d’un seul tableau consolidé en sortie