Extraire les données de factures PDF avec l'IA

Publié le 2 octobre 2026

Extraire les données de factures PDF avec l'IA

Un dossier de demande de crédit d’impôt ou de subvention requiert presque toujours un état récapitulatif des dépenses, facture par facture. Lorsque les quarante factures concernées proviennent d’une vingtaine de fournisseurs, chacun avec sa propre mise en page, ce tableau se construit à la main, en recopiant les montants des PDF dans Excel. C’est plusieurs heures de travail, et autant d’occasions d’erreur sur un document qui sera contrôlé.

L’objectif de cet article est d’automatiser ce travail : extraire certaines informations de factures et les compiler dans un tableau Excel, avec l’aide de l’IA générative. Le besoin concerne de nombreux métiers :

  • Direction et services administratifs : états récapitulatifs pour une subvention, un crédit d’impôt ou un financeur.
  • Achats et contrôle de gestion : analyse des dépenses par fournisseur, suivi des prix unitaires, vérification des remises prévues au contrat.
  • Chefs de projet : suivi du budget réel d’un projet, refacturation de frais à un client.
  • Indépendants et associations sans logiciel comptable automatisé : suivi des dépenses, préparation de la TVA ou du dossier transmis à l’expert-comptable.

La facturation électronique ne règle-t-elle pas déjà le problème ?

Depuis le 1er septembre 2026, toutes les entreprises établies en France doivent pouvoir recevoir des factures électroniques, et les PME, TPE et micro-entreprises devront en émettre à partir du 1er septembre 2027. Une facture électronique au format Factur-X contient la facture au format PDF, lisible par un humain, et des données XML, où chaque information est rangée dans un champ identifié, lisible directement par un logiciel : on parle de données structurées. Pour ces factures, l’IA est inutile.

Une facture PDF classique, sans données XML associées, contient les mêmes informations, mais disposées sur une page pour être lues par un humain, avec des libellés qui varient d’un fournisseur à l’autre (« Total TTC », « Net à payer », « Amount due ») : ses données sont dites non structurées. C’est là que l’IA générative est utile, en lisant ces documents pour en tirer un tableau. Or ces factures resteront nombreuses : poursuite de leur émission possible pour les TPE PME jusqu’en septembre 2027, factures de fournisseurs étrangers, tickets et notes de frais (sous un certain montant), archives, sans compter les devis et bons de commande, qui ne sont pas concernés par la réforme.

Si vos factures sont déjà centralisées dans un logiciel comptable, commencez toutefois par son export : la plupart des outils produisent un fichier Excel des factures sans aucune compétence technique. La méthode présentée ici s’adresse aux autres situations.

Un jeu de factures fictives pour s’exercer

Pour mettre au point la méthode, nous avons demandé à l’IA de créer un jeu de treize factures fictives afin que nous puissions rôder notre processus avant de l’appliquer à nos propres documents. Il couvre les principales difficultés :

  • Formats variés : PDF produits par un logiciel, facture Factur-X, images (JPG, PNG).
  • Factures scannées (dont un scan de mauvaise qualité), photographiées ou manuscrites.
  • Cas particuliers : facture en anglais avec autoliquidation de la TVA, avoir, facture de deux pages, plusieurs taux de TVA (5,5 % et 20 %), facture sans TVA d’un micro-entrepreneur.

Conversation ou agent IA : quel outil utiliser ?

Pour quelques factures, il suffit de les joindre à une conversation avec ChatGPT, Claude ou Le Chat de Mistral, accompagnées du prompt présenté plus bas.

Pour traiter un dossier complet, un agent IA est plus adapté. Dans une conversation, l’IA répond à chaque message, et c’est l’utilisateur qui enchaîne les étapes : déposer les fichiers, relire la réponse, demander le fichier Excel. Un agent IA reçoit un objectif, par exemple « traite toutes les factures de ce dossier et produis un tableau Excel », et organise lui-même les étapes pour l’atteindre. Il dispose pour cela d’outils, comme l’accès aux fichiers d’un dossier ou l’exécution de code, et décide seul de l’ordre dans lequel les utiliser. L’utilisateur n’intervient plus à chaque étape : il vérifie le résultat final.

Les principaux éditeurs proposent ce mode de travail dans leurs offres professionnelles : Claude Cowork chez Anthropic, ChatGPT Work chez OpenAI, le mode Work de Le Chat chez Mistral. La frontière avec la conversation est d’ailleurs poreuse : lors de nos tests, ChatGPT a d’abord proposé de basculer vers son mode Work pour produire le fichier Excel, avant de le générer directement dans la conversation.

Deux approches sont possibles avec un agent. La première consiste à lui confier toute l’opération. La seconde consiste à lui faire écrire un petit programme en Python, appelé script, qui se charge du travail mécanique et ne sollicite l’IA que pour lire chaque facture.

Première approche : confier toute la tâche à un agent IA

Le prompt à donner à l’IA

Je te transmets des factures fournisseurs (PDF, scans ou photos). Pour chaque document, extrais les informations suivantes. Champs à extraire (une ligne par document) :

- Fichier : nom du fichier fourni
- Type : « Facture » ou « Avoir »
- Fournisseur : raison sociale de l'émetteur
- SIRET : 14 chiffres, sans espaces
- Numéro de facture
- Date de facture : format JJ/MM/AAAA
- Date d'échéance : format JJ/MM/AAAA
- Total HT : montant après remises éventuelles
- Total TVA
- Total TTC : montant final à payer
- Taux de TVA : liste des taux présents (exemple : 5,5 % ; 20 %)
- Devise
- Remarques : tout élément inhabituel (TVA non applicable, autoliquidation, remise, partie illisible, doute sur une valeur)
  Règles :
- N'invente jamais une valeur. Si une information est absente ou illisible, écris NON TROUVÉ et explique pourquoi dans Remarques.
- Recopie les valeurs telles qu'elles figurent sur le document, sans les recalculer.
- Si la TVA n'est pas applicable (franchise en base, art. 293 B du CGI), indique le même montant en Total HT et en Total TTC, et 0 en Total TVA.
- Montants : virgule comme séparateur décimal, sans symbole € ni espace (exemple : 1569,07).
- Pour un avoir, indique les montants en négatif.
- Si la TVA est autoliquidée, indique 0 en Total TVA et précise-le dans Remarques.
  Format de sortie : présente d'abord le résultat sous forme de tableau, avec exactement ces 13 colonnes dans cet ordre, puis fournis le même contenu sous forme de fichier Excel.

La liste de champs fixes rend le résultat identique d’une facture à l’autre. La règle « N’invente jamais une valeur » est essentielle : sans elle, l’IA tend à combler une information illisible par une valeur plausible. Dans Excel, une colonne de contrôle =ARRONDI(H2+I2-J2;2), qui doit valoir 0, signale ensuite les lignes à relire.

Lors de notre test avec ChatGPT, tous les montants ont été correctement extraits, y compris sur un scan dégradé et une facture manuscrite, et l’IA a indiqué NON TROUVÉ pour un numéro SIRET illisible plutôt que de l’inventer.

Enregistrer la consigne sous forme de compétence (skill)

Une fois le résultat validé, si l’extraction de données de factures est un processus récurrent pour vous, vous pouvez demander à l’agent d’enregistrer cette consigne sous forme de compétence, ou skill. Une simple demande, comme « Traite toutes les factures du dossier », suffit alors à lancer le traitement. La compétence garantit un résultat homogène d’un mois à l’autre, peut être corrigée une fois pour toutes lorsqu’une erreur est repérée, et partagée avec les collègues qui réalisent la même tâche.

La limite de cette approche : la consommation de tokens

Les modèles d’IA facturent leur travail en tokens, des fragments de mots, comptés sur ce qu’on leur envoie et sur ce qu’ils produisent. Lorsqu’un agent traite lui-même les factures, tout passe par un modèle haut de gamme : la lecture des documents, mais aussi l’écriture du code qui crée le fichier Excel, les vérifications et l’historique de la conversation, renvoyé à chaque échange. Or une grande partie de ce travail est mécanique et peut être confiée gratuitement à un script. L’écart compte peu pour quelques factures, mais devient sensible lorsque le traitement se répète chaque mois.

Seconde approche : un script Python fait le travail mécanique, l’IA lit les factures

Dans cette approche, l’agent écrit et lance un script, qui choisit pour chaque document la méthode de lecture la plus simple.

  1. Facture Factur-X : le script lit directement les données structurées, sans IA.
  2. PDF contenant du texte : le script extrait ce texte et l’envoie à un modèle d’IA.
  3. Scan ou photo : le script envoie l’image à un modèle d’IA capable de lire les images. Le script range ensuite chaque réponse dans le fichier Excel. Il appelle le modèle d’IA par son API, l’interface qui permet à un programme de dialoguer directement avec lui.

Les étapes

  1. Créer une clé API sur la console développeur d’un fournisseur. Attention : l’abonnement à un assistant et l’accès à l’API sont deux comptes distincts. Nous avons utilisé l’offre gratuite de la console Mistral, qui donne accès à des modèles légers comme Ministral 14B, suffisant pour ce test.
  2. Enregistrer la clé dans le Bloc-notes, sous la forme MISTRAL_API_KEY=votre_clé, dans un fichier nommé cle-api.env (type « Tous les fichiers »).
  3. Préparer le dossier : un sous-dossier factures et le fichier cle-api.env, auquel vous donnez accès à l’agent.
  4. Demander à l’agent d’écrire et de lancer le script, avec la demande ci-dessous, en remplaçant [fournisseur choisi] par le nom de votre fournisseur.
Écris un script Python qui extrait les données de factures fournisseurs vers un fichier Excel, puis lance-le sur le dossier « factures ».
Fonctionnement attendu, pour chaque fichier du dossier (PDF, JPG, PNG) :
1. Si le PDF est une facture Factur-X, lis directement les données du fichier XML intégré, sans faire appel à l'IA.
2. Sinon, si le PDF contient du texte, extrais ce texte avec Python et envoie-le à un modèle d'IA par son API.
3. Sinon (PDF scanné, photo), convertis le document en image et envoie l'image à un modèle d'IA capable de lire les images.
Appel à l'IA :
- Utilise l'API de [fournisseur choisi], avec un modèle capable de lire les images. La clé API est dans le fichier « cle-api.env » : ne l'écris jamais dans le script et ne l'affiche pas.
- Envoie au modèle la consigne d'extraction suivante, et demande une réponse au format JSON avec exactement ces champs :
  - type, fournisseur, siret (14 chiffres), numero_facture, date_facture et date_echeance (JJ/MM/AAAA), total_ht, total_tva, total_ttc (nombres), taux_tva, devise, remarques
  Règles : n'invente jamais une valeur (laisse le champ vide et explique pourquoi dans remarques) ; recopie les valeurs sans les recalculer ; montants négatifs pour un avoir ; en franchise de TVA (art. 293 B du CGI), même montant en HT et TTC et 0 en TVA ; en autoliquidation, 0 en TVA avec une remarque.
- En cas de refus pour limite de débit, patiente puis réessaie.
Fichier Excel produit (un nouveau fichier, ne modifie pas les factures) :
- une ligne par document, avec les champs extraits ;
- une colonne « Méthode » (Factur-X, texte + IA, image + IA) ;
- deux colonnes avec les tokens d'entrée et de sortie de chaque appel ;
- une colonne de contrôle : Total HT + Total TVA − Total TTC, qui doit valoir 0 ;
- les dates au format date, les montants au format nombre, le SIRET au format texte.
Teste d'abord le script sur deux ou trois factures et montre-moi le résultat avant de traiter tout le dossier. À la fin, donne-moi le total des tokens consommés et la liste des lignes à vérifier.
  1. Faire expliquer le script avant de le lancer, par prudence : « Explique-moi ce que fait ce script. Vérifie qu’il n’envoie les factures qu’à l’API prévue, qu’il ne modifie aucun fichier et que la clé API n’apparaît pas dans le code. »

Les résultats de notre test

Sur les treize factures, tous les montants ont été correctement extraits par Ministral 14B, y compris sur le scan dégradé, la photo et la facture manuscrite. Une erreur est toutefois passée inaperçue : un numéro SIRET retranscrit avec treize chiffres au lieu de quatorze, sans que le modèle signale de doute. La relecture humaine reste donc nécessaire. Le traitement a consommé environ 22 000 tokens, soit 1 100 par facture en PDF et 2 700 pour une image, pour un coût nul avec l’offre gratuite.

Quelle confidentialité pour les données des factures ?

Les deux approches transmettent les factures à un modèle d’IA en ligne. Pour les factures courantes d’une TPE, une offre professionnelle, qui exclut en principe l’utilisation des données pour l’entraînement des modèles, offre un niveau de sécurité comparable aux autres services cloud déjà utilisés (comptabilité, stockage de fichiers). Vérifiez toutefois ce réglage dans les paramètres de l’outil, en particulier avec les offres individuelles et les offres gratuites d’API, qui ne conviennent qu’à des factures fictives. Mistral, entreprise française qui met en avant un hébergement des données en Europe, constitue une alternative à considérer.

Lorsque les factures contiennent des données sensibles, ou que des engagements contractuels de confidentialité interdisent l’envoi à un tiers, la solution locale reste la seule qui garantisse que rien ne quitte la machine : le même script peut fonctionner avec un modèle installé sur l’ordinateur, par exemple avec Ollama, à condition de le lancer soi-même. Nous détaillons ces options dans notre guide sur l’auto-hébergement de l’IA générative.

Que retenir de cette méthode ?

Les deux approches reposent sur le même savoir-faire : une consigne précise et des contrôles systématiques. La première se met en place en quelques minutes ; la seconde demande un peu de préparation, mais devient plus économique lorsque le traitement se répète. La méthode dépasse d’ailleurs les factures : devis, bons de commande ou contrats se prêtent au même travail, et illustrent les nombreux usages concrets des agents IA en entreprise.