flowspag / tutoriels / siren-clients-facture-electronique-make
№ 011 14 min · intermédiaire

Facture électronique : récupérer le SIREN de tous tes clients avec Make

Le SIREN du client devient une mention obligatoire et l'adresse de ta facture électronique. Un scénario Make le complète pour toute ta liste de clients dans Google Sheets, via l'API publique gratuite, sans jamais deviner. Testé sur 9 entreprises réelles.

makegoogle-sheets

TL;DR

  • Avec la facture électronique, le SIREN de ton client devient une mention obligatoire et sert d’adresse à la facture.
  • Un scénario Make lit ta liste de clients dans Google Sheets, interroge l’API publique de l’État (gratuite, sans clé) et remplit SIREN, SIRET du siège, nom légal et adresse.
  • Il ne devine jamais : quand plusieurs entreprises correspondent, il te liste les candidats. Les entreprises fermées sont signalées.
  • Testé pour de vrai sur 9 entreprises : 20 crédits Make, 6,9 secondes. Ensuite, 2 crédits par passage quand il n’y a rien à faire.

Ta liste de clients ressemble probablement à ça : un nom tel que tu l’écris (« Decathlon », « OVHcloud »), une adresse, un email. Pas de SIREN. Jusqu’ici, ça ne gênait personne : la facture partait en PDF, le client la recevait.

Avec la facture électronique, c’est le SIREN qui fait le travail. Ta plateforme cherche ton client dans l’annuaire national à partir de son numéro, puis lui transmet la facture. Un SIREN manquant, et la facture ne part pas. Un SIREN faux, et elle part chez quelqu’un d’autre.

Dans ce tuto, on construit un scénario Make qui complète le SIREN de tous tes clients d’un coup, et qui revérifie chaque nouveau client que tu ajoutes. Je l’ai testé sur 9 vraies entreprises choisies pour piéger la recherche. Tous les chiffres de l’article viennent de ces exécutions.


Pourquoi le SIREN de tes clients devient critique

Depuis le 1er septembre 2026, toutes les entreprises doivent pouvoir recevoir des factures électroniques. Le 1er septembre 2027, les micro-entreprises, TPE et PME devront aussi les émettre à leurs clients professionnels. Le calendrier complet, les obligations selon ta situation et les sources officielles sont sur la page Facture électronique : ce qui change pour toi.

Le SIREN du client fait partie des quatre nouvelles mentions obligatoires, avec la catégorie d’opération, l’option pour la TVA sur les débits et l’adresse de livraison quand elle diffère. Les sources officielles ne donnent pas toutes la même date pour ces mentions quand on est une petite entreprise : le plus simple est de les avoir prêtes avant ta date d’émission.

Le piège, c’est que le nom ne suffit pas pour trouver le bon SIREN :

Le scénario règle les cas simples tout seul et te montre les autres avec de quoi décider en dix secondes.


Ce qu’on construit

Scénario Make SIREN des clients : paramètres, lecture des clients dans Google Sheets, appel à l'API Recherche d'entreprises, routeur vers quatre mises à jour selon le nombre de résultats

8 modules, aucune IA, une API publique. Pour chaque client sans statut, le scénario interroge l’API puis écrit dans le Sheet l’un de ces statuts :

StatutQuandCe qu’il écrit
OKTu avais saisi un SIREN et l’API le confirmeNom légal, SIRET du siège, adresse
TrouvéUne seule entreprise correspond au nom et au code postalSIREN, nom légal, SIRET, adresse. Relis le nom légal une fois
À choisirPlusieurs entreprises correspondentLes 3 premières avec leur SIREN, rien dans la colonne SIREN
IntrouvableAucun résultatCe qu’il faut vérifier
FerméeL’entreprise est radiéeLa date de fermeture
À corrigerL’API refuse la rechercheSon message d’erreur

Les choix qui comptent :


Ce qu’il te faut

ÉlémentÀ quoi ça sertCoût
Un compte MakeFaire tourner le scénarioPlan gratuit : 1 000 crédits par mois, 2 scénarios actifs
Google SheetsTa liste de clientsGratuit
L’API Recherche d’entreprisesTrouver les SIRENGratuite, sans compte ni clé

Compte 30 minutes pour tout monter. Pas de connexion à créer pour l’API : c’est un simple appel HTTP.


L’API Recherche d’entreprises en 2 minutes

C’est l’API de l’État qui alimente le site annuaire-entreprises.data.gouv.fr. Elle cherche dans la base Sirene par nom, SIREN, SIRET ou adresse, et renvoie pour chaque entreprise son SIREN, sa dénomination, son état (active ou cessée) et son siège.

Une recherche, c’est une URL :

requete.txt
https://recherche-entreprises.api.gouv.fr/search?q=424761419&per_page=3&minimal=true&include=siege

Ce que l’API a renvoyé pour OVH pendant le test (extrait) :

reponse-ovh.json
{
  "results": [{
    "siren": "424761419",
    "nom_complet": "OVH (OVHCLOUD)",
    "nom_raison_sociale": "OVH",
    "etat_administratif": "A",
    "date_fermeture": null,
    "siege": {
      "siret": "42476141900045",
      "adresse": "2 RUE KELLERMANN 59100 ROUBAIX",
      "code_postal": "59100"
    }
  }],
  "total_results": 1
}

Deux champs font tout le scénario : total_results (combien d’entreprises correspondent) et etat_administratif (A pour active, C pour cessée).

Pour vérifier un client de temps en temps, sans rien monter, la même API est derrière notre outil gratuit de vérification de SIREN, SIRET et TVA. Le scénario sert quand ta liste vit dans un Google Sheet et grandit chaque mois.


Construire le scénario pas à pas

01
L'onglet Clients

Dans ton Google Sheet, crée un onglet Clients avec ces colonnes, de A à I :

colonnes-onglet-clients.txt
client | code_postal | siren | nom_legal | siret_siege | adresse_siege | statut | detail | verifie_le

Remplis les trois premières : le nom du client tel que tu l’écris, le code postal de son adresse de facturation, et son SIREN si tu le connais déjà. Laisse le reste vide, le scénario s’en charge.

Mets la colonne C au format texte (Format › Nombre › Texte brut) : un SIREN est un identifiant, pas un nombre à additionner.

02
Le bloc Paramètres

Dans Make, crée un scénario et ajoute Tools › Set multiple variables, renommé « Paramètres » :

parametres.txt
max_lignes = 50
fuseau     = Europe/Paris

max_lignes plafonne le nombre de clients traités par passage, pour qu’un premier lancement sur 2 000 lignes ne vide pas tes crédits du mois. fuseau sert à dater les vérifications : mets America/Martinique ou Indian/Reunion si tu es en outre-mer.

Pour le premier remplissage, lance le scénario à la main (Run once). Ensuite, planifie-le sur l’horloge du premier module : une fois par semaine suffit, par exemple le lundi à 8 h.

03
Lire les clients à vérifier

Ajoute Google Sheets › Search Rows, renommé « Lire les clients à vérifier ». Choisis ton fichier, l’onglet Clients, coche que la table a des en-têtes, et ajoute deux conditions (reliées par ET) :

filtre-search-rows.txt
client (A)   Exists
statut (G)   Does not exist

Dans Maximum number of returned rows, mappe 1.max_lignes.

C’est ce filtre qui rend le scénario rejouable sans risque : une ligne qui a reçu un statut n’est plus jamais relue. Pour revérifier un client, vide sa cellule statut.

04
Le filtre « Une ligne à traiter ? »

Sur le lien entre Search Rows et le module suivant, clique sur la clé à molette et crée un filtre « Une ligne à traiter ? » avec une seule condition :

filtre-ligne-a-traiter.txt
2.__ROW_NUMBER__   Exists

Ce filtre a l’air inutile. Il ne l’est pas : sans lui, le scénario plante dès qu’il n’y a plus aucun client à vérifier. L’explication est dans les pièges, plus bas.

05
Chercher l'entreprise

Ajoute HTTP › Make a request, renommé « Chercher l’entreprise » :

  • URL : https://recherche-entreprises.api.gouv.fr/search
  • Method : GET
  • Query String, cinq lignes :
query-string.txt
q            {{ifempty(2.`2`; 2.`0`)}}
code_postal  {{2.`1`}}
per_page     3
minimal      true
include      siege
  • Parse response : Yes
  • Evaluate all states as errors (except for 2xx and 3xx) : No

ifempty(2.2; 2.0) envoie le SIREN si tu l’as saisi (colonne C), sinon le nom du client (colonne A). Dans l’éditeur, tu n’as pas à taper 2.`2` : clique sur la colonne dans le panneau de mapping.

Le dernier réglage est important : on veut que les refus de l’API (code 400) arrivent dans le routeur pour être notés dans le Sheet, au lieu d’arrêter le scénario.

06
Le routeur et ses 4 filtres

Ajoute Flow Control › Router, renommé « Combien de résultats ? », avec 4 routes. Le filtre de chaque route :

filtres-des-routes.txt
Une seule entreprise   3.statusCode = 200  ET  3.data.total_results = 1
Plusieurs entreprises  3.statusCode = 200  ET  3.data.total_results > 1
Aucune entreprise      3.statusCode = 200  ET  3.data.total_results = 0
Refusé par l'API       3.statusCode = 400

Utilise les opérateurs numériques (Numeric operators › Equal to, Greater than). Si l’API répond autre chose (indisponible, surchargée), aucune route ne s’applique : la ligne reste sans statut et sera retentée au passage suivant.

07
Remplir la fiche client

Sur la route « Une seule entreprise », ajoute Google Sheets › Update a Row, renommé « Remplir la fiche client ». Même fichier, même onglet, table avec en-têtes, Row number = 2.__ROW_NUMBER__, et Value input option = Raw (le SIRET reste du texte, sans risque de conversion en nombre). Les colonnes :

remplir-la-fiche.txt
siren          {{3.data.results[1].siren}}
nom_legal      {{ifempty(3.data.results[1].nom_raison_sociale; 3.data.results[1].nom_complet)}}
siret_siege    {{3.data.results[1].siege.siret}}
adresse_siege  {{3.data.results[1].siege.adresse}}
statut         {{if(3.data.results[1].etat_administratif = "C"; "Fermée"; if(2.`2`; "OK"; "Trouvé"))}}
detail         {{if(3.data.results[1].etat_administratif = "C"; "Entreprise fermée le " + formatDate(parseDate(3.data.results[1].date_fermeture; "YYYY-MM-DD"); "DD/MM/YYYY") + " : ne plus facturer ce SIREN"; if(2.`2`; "SIREN confirmé dans la base Sirene"; "Un seul résultat : vérifie que le nom légal est bien ton client"))}}
verifie_le     {{formatDate(now; "DD/MM/YYYY HH:mm"; 1.fuseau)}}

Ce qu’il faut comprendre :

  • nom_raison_sociale est la dénomination sociale. Elle est vide pour un entrepreneur individuel : on prend alors nom_complet.
  • Le statut distingue trois cas : entreprise cessée (C), SIREN que tu avais saisi (« OK »), SIREN trouvé par le nom (« Trouvé », à relire une fois).
  • Dans une formule Make, + colle des morceaux de texte entre eux.
08
Les trois autres routes

Même module Update a Row sur chaque route, avec seulement trois colonnes.

« Lister les candidats » (route « Plusieurs entreprises ») :

lister-les-candidats.txt
statut      À choisir
detail      {{3.data.total_results}} résultats. Recopie le bon SIREN en colonne C puis vide le statut : {{3.data.results[1].nom_complet + " (" + 3.data.results[1].siren + ")"}} | {{3.data.results[2].nom_complet + " (" + 3.data.results[2].siren + ")"}}{{if(3.data.results[3].siren; " | " + 3.data.results[3].nom_complet + " (" + 3.data.results[3].siren + ")"; emptystring)}}
verifie_le  {{formatDate(now; "DD/MM/YYYY HH:mm"; 1.fuseau)}}

« Signaler : introuvable » (route « Aucune entreprise ») :

signaler-introuvable.txt
statut      Introuvable
detail      {{if(2.`2`; "Aucune entreprise avec ce SIREN à ce code postal : vérifie les deux"; "Aucun résultat pour ce nom à ce code postal : vérifie l'orthographe ou cherche le nom légal sur annuaire-entreprises.data.gouv.fr")}}
verifie_le  {{formatDate(now; "DD/MM/YYYY HH:mm"; 1.fuseau)}}

« Signaler : à corriger » (route « Refusé par l’API ») :

signaler-a-corriger.txt
statut      À corriger
detail      {{"Refusé par l'API : " + 3.data.erreur}}
verifie_le  {{formatDate(now; "DD/MM/YYYY HH:mm"; 1.fuseau)}}

Quand une ligne est « À choisir », tu recopies le bon SIREN en colonne C et tu vides le statut : au passage suivant, le scénario le confirme et remplit le reste.

Tu préfères importer le scénario plutôt que le recopier ? Il est dans le kit gratuit, avec les autres workflows des tutos.


Le test réel : 9 entreprises

J’ai rempli l’onglet avec 9 entreprises publiques choisies pour tester chaque cas. Ce sont des exemples, pas mes clients.

Onglet Clients avant l'exécution : nom du client, code postal et parfois un SIREN à vérifier, colonnes D à I vides

Client saisiCode postalSIREN saisiLe piègeRésultat
Malt Community75009Aucun, cas simpleTrouvé
Decathlon59650Trois sociétés du groupe à la même adresseÀ choisir
Decatlon59650Faute de frappeIntrouvable
OVHcloud59100424761419Nom commercial différent du nom légalOK, nom légal « OVH »
3M France95000542 078 555SIREN saisi avec des espacesOK
Virgin Stores75008344260286Entreprise radiéeFermée le 20/05/2025
Decathlon France59650500569406Un chiffre faux dans le SIRENIntrouvable
DoctolibPas de code postalÀ choisir (8 résultats)
3MNom de 2 caractères, sans code postalÀ corriger

Le scénario a traité les 9 lignes en 6,9 secondes et 20 crédits :

Exécution réelle du 24/10/2026 : 9 clients lus, 4 fiches remplies, 2 choix à faire, 2 introuvables, 1 refus de l'API, 20 crédits, 6,9 secondes

Le Sheet après l’exécution :

Onglet Clients après l'exécution : SIREN, nom légal, SIRET et adresse remplis pour 4 clients, candidats listés pour Decathlon et Doctolib, Virgin Stores signalée fermée, 3M à corriger

Ensuite, j’ai fait ce que tu feras : recopié 500569405 (DECATHLON FRANCE) dans la ligne Decathlon et vidé son statut. Passage suivant : 4 crédits, 1,3 seconde, la ligne passe en « OK » avec le nom légal DECATHLON FRANCE et le SIRET du siège. Un dernier passage, sans rien à vérifier : 2 crédits, 0,4 seconde, aucune écriture.

ℹ️
Ce que le test apprend sur l'API

« Decatlon » sans code postal renvoie bien DECATHLON FRANCE en premier : la recherche tolère la faute. Avec le code postal 59650, elle ne renvoie plus rien. Et « 3M » est refusé seul (3 caractères minimum), mais accepté avec un code postal : l’API veut au moins un critère solide.


Combien de crédits Make ?

credits-par-passage.txt
2 crédits fixes (Paramètres + lecture du Sheet)
+ 2 crédits par client à vérifier (appel à l'API + mise à jour de la ligne)

Test du 24/10 : 2 + 9 × 2 = 20 crédits

Projection (un calcul, pas une mesure) pour une liste de 200 clients :

credits-projection.txt
Premier remplissage : 4 passages de 50 = 4 × (2 + 50 × 2)  = 408 crédits, une seule fois
Ensuite, 5 nouveaux clients par semaine : 4 × (2 + 5 × 2)  =  48 crédits par mois

Le plan gratuit de Make (1 000 crédits par mois) absorbe le premier remplissage et le suivi. L’API, elle, ne coûte rien.


Les pièges (appris en les faisant)

⚠️
Quand il n'y a plus rien à faire, le scénario plantait

Au deuxième passage, tous les clients avaient un statut. Search Rows n’a trouvé aucune ligne… et a quand même laissé passer un paquet vide. L’API a reçu une recherche sans paramètre et répondu 400, la route « Refusé par l’API » a voulu mettre à jour la ligne undefined, et Make a arrêté l’exécution : « Unable to parse range: ‘Clients’!Aundefined ». Planifié chaque semaine, le scénario aurait échoué à chaque fois, et Make le désactive après 3 erreurs consécutives. Le filtre « Une ligne à traiter ? » (étape 4) règle le problème : le passage à vide coûte 2 crédits et se termine sans erreur.

⚠️
Ne choisis jamais automatiquement le premier résultat

Pour « Decathlon » à Villeneuve-d’Ascq, le premier résultat est DECATHLON (SIREN 306138900), dont l’activité déclarée est la location de biens immobiliers (code NAF 68.20B). Les magasins relèvent de DECATHLON FRANCE (500569405, commerce de détail d’articles de sport, 47.64Z), deuxième de la liste. Une règle « je prends le premier » t’aurait fait envoyer tes factures à la mauvaise société. D’où la route « À choisir ».

⚠️
Une valeur vide forcée casse la recherche

En construisant le scénario, j’ai testé {{emptystring}} pour « ne pas envoyer de code postal » : Make envoie alors code_postal= et l’API répond 400 (« Au moins une valeur du paramètre code_postal est non valide »). Une cellule vide du Sheet, elle, n’est pas envoyée du tout : la ligne Doctolib sans code postal a été cherchée par le nom seul. Garde le mapping simple, {{2.1}}, sans formule autour.

💡
Le code postal, c'est l'adresse de facturation

Mets celui qui figure sur tes factures. Le filtre code_postal porte sur tous les établissements de l’entreprise, pas seulement le siège : un client facturé à son agence de Lyon se cherche avec le code postal lyonnais, et le scénario écrit quand même le SIRET de son siège.


Ce que le scénario ne fait pas


Adapter à ton activité

Revérifier tes clients chaque trimestre. Une entreprise peut fermer entre deux factures. Une fois par trimestre, vide la colonne statut des clients actifs : le scénario les repasse tous (2 crédits par client) et signale ceux qui ont été radiés.

Ta liste est dans un CRM. Remplace Search Rows et les Update a Row par les modules de ton outil (HubSpot, Pipedrive, Notion…). L’appel HTTP et le routeur ne changent pas.

Tu préfères n8n. Le même scénario tient en 4 nœuds : Google Sheets, HTTP Request (avec « Never Error » activé pour récupérer les 400), un Switch sur total_results, et Google Sheets pour écrire. La logique et les pièges sont identiques. La version cloud se teste sur n8n.io.

Avant d’émettre tes factures électroniques, fais le tour de ce qui change de ton côté : calendrier, plateforme agréée, nouvelles mentions. Tout est sur la page Facture électronique, avec un outil pour savoir ce qui te concerne.

Créer ton compte Make gratuitement →


Le SIREN de tes clients, c’est le genre de tâche qu’on repousse parce qu’elle ne rapporte rien aujourd’hui. Le jour où ta première facture électronique est rejetée, elle devient urgente. Lancée maintenant, elle te prend 30 minutes et 20 crédits.

Combien de clients as-tu dans ta liste, et combien ont déjà leur SIREN ?

Dans la même veine

Tutos connexes.

La newsletter

Un workflow utile
à chaque tuto.

Pas de spam. Pas de théorie. Le fichier du workflow, le piège rencontré pendant le test, le chiffre relevé. Un email le mardi, quand un tuto sort.

Le kit gratuit · envoyé à l'inscription
8 workflows Make et n8n
prêts à importer
Désabonnement en 1 clic. Aucune pub. Aucun sponsor.