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 :
- Les groupes. DECATHLON, DECATHLON FRANCE et DECATHLON ENERGIES ont la même adresse à Villeneuve-d’Ascq et trois SIREN différents. Seul ton bon de commande dit laquelle est ton client.
- Le nom commercial. Tu écris « OVHcloud », la dénomination sociale est « OVH ». C’est elle qui doit figurer sur la facture.
- Les fermetures. Un ancien client peut avoir été radié depuis ta dernière facture.
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

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 :
| Statut | Quand | Ce qu’il écrit |
|---|---|---|
| OK | Tu avais saisi un SIREN et l’API le confirme | Nom légal, SIRET du siège, adresse |
| Trouvé | Une seule entreprise correspond au nom et au code postal | SIREN, nom légal, SIRET, adresse. Relis le nom légal une fois |
| À choisir | Plusieurs entreprises correspondent | Les 3 premières avec leur SIREN, rien dans la colonne SIREN |
| Introuvable | Aucun résultat | Ce qu’il faut vérifier |
| Fermée | L’entreprise est radiée | La date de fermeture |
| À corriger | L’API refuse la recherche | Son message d’erreur |
Les choix qui comptent :
- Il ne devine jamais. Dès qu’il y a deux candidats, la colonne SIREN reste vide. Un SIREN faux est pire qu’un SIREN absent : il envoie ta facture chez quelqu’un d’autre.
- Il ne traite qu’une fois chaque ligne. Une ligne avec un statut est ignorée. Pour la revérifier, tu vides son statut.
- Rien n’est bloquant. Une ligne qui pose problème est signalée dans le Sheet, les autres continuent.
Ce qu’il te faut
| Élément | À quoi ça sert | Coût |
|---|---|---|
| Un compte Make | Faire tourner le scénario | Plan gratuit : 1 000 crédits par mois, 2 scénarios actifs |
| Google Sheets | Ta liste de clients | Gratuit |
| L’API Recherche d’entreprises | Trouver les SIREN | Gratuite, 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 :
https://recherche-entreprises.api.gouv.fr/search?q=424761419&per_page=3&minimal=true&include=siege q: ce que tu cherches, un nom ou un SIREN. Les espaces dans un SIREN (« 542 078 555 ») sont acceptés.code_postal: limite la recherche aux entreprises qui ont un établissement à ce code postal. C’est ce qui rend la recherche par nom fiable.per_page=3: trois résultats suffisent pour décider.minimal=true&include=siege: une réponse allégée, avec seulement le siège en plus de l’essentiel.
Ce que l’API a renvoyé pour OVH pendant le test (extrait) :
{
"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
Dans ton Google Sheet, crée un onglet Clients avec ces colonnes, de A à I :
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.
Dans Make, crée un scénario et ajoute Tools › Set multiple variables, renommé « Paramètres » :
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.
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) :
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.
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 :
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.
Ajoute HTTP › Make a request, renommé « Chercher l’entreprise » :
- URL :
https://recherche-entreprises.api.gouv.fr/search - Method : GET
- Query String, cinq lignes :
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.
Ajoute Flow Control › Router, renommé « Combien de résultats ? », avec 4 routes. Le filtre de chaque route :
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.
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 :
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_socialeest la dénomination sociale. Elle est vide pour un entrepreneur individuel : on prend alorsnom_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.
Même module Update a Row sur chaque route, avec seulement trois colonnes.
« Lister les candidats » (route « Plusieurs entreprises ») :
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 ») :
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 ») :
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.

| Client saisi | Code postal | SIREN saisi | Le piège | Résultat |
|---|---|---|---|---|
| Malt Community | 75009 | Aucun, cas simple | Trouvé | |
| Decathlon | 59650 | Trois sociétés du groupe à la même adresse | À choisir | |
| Decatlon | 59650 | Faute de frappe | Introuvable | |
| OVHcloud | 59100 | 424761419 | Nom commercial différent du nom légal | OK, nom légal « OVH » |
| 3M France | 95000 | 542 078 555 | SIREN saisi avec des espaces | OK |
| Virgin Stores | 75008 | 344260286 | Entreprise radiée | Fermée le 20/05/2025 |
| Decathlon France | 59650 | 500569406 | Un chiffre faux dans le SIREN | Introuvable |
| Doctolib | Pas de code postal | À choisir (8 résultats) | ||
| 3M | Nom de 2 caractères, sans code postal | À corriger |
Le scénario a traité les 9 lignes en 6,9 secondes et 20 crédits :

Le Sheet après l’exécution :

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.
« 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 ?
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 :
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)
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.
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 ».
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.
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
- Il ne garantit pas la santé de ton client. « Active » dans la base Sirene veut dire « pas encore radiée ». Une entreprise en liquidation peut rester active des mois.
- Il donne le SIRET du siège, pas celui de l’établissement que tu factures. Pour un client à plusieurs établissements, le SIRET exact est sur son bon de commande.
- Il ne remplit pas l’adresse de facturation électronique. Elle vit dans l’annuaire de la facture électronique, consultable gratuitement en ligne. C’est ta plateforme agréée qui s’en sert, à partir du SIREN. Pour savoir lesquels de tes clients y ont déjà une plateforme, l’annuaire accepte un fichier de SIREN : le mode d’emploi.
- Les données de certains entrepreneurs individuels sont partielles, quand ils ont demandé à ne pas être diffusés.
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 ?