Générer des devis et factures PDF automatiquement avec n8n
Publié le 26 juillet 2026 · 5 min de lecture
Un devis envoyé « à la va-vite » depuis un traitement de texte, une facture reconstituée chaque mois en copiant l'ancienne et en changeant les montants à la main : ce sont des minutes perdues à chaque document, et une source d'erreurs de numérotation ou de calcul qui finit par coûter cher en fin d'exercice. n8n n'a pas de bouton magique « générer un PDF », mais il a tout ce qu'il faut pour construire ce pipeline proprement : un déclencheur, des données dynamiques, un moteur de conversion HTML→PDF et un envoi automatique. Ce guide détaille l'architecture complète, du template au fichier final envoyé au client.
Pourquoi n8n n'a pas de node « HTML to PDF »
C'est le premier réflexe qui échoue : chercher un node natif « PDF » capable de prendre du HTML en entrée. n8n propose bien Extract from File pour lire un PDF existant (utile pour l'extraction de données de factures reçues), mais rien côté génération. La raison est pragmatique : rendre du HTML/CSS en PDF fidèle demande un moteur de rendu (typiquement Chromium headless), bien trop lourd pour être embarqué dans le runtime Node.js de n8n par défaut.
Trois options s'offrent à vous, sans qu'aucune ne soit universellement meilleure :
| Option | Fonctionnement | Avantage | Limite |
|---|---|---|---|
| Gotenberg auto-hébergé | Conteneur Docker open source, API HTTP, converti HTML → PDF via Chromium | Gratuit, illimité, données qui ne quittent jamais votre infra | Un conteneur de plus à maintenir |
| API SaaS (APITemplate.io, PDFShift, DocRaptor) | Appel HTTP Request vers un service tiers | Zéro infrastructure, démarrage en 10 minutes | Quota mensuel, vos données transitent par un tiers |
| Node communautaire (ex. @custom-js/n8n-nodes-pdf-toolkit) | Package npm installable sur une instance self-hosted | Configuration dans l'UI, pas d'appel HTTP à câbler | Réservé au self-hosted, dépendance à un mainteneur tiers |
Pour un praticien déjà en self-hosted (le cas de la majorité des workflows de nos packs FlowKit), Gotenberg s'intègre naturellement : c'est un simple ajout au docker-compose.yml, dans la même logique que la stack Postgres + n8n décrite dans notre guide de sauvegarde self-hosted.
L'architecture du workflow
Le pipeline tient en cinq étapes, quel que soit le moteur de rendu choisi :
- Déclencheur — un Form Trigger pour saisir un devis à la main, un webhook depuis votre CRM, ou une ligne ajoutée dans une Data Table n8n qui liste les prestations du mois.
- Numéro de document — lecture puis incrémentation d'un compteur stocké dans une Data Table (
compteur_factures), avec le workflow réglé en concurrence 1 pour éviter que deux générations simultanées ne récupèrent le même numéro. - Injection des données dans le template — un node Edit Fields (Set) ou un node Code remplace les espaces réservés (
{{client_nom}},{{numero}}, la boucle sur les lignes de prestations) dans une chaîne HTML stockée en variable d'environnement ou lue depuis un fichier statique du dépôt. - Conversion en PDF — un node HTTP Request en
multipart/form-datavers l'endpoint Gotenberg/forms/chromium/convert/html(ou l'équivalent de l'API SaaS choisie), avec la réponse configurée pour récupérer un fichier binaire. - Stockage et envoi — le PDF binaire est déposé sur Google Drive ou dans Supabase Storage pour l'archivage, puis attaché à un email envoyé au client via Gmail ou SMTP.
Le template HTML : la vraie partie qui prend du temps
Le template lui-même est un fichier HTML classique avec CSS inline (les moteurs de rendu PDF gèrent mal le CSS externe ou les polices distantes non embarquées) : en-tête avec logo et coordonnées, tableau des lignes de prestations généré par une boucle Handlebars-like ou par concaténation dans le node Code, pied de page avec mentions légales obligatoires (SIRET, mentions de pénalités de retard, TVA le cas échéant). C'est un travail ponctuel — une fois le template calé pour une facture, le même socle sert au devis avec deux ou trois blocs en moins (pas de date d'échéance de paiement, une mention « devis valable 30 jours »).
Numérotation séquentielle : le piège juridique à ne pas rater
En France, la numérotation des factures doit être continue et chronologique, sans rupture ni doublon. C'est là qu'un workflow mal conçu se fait piéger : deux déclenchements presque simultanés (un client qui soumet deux devis à la suite, un webhook qui se déclenche deux fois) peuvent lire le même compteur avant que l'un des deux ne l'incrémente, générant deux documents avec le même numéro. La parade, déjà documentée dans notre guide sur l'idempotence des webhooks, consiste à forcer l'exécution séquentielle du workflow (réglage de concurrence à 1 dans les paramètres du workflow) plutôt que de faire confiance à la rapidité relative de deux exécutions parallèles.
Cas d'usage : facture générée depuis une commande e-commerce
Un scénario concret, dans le prolongement de notre article sur l'automatisation des commandes e-commerce : dès qu'une commande passe au statut « payée » (webhook Shopify, WooCommerce ou Stripe, comme détaillé dans notre guide sur les webhooks Stripe), le workflow récupère les lignes de commande, génère la facture PDF correspondante avec le numéro suivant du compteur, l'archive dans Google Drive et l'envoie au client — sans intervention manuelle entre le paiement et la réception de la facture.
Une limite à connaître avant de généraliser
Ce pipeline produit un document visuel : un PDF lisible par un humain, mais pas une facture électronique structurée au sens strict. La réforme française de la facturation électronique impose, pour les échanges B2B, des formats structurés (Factur-X, UBL, CII) transmis via une plateforme de dématérialisation partenaire — une brique distincte à ajouter en aval si votre activité est concernée, pas un simple export PDF. Une étude de Tiwari, Marak, Paul et Deshpande (Determinants of electronic invoicing technology adoption, Journal of Innovation & Knowledge, 2023 — voir sur Google Scholar) montre que la complexité perçue et l'avantage relatif perçu sont les deux déterminants les plus significatifs de l'adoption de la facturation électronique par les petites structures : plus le gain de temps est visible et la mise en place simple, plus l'outil s'installe durablement dans les habitudes de facturation. Un pipeline n8n qui part d'un template déjà prêt réduit justement cette friction perçue, même s'il ne couvre que la partie « génération du document », pas la conformité réglementaire complète.
Pour aller plus loin
Générer des devis et factures PDF depuis n8n élimine la ressaisie manuelle et sécurise la numérotation, pour un coût d'infrastructure quasi nul en self-hosted avec Gotenberg. Ce type d'automatisation documentaire complète naturellement les workflows du Pack Conformité & Audit (149 €), qui journalise déjà chaque action dans Supabase — le même socle peut consigner chaque facture générée pour une piste d'audit complète. Et si votre besoin couvre aussi le tri de la boîte mail entrante ou un assistant documentaire RAG, le Bundle FlowKit Complet (269 € au lieu de 347 €) réunit les trois packs sur une base commune.
FAQ
Questions fréquentes
n8n propose-t-il un node natif pour générer un PDF depuis du HTML ?
Non. n8n dispose de nodes pour lire et manipuler des PDF existants (Extract from File), mais aucun node core ne convertit du HTML en PDF. Il faut passer soit par un service externe appelé en HTTP Request (Gotenberg auto-hébergé, ou une API comme APITemplate.io, PDFShift, DocRaptor), soit par un node communautaire dédié comme @custom-js/n8n-nodes-pdf-toolkit.
Le PDF généré est-il une facture électronique conforme à la réglementation française ?
Non, pas tel quel. Un PDF issu d'un template HTML est un document visuel, pas une facture électronique structurée au sens de la réforme (formats Factur-X, UBL ou CII transmis via une plateforme agréée). Ce workflow convient très bien à des devis, factures internes ou factures B2C, mais une facturation électronique B2B conforme nécessite en plus une intégration avec une plateforme de dématérialisation partenaire (PDP).
Comment éviter les trous ou les doublons dans la numérotation des factures ?
En stockant un compteur dans une Data Table n8n ou une table Supabase, incrémenté à chaque génération, et en forçant l'exécution séquentielle du workflow (paramètre de concurrence à 1) pour éviter qu'deux exécutions parallèles lisent le même numéro avant qu'il soit incrémenté. La numérotation séquentielle sans rupture est une obligation légale pour les factures en France, pas un simple détail esthétique.
Cette approche tient-elle la charge pour plusieurs centaines de documents par jour ?
Avec Gotenberg auto-hébergé (basé sur Chromium headless), oui : c'est le même moteur que celui utilisé en interne par de nombreux services de facturation, et il tourne sans limite de quota puisqu'il est sur votre propre infrastructure. Les API SaaS (PDFShift, APITemplate.io) restent plus simples à démarrer mais imposent des quotas mensuels au-delà desquels le coût grimpe vite.
Bundle FlowKit Complet
269 €