Trouver le SIREN/SIRET de l'entreprise via le NOM, le CP et la commune.

Bonsoir à tous,

Je m’arrache actuellement les cheveux car toutes mes techniques ne fonctionnent pas et pourtant ça parait si simple.

Contexte :

J’ai scrappé un grand nombre (+2000) d’entreprise. J’ai l’adresse, le nom, le code postal. Je souhaite rajouté à toutes ces entreprises le SIRET ou SIREN.

J’ai essayé 2 solutions : les Google Script et la formule en deux étapes directement dans le Sheet.

Voici le code que j’ai utilisé :

function GetSirenNumber2(CompanyName) {
  // Add credentials
  var params = {
    "method": "GET",
    "headers": {
      "Authorization": "Basic API_KEY"
    },
    "muteHttpExceptions": true
  };

  // Send request
  var response = UrlFetchApp.fetch("api.insee.fr/entreprises/sirene/V3/siren?q=periode(denominationUniteLegale:" + CompanyName + ")", params); 
  
  // Parse response
  var xml = XmlService.parse(response.getContentText());
  var siren = xml.getRootElement().getChild("siren").getText();
  return siren;
}

J’ai utilisé le XML car le JSON ne fonctionne pas et ça me donnait une erreur.

Pour les formules G-Sheet, j’ai utilisé ça :

=CONCATENATE("api.insee.fr/entreprises/sirene/V3/siren?q=periode(denominationUniteLegale:",B2,")")

Puis

=ImportJSON(A7,"unitesLegales/siren","credential=API_KEY&apiKey=API_KEY")

J’ai remplacé mon crédential par « API_KEY » pour vous fournir les codes.

Je sais que beaucoup d’entre vous sont expérimentés et c’est pourquoi je vous demande de l’aide sur ce sujet.

PS :

La requête fonctionne bien car quand je sélectionne une entreprise au hasard, j’ai une réponse dans PostMan.

"api.insee.fr/entreprises/sirene/V3/siren?q=periode(denominationUniteLegale:"HUILERIE DE LAPALISSE")"

Et j’ai bien cette réponse avec la donnée que je souhaite (le siren) :

{
    "header": {
        "statut": 200,
        "message": "OK",
        "total": 1,
        "debut": 0,
        "nombre": 1
    },
    "unitesLegales": [
        {
            "siren": "314539792",
            "statutDiffusionUniteLegale": "O",
            "dateCreationUniteLegale": "1978-01-01",
            "sigleUniteLegale": null,
            "sexeUniteLegale": null,
            "prenom1UniteLegale": null,
            "prenom2UniteLegale": null,
            "prenom3UniteLegale": null,
            "prenom4UniteLegale": null,
            "prenomUsuelUniteLegale": null,
            "pseudonymeUniteLegale": null,
            "identifiantAssociationUniteLegale": null,
            "trancheEffectifsUniteLegale": "12",
            "anneeEffectifsUniteLegale": "2020",
            "dateDernierTraitementUniteLegale": "2022-08-29T09:14:36",
            "nombrePeriodesUniteLegale": 8,
            "categorieEntreprise": "PME",
            "anneeCategorieEntreprise": "2020",
            "periodesUniteLegale": [
                {
                    "dateFin": null,
                    "dateDebut": "2020-12-31",
                    "etatAdministratifUniteLegale": "A",
                    "changementEtatAdministratifUniteLegale": false,
                    "nomUniteLegale": null,
                    "changementNomUniteLegale": false,
                    "nomUsageUniteLegale": null,
                    "changementNomUsageUniteLegale": false,
                    "denominationUniteLegale": "HUILERIE DE LAPALISSE",
                    "changementDenominationUniteLegale": false,
                    "denominationUsuelle1UniteLegale": null,
                    "denominationUsuelle2UniteLegale": null,
                    "denominationUsuelle3UniteLegale": null,
                    "changementDenominationUsuelleUniteLegale": false,
                    "categorieJuridiqueUniteLegale": "5710",
                    "changementCategorieJuridiqueUniteLegale": false,
                    "activitePrincipaleUniteLegale": "10.41A",
                    "nomenclatureActivitePrincipaleUniteLegale": "NAFRev2",
                    "changementActivitePrincipaleUniteLegale": true,
                    "nicSiegeUniteLegale": "00015",
                    "changementNicSiegeUniteLegale": false,
                    "economieSocialeSolidaireUniteLegale": null,
                    "changementEconomieSocialeSolidaireUniteLegale": false,
                    "societeMissionUniteLegale": null,
                    "changementSocieteMissionUniteLegale": false,
                    "caractereEmployeurUniteLegale": "O",
                    "changementCaractereEmployeurUniteLegale": false
                },

Hello,

J’ai exactement la même problématique :face_with_monocle:

Des semaines que je cherche une solution ….:sob:

En aucun cas tu cherches la commune ou le CP dans la requête

=periode(denominationUniteLegale Entreprise)

Il faut aller trouver dans la documentation les paramètres et ou tester dans swagger les réponses.

Tu peux toujours demander sur le compte de l’aide au support …

Merci pour ta réponse @Mik !

Effectivement, j’ai oublié de le préciser mais dans un premier temps j’ai enlevé les critères de recherche pour faire fonctionner la requête. J’ai déjà consulté la documentation mais malheureusement je n’y ai pas trouvé de réponse pour mon problème. Le résultat des données en sortie sont en JSON, dans l’exemple que j’ai donné la conversion est en XML, pareil c’était pour tester.

Tu peux t’entraîner sur les fichiers stock etablissement et entités legales de l’insee qui sont mis à jour tous les mois. Les colonnes sont les mêmes.

Les structures des requêtes complexes ressemblent à ça:

curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer TOKENSTR' 'https://api.insee.fr/entreprises/sirene/V3/siret?q=codeCommuneEtablissement%3A92046'

IL n’y a pas de CodePostal pour les unités légales historiques :sweat_smile:

Seulement pour les établissements

Comment appliques-tu cette requête pour qu’elle soit viable dans Google Sheet ?

curl to javascript online (GOOGLE)

1 « J'aime »

Tu peux aller plus loin

curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer TKENSTR' 'https://api.insee.fr/entreprises/sirene/V3/siret?q=codeCommuneEtablissement%3A92046%20AND%20periode(etatAdministratifEtablissement%3AA)'

Merci pour ton aide. Malheureusement, ça ne fonctionne toujours pas dans Google Sheet avec Google Script :confused:

j’ai une solution toute simple aussi pour ceux qui veulent!
→ me contacter en direct

1 « J'aime »

Je crois que ca serait plus sympa de partager votre solution, vous venez là demander de l’aide , des gens essayent d’aider, d’autres on le même problème, et c’est pour pas donner la réponse c’est pas correct

2 « J'aime »

Juste une info sur l’attribution des codes siret/siren. Il faut bien faire la distinction entre le siren et le siret. Si on veut scraper que le siren le code postal peut suffire. Pour le siret c’est plus compliqué. Le CodeCommuneEtablissement est plus précis. En effet plusieurs communes peuvent avoir le même code postal. Et pour les grandes villes, il peut y avoir plusieurs plusieurs etablissements dans le même CodeCommuneEtablissement.

1 « J'aime »

Suffit de faire un appel à société.com ou Siren

Je n’arrive pas à faire appel à l’API societeinfo.com avec un Google Script. Tu aurais une solution ? @Jorgi

C’est dommage de poser la question et pour donner la réponse de devoir vous contacter en MP.
Proposer la réponse est aussi simple que d’écrire la question (ce n’est que mon avis)

Pour la réponse pour la partie fonction (script),
Il y a plusieurs erreurs :

  • l’authorization est Bearer et pas Basic,
  • il faut préciser https dans l’URL, sinon ça passe en http et l’API Insee ne répond pas.
    L’API V3 ne répond qu’avec du JSON ou du CSV, il faut donc lui préciser ce qu’on attend dans le header.
    En changeant le muteHttpExceptions à false, cela permet également d’avoir les codes d’erreurs de l’API pour comprendre la raison du refus.

Le script devient donc (en utilisant du JSON) :

function GetSirenNumber2(CompanyName) {
  // Add credentials
  var params = {
    "method": "GET",
    "headers": {
      "Authorization": "Bearer YOUR_TOKEN_API",
      "Accept": "application/json"
    },
     
    "muteHttpExceptions": true
  };


  // Send request
  var response = UrlFetchApp.fetch("https://api.insee.fr/entreprises/sirene/V3/siren?q=periode(denominationUniteLegale:" + CompanyName + ")", params); 
  // Parse response
  var json = JSON.parse(response.getContentText());
  if(json.header.total >= 1){
    siren = json.unitesLegales[0].siren;
  }
  else{
    siren = -1; // pas de résultats
  }
  return siren;
}

Attention : ça ne prend que le premier SIREN renvoyé et ça renvoie -1 s’il n’y avait pas de résultats.

1 « J'aime »

La frustration arrive assez rapidement chez certains ahah !

Voici le script que j’ai utilisé et que j’ai déjà partagé aux nécessiteux.

function GetSirenNumber(CompanyName) {
    var CompanyNameEncoded = encodeURIComponent(CompanyName);
    var url = "https://api.insee.fr/entreprises/sirene/V3/siren?q=periode(denominationUniteLegale:" + CompanyNameEncoded + ")";
    var options = {
        headers: {
            'Accept': 'application/json',
            'Authorization': 'Bearer VOTRE CLÉ API'
        }
    };

    var response = UrlFetchApp.fetch(url, options);
    var data = JSON.parse(response.getContentText());

    Utilities.sleep(2000); // délai de 2 secondes entre chaque appel pour respecter la limite de 30 appels par minute

    if (data.unitesLegales.length === 0) {
        return;
    }
    return data.unitesLegales[0].siren;
}

Bon courage à tous,

1 « J'aime »

Ce sujet a été automatiquement fermé après 365 jours. Aucune réponse n’est permise dorénavant.