n8n + Stripe : automatiser la facturation en 5 étapes
Tutoriel n8n + Stripe complet : webhook paiement, génération de PDF, envoi email automatique et archivage. Code, captures et pièges à éviter.
Etienne Aubry
Développeur & Expert Automatisation IA
Si tu vends en ligne via Stripe et que tu envoies encore tes factures à la main, tu perds entre 4 et 8 minutes par paiement. Sur 50 ventes par mois, c’est 6 heures cramées à copier-coller des numéros de facture, à PDFer un template Word et à expédier des emails un par un. Multiplie par douze mois : 72 heures par an. À 80 euros HT de l’heure, ça fait 5 760 euros qui partent en fumée pour une tâche zéro valeur ajoutée.
Je vais te montrer comment je facture mes clients en mode 100 % automatique grâce à n8n et Stripe. Le workflow tient en cinq étapes, prend deux heures à mettre en place et tourne ensuite tout seul pendant des années. Je l’ai déployé chez quatorze clients en 2025, du e-commerce au SaaS, et personne n’a jamais eu à intervenir manuellement.
Pourquoi automatiser la facturation Stripe avec n8n
Stripe propose son propre système de factures automatiques via Stripe Invoicing. Sauf que ce module est limité : il génère des PDF moches sans personnalisation poussée, ne supporte pas les mentions légales françaises spécifiques (TVA intracommunautaire, autoliquidation, numérotation séquentielle stricte par exercice), et coûte 0,4 % supplémentaire sur chaque paiement. À volume élevé, ça pique.
n8n te permet de garder Stripe pour ce qu’il fait de mieux (encaisser les paiements en toute sécurité) et de reprendre la main sur tout l’aval : génération du PDF, conformité comptable, envoi multi-canal, archivage Drive ou Dropbox, et même synchro avec ton logiciel de compta favori. Tu peux brancher Pennylane, QuickBooks, Tiime, Indy ou un Google Sheet maison, tout passe.
Autre avantage souvent oublié : la souveraineté de la donnée. Tes factures sont stockées sur ton infra ou ton cloud personnel, pas chez Stripe. Si demain tu changes de PSP pour Mollie ou Lemon Squeezy, tu n’as pas à demander un export et tu ne perds rien. C’est exactement le genre de raison qui m’a poussé à self-héberger n8n sur un VPS plutôt que de tout laisser sur le cloud officiel.
Le ROI réel d’une automatisation de facturation
Faisons le calcul froidement sur un compte type. Une boutique Shopify qui fait 200 ventes par mois passe en moyenne 12 heures à émettre, envoyer et archiver les factures. Avec n8n, ce chiffre tombe à zéro, sauf incident exceptionnel. Économie directe : 12 heures à 50 euros HT pour un assistant ou 80 euros HT pour un comptable, soit entre 600 et 960 euros par mois. Le workflow se rembourse en moins de deux semaines.
Et je ne compte pas les bénéfices indirects : zéro retard d’envoi, zéro numéro doublé, traçabilité parfaite pour l’URSSAF, conformité TVA garantie. Le jour où tu as un contrôle fiscal, tu sors un export propre en trente secondes.
Étape 1 : recevoir le webhook Stripe dans n8n
Le point de départ de tout le workflow, c’est l’événement checkout.session.completed de Stripe. C’est lui qui te confirme qu’un paiement a réussi et te donne accès à toutes les métadonnées nécessaires : montant, devise, email client, ligne d’articles, taxes.
Dans n8n, crée un nouveau workflow et ajoute un node Webhook en mode POST. Tu obtiens une URL du type https://ton-n8n.fr/webhook/stripe-paiement. Copie-la, on en a besoin tout de suite.
Direction le dashboard Stripe, section Développeurs puis Webhooks. Tu cliques sur “Ajouter un endpoint”, tu colles ton URL n8n, et tu sélectionnes l’événement checkout.session.completed. Stripe te donne alors une clé de signature webhook (commençant par whsec_), qu’il faut absolument stocker pour valider l’authenticité des appels entrants.
Sécuriser le webhook avec la signature
Un webhook public exposé sans vérification, c’est une porte ouverte. N’importe qui peut envoyer une fausse requête à ton endpoint et déclencher l’envoi d’une fausse facture. Pour éviter ça, on ajoute un node Function juste après le webhook avec ce contrôle :
const stripeSignature = $input.first().headers['stripe-signature'];
const secret = 'whsec_xxx';
const payload = $input.first().body;
// vérifier HMAC SHA256 ici puis throw si mismatch
return $input.all();
n8n a aussi un node Stripe natif depuis la version 1.30 qui gère la signature automatiquement. Si tu débutes, prends-le, ça t’évite d’écrire le HMAC à la main. Mais si tu veux maîtriser ce qui se passe, le node Function reste plus transparent.
Étape 2 : extraire les données et numéroter la facture
Un fois le webhook validé, on récupère les infos utiles. Stripe envoie un objet JSON costaud, on n’a besoin que d’une poignée de champs : customer_email, customer_details.name, customer_details.address, amount_total, currency, line_items (qu’il faut charger via un appel API supplémentaire), et l’id de la session pour la traçabilité.
J’utilise un node Set pour normaliser tout ça en variables propres : clientNom, clientEmail, montantHT, montantTVA, montantTTC, articles. Ça rend la suite du workflow beaucoup plus lisible quand tu y reviens dans six mois.
Numérotation séquentielle stricte
Le piège classique : générer un numéro aléatoire ou un timestamp en pensant que ça suffit. L’administration fiscale française exige une numérotation continue, séquentielle, sans trou. Si tu fais F2026-001, F2026-002, F2026-003, tu ne peux pas sauter à F2026-005. Un trou et le contrôleur peut considérer que tu as détruit une facture.
Solution propre : un compteur stocké dans une base externe. Personnellement j’utilise un node Google Sheets qui lit la dernière ligne de l’onglet “Compteur”, incrémente de 1 et réécrit. Si tu préfères, Airtable fait pareil avec un champ auto-increment. Pour synchroniser une base Airtable en temps réel, j’ai dédié un article complet.
Tu peux aussi utiliser Redis si ton infra est plus musclée, avec un INCR atomique qui garantit zéro doublon même en cas d’appels concurrents.
Étape 3 : générer le PDF de la facture
C’est l’étape qui fait peur à beaucoup de gens, et pourtant c’est la plus simple. On a trois grandes familles d’options.
Option A — Carbone.io : un service français de génération de documents à partir d’un template Word ou ODT. Tu uploades un template avec des balises {d.clientNom}, tu envoies tes données en JSON, tu récupères un PDF. Coût : 49 euros par mois pour 10 000 documents. Super pour la qualité de rendu mais payant.
Option B — Gotenberg self-hosted : une API Docker open-source qui transforme du HTML en PDF avec un rendu parfait (Chromium headless dessous). Tu héberges sur le même VPS que n8n, coût zéro, illimité. C’est ma solution préférée pour les volumes importants.
Option C — node HTML to PDF : il y a plusieurs packages communautaires sur n8n qui le font directement avec Puppeteer. Pratique pour démarrer, mais consomme pas mal de RAM, donc à éviter si ton VPS a moins de 2 Go.
Template HTML de facture conforme
Pour la France, ta facture doit obligatoirement contenir : numéro unique, date d’émission, identité complète vendeur et acheteur, SIREN/SIRET, numéro TVA intracom si applicable, détail des prestations, prix unitaire HT, taux et montant TVA, total TTC, mentions légales (escompte, pénalités de retard, indemnité forfaitaire 40 euros).
Je te conseille de coder un template HTML propre avec Tailwind CSS inliné, puis de le passer à Gotenberg via un node HTTP Request. Tu obtiens en retour un buffer PDF que tu peux passer à l’étape suivante.
Étape 4 : envoyer la facture par email
Une fois le PDF généré, on l’envoie. Trois choix selon ton volume et tes besoins de délivrabilité.
Pour démarrer, le node Gmail ou Outlook natif de n8n suffit largement. Tu te connectes via OAuth, tu attaches le PDF, tu personnalises le sujet et le corps. Limite : 500 emails par jour sur Gmail gratuit, 10 000 sur Workspace.
Si tu veux un truc plus pro, Resend, SendGrid, Postmark ou Brevo (ex-Sendinblue) sont parfaits. Tu paies au volume, tu as les stats de délivrabilité, et tu peux configurer un domaine d’envoi dédié avec SPF, DKIM et DMARC pour que tes factures n’atterrissent jamais en spam.
Modèle d’email de transmission
L’email doit être court, clair, en français correct. J’utilise ce template :
Bonjour {prenom},
Vous trouverez en pièce jointe la facture {numero} d’un montant de {montantTTC} euros TTC correspondant à votre commande du {date}.
Cordialement, {nomEntreprise}
Pas de smiley, pas de formule alambiquée. Une facture est un document comptable, ton client veut le récupérer rapidement et le classer. Si tu veux pousser plus loin, ajoute un lien vers son espace client ou ton portail de support.
Étape 5 : archiver et synchroniser avec la compta
Dernière étape critique : tu dois conserver tes factures dix ans en France. Surtout, ne stocke pas ça uniquement sur n8n, qui n’est pas un système d’archivage à valeur probante.
Mes deux destinations préférées : Google Drive avec un dossier par mois (/Factures/2026/04/F2026-042.pdf) et une copie sur Dropbox ou OneDrive en miroir pour la redondance. Tu peux aussi pousser sur un bucket S3 avec versioning activé si tu veux du costaud.
Synchro avec le logiciel de comptabilité
Si tu utilises Pennylane, Indy, Tiime ou Sellsy, ils ont tous une API. Un node HTTP Request final dans n8n pousse les métadonnées de la facture (date, montant HT, TVA, TTC, client, lien vers le PDF) dans ton outil de compta. Ton expert-comptable reçoit tout automatiquement, il n’a plus à attendre que tu lui envoies les exports en fin de mois.
Pour centraliser tes leads dans Notion en parallèle, j’ai aussi un workflow dédié. L’idée est la même : laisser n8n faire le job pendant que tu te concentres sur la valeur.
Les pièges à éviter absolument
J’ai eu plusieurs galères en déployant ce workflow chez des clients, voici les principaux écueils.
Le double-déclenchement Stripe : Stripe peut renvoyer le même webhook deux ou trois fois si ton endpoint met plus de 3 secondes à répondre. Solution : enregistrer l’event_id Stripe dans une base et ignorer les doublons.
Le timeout sur la génération PDF : Gotenberg ou Carbone peuvent mettre 4 à 8 secondes sur des factures complexes. Mets ton webhook en mode asynchrone : réponds 200 OK immédiatement à Stripe, puis traite en arrière-plan avec un node Wait ou un trigger interne.
Les paiements en plusieurs devises : si tu vends en USD ou GBP, attention à bien convertir le montant en EUR pour ta compta française, avec le taux du jour BCE. Un node HTTP Request vers api.exchangerate.host règle ça en deux secondes.
Les remboursements : un paiement remboursé doit donner lieu à un avoir, pas à une suppression de facture. Ajoute un deuxième webhook charge.refunded qui génère automatiquement l’avoir et le numérote séquentiellement.
Combien ça coûte vraiment
Récapitulons les frais du workflow complet en mode pro.
n8n self-hosté sur un VPS Hetzner CPX21 : 8,40 euros par mois. Gotenberg sur le même VPS : 0 euro. Domaine pour les emails transactionnels (workflowpro.fr par exemple) : 12 euros par an. Resend : gratuit jusqu’à 3 000 emails par mois, puis 20 dollars pour 50 000.
Total : entre 8 et 25 euros par mois selon le volume, pour facturer un nombre illimité de clients. Comparé aux 0,4 % de Stripe Invoicing qui te coûteraient 40 euros sur 10 000 euros de CA mensuel, ou aux 30 euros par mois d’un logiciel comme Sellsy basique, l’économie est nette.
Si tu n’as pas envie de tout monter toi-même, je propose un workflow avancé clé en main qui inclut la facturation Stripe complète, l’envoi multi-canal et la synchro compta. Compte deux jours de prestation pour avoir le système opérationnel.
Conclusion
Automatiser sa facturation Stripe avec n8n, c’est l’un des workflows au meilleur ROI que je connaisse. Deux heures de mise en place, 10 euros par mois de coût récurrent, et tu récupères entre 6 et 15 heures par mois selon ton volume de ventes. À ce niveau-là, c’est plus une option, c’est une obligation entrepreneuriale.
Le workflow que je viens de décrire est volontairement simple. Tu peux le pousser bien plus loin : relances automatiques pour les factures impayées, calcul des escomptes en cas de paiement anticipé, génération de rapports mensuels TVA, intégration avec ton CRM, multi-entités si tu factures via plusieurs sociétés.
Si tu veux discuter de ton cas particulier, ou que tu hésites entre faire toi-même ou déléguer, réserve un audit gratuit sur mon site. Je regarde ton stack actuel, tes volumes et tes contraintes, et je te dis honnêtement si l’automatisation vaut le coup chez toi ou pas. Pas de baratin commercial, juste un diagnostic technique.
À lire ensuite
n8n + Airtable : synchroniser une base en temps réel
Comment synchroniser Airtable avec n8n en temps réel : webhooks, polling, gestion des conflits. Guide pratique avec captures et code.
n8n credentials : gérer les secrets et tokens en sécurité
Guide complet pour gérer les credentials n8n : chiffrement, rotation, variables d'environnement, External Secrets, audit. Tout ce qu'il faut savoir pour ne pas leaker tes tokens.
n8n + Notion : centraliser ses leads automatiquement
Workflow n8n pour pousser tous tes leads (LinkedIn, Calendly, site web, salon) dans une seule base Notion. Captures, code et bonnes pratiques.
Décrivez votre besoin en 2 min, je vous réponds sous 4 h
Audit gratuit · Pas de relance commerciale · Vous repartez avec un plan d'action utilisable.