Construire la liste d’entreprises
Extraction, requêtes et volumes.

Lancez plusieurs requêtes étroites, chacune liée à un segment et à une source, et chargez le tout dans une seule table brute qui se souvient de l’origine de chaque ligne. Un énorme export se diagnostique mal, alors que dix requêtes consignées montrent exactement laquelle a ramené du déchet.
À ce stade, vous collectez et vous résistez à l’envie de nettoyer. Déduplication et normalisation viennent au chapitre suivant, et elles auront besoin de la provenance que vous allez enregistrer. Le livrable est une table brute d’entreprises et un journal des requêtes. En entrée : votre grille de critères et votre registre des sources. Notre éditeur de paie pour employeurs français multi-sites reste fictif, tout comme ses chiffres.
Écrivez le plan de requêtes avant toute extraction
Une ligne par requête. Le volume attendu est votre estimation, notée à l’avance pour qu’un résultat surprenant se remarque.
| ID | Segment | Source | Requête | Lignes attendues | Limite de la source | Découpage |
|---|---|---|---|---|---|---|
| Q1 | Groupes de crèches | SIRENE | 88.91A, actives, 20 à 499, 3 sites et plus |
400 | Aucune | Aucun |
| Q2 | Groupes d’Ehpad | SIRENE | 87.10A, actives, 20 à 499, 3 sites et plus |
350 | Aucune | Aucun |
| Q3 | Groupes de crèches | Sales Navigator | Mot-clé « crèche », France, 11 à 500 | 600 | Résultats plafonnés par recherche | Par région |
| Q4 | Sites de crèches | Cartes | « crèche » + ville, 30 plus grandes villes | 1 200 | 200 par recherche avec l’outil ci-dessous | Par ville |
| Q5 | Entreprises similaires | Similarité | 30 meilleurs clients en entrée | 300 | Selon l’entreprise de départ | Par client |
Les interfaces de recherche plafonnent ce qu’elles renvoient, et ce plafond évolue : vérifiez le plafond actuel de chaque source. Quand une requête l’atteint, vous n’avez vu qu’un échantillon tronqué, sans le moindre avertissement. Découpez-la par région, tranche d’effectif ou secteur jusqu’à ce que chaque tranche reste nettement sous la limite.
Le registre sert de contrôle pour les autres sources. Si une recherche par mot-clé renvoie plusieurs fois plus d’entreprises que le registre n’en compte pour cette activité, le mot-clé attrape des entreprises qui ne font que mentionner le sujet.
Préparez la table brute
Gardez toutes les sources dans une seule table avec les mêmes colonnes. Laissez vide ce qu’une source ne fournit pas et conservez les valeurs d’origine intactes.
| Colonne | Exemple | Utilité |
|---|---|---|
raw_id |
Généré | Identité de la ligne |
query_id |
Q3 | Lien avec le journal des requêtes |
run_order |
3 | Mesurer l’apport de chaque requête |
source |
sales_navigator | Provenance |
extracted_at |
2026-11-09 | Fraîcheur, maintenance future |
name_raw |
Les P’tits Loups SAS | Tel que livré |
siren |
9 chiffres, ou vide | Clé forte pour la France |
domain_raw |
www.example.fr | Future clé, nettoyée au chapitre suivant |
linkedin_url |
URL de la page entreprise | Clé pour les sources LinkedIn |
city, postcode, country |
Lyon, 69003, FR | Géographie |
naf_code |
88.91A | Filtre |
headcount_raw |
Code de tranche ou fourchette | Filtre, formats variables selon la source |
open_sites |
6 | Filtre |
source_payload |
JSON de la ligne d’origine | Retrouver ce que vous n’avez pas mappé |
Extrayez depuis le registre
Q1 et Q2 tournent sur les deux fichiers SIRENE, chargés dans une base de données ou un moteur analytique local. Le fichier des unités légales porte l’activité et l’effectif. Le fichier des établissements permet de compter les sites ouverts.
WITH sites AS (
SELECT siren, COUNT(*) AS open_sites
FROM etablissement
WHERE etatAdministratifEtablissement = 'A'
GROUP BY siren
)
SELECT
'Q1' AS query_id,
'sirene' AS source,
CURRENT_DATE AS extracted_at,
u.siren,
u.denominationUniteLegale AS name_raw,
u.activitePrincipaleUniteLegale AS naf_code,
u.trancheEffectifsUniteLegale AS headcount_raw,
u.statutDiffusionUniteLegale AS diffusion_status,
s.open_sites
FROM unite_legale u
JOIN sites s ON s.siren = u.siren
WHERE u.etatAdministratifUniteLegale = 'A'
AND u.activitePrincipaleUniteLegale = '88.91A'
AND s.open_sites >= 3
AND (u.trancheEffectifsUniteLegale IN ('12','21','22','31','32')
OR u.trancheEffectifsUniteLegale IS NULL
OR u.trancheEffectifsUniteLegale = 'NN');
Les comptes à tranche inconnue restent dans la liste, signalés pour relecture : les retirer reviendrait à exclure des entreprises à cause d’un trou dans la donnée. Vérifiez les noms de colonnes dans la documentation du fichier en cours, car ils peuvent changer d’une version à l’autre.
Les mêmes requêtes dans Derrick
Derrick, que j’ai cofondé, gardez-le en tête, lance ces requêtes depuis une feuille ou son application web et écrit chaque résultat en lignes, ce qui convient aux équipes sans base de données.
| Requête | Fonctionnalité | Ce que vous fournissez | Ce que vous obtenez |
|---|---|---|---|
| Q1, Q2 | Import Companies by NAF Code | 88.91A dans une colonne, département en option |
Une entreprise par ligne dans un nouvel onglet, avec SIREN/SIRET, établissements ouverts, tranche d’effectif |
| Q3 | Import LinkedIn Companies | L’URL de la recherche Sales Navigator | Données de l’entreprise, une ligne par entreprise |
| Q4 | Google Maps Scraper | « crèche Lyon » | Jusqu’à 200 lieux : nom, téléphone, site, adresse |
| Q5 | Find Similar Companies | L’URL LinkedIn d’un client, pays en option | Entreprises similaires avec secteur, pays, site et score de similarité |
Les crédits suivent les lignes : 1 par entreprise sur les imports NAF et Sales Navigator, 1 par lieu sur les cartes, 1 par entreprise trouvée sur la similarité. L’import NAF renvoie toutes les entreprises du code, et vous appliquez ensuite les filtres de 20 à 499 salariés et de 3 sites dans la feuille : vous payez donc toute la population de ce code. Pour un code volumineux, lancez d’abord un département et regardez le résultat. Import Companies from a Prompt est pratique pour explorer un segment en une phrase, mais traitez-le comme de la découverte, jamais comme la preuve que vous avez vu tout le marché.
Sans Derrick, Q1 et Q2 tournent sur le fichier libre comme ci-dessus, Q3 peut passer par l’export de votre outil de recherche si votre abonnement et ses conditions le permettent, et les petites listes se copient à la main. Gardez la même table brute quelle que soit la voie.
Mesurez ce que chaque requête a ajouté
Avant la déduplication, une clé grossière suffit pour voir si une requête a apporté du neuf. Lancez les requêtes dans l’ordre prévu.
WITH keyed AS (
SELECT *, COALESCE(siren, lower(domain_raw), linkedin_url) AS account_key
FROM raw_companies
),
first_seen AS (
SELECT account_key, MIN(run_order) AS first_run
FROM keyed
GROUP BY account_key
)
SELECT
k.query_id,
COUNT(DISTINCT k.account_key) AS accounts,
COUNT(DISTINCT CASE WHEN f.first_run = k.run_order THEN k.account_key END) AS new_accounts
FROM keyed k
JOIN first_seen f USING (account_key)
GROUP BY k.query_id, k.run_order
ORDER BY k.run_order;
La clé sous-estimera les recoupements entre une ligne du registre sans domaine et une ligne LinkedIn sans SIREN, ce qui suffit ici. Vérifiez ensuite la précision : tirez 50 lignes au hasard par requête et marquez chacune comme vraie cible ou non.
=SORTN(A2:F1500, 50, 0, RANDARRAY(1499), TRUE)
| Requête | Lignes | Nouveaux comptes | Part de neuf | Précision sur 50 lignes | Décision |
|---|---|---|---|---|---|
| Q1 | 412 | 412 | 100 % | 96 % | À garder |
| Q2 | 368 | 368 | 100 % | 92 % | À garder |
| Q3 | 580 | 190 | 33 % | 62 % | À garder, resserrer le mot-clé |
| Q4 | 1 100 | 140 | 13 % | 74 % | Garder seulement les nouveaux |
| Q5 | 240 | 12 | 5 % | 58 % | À arrêter |
Une règle d’arrêt raisonnable : quand une nouvelle requête ajoute moins de 10 % de comptes nouveaux et que sa précision baisse, vous avez atteint ce que vos sources peuvent voir. Q5 en est là. Les 190 comptes de Q3 méritent une lecture : il peut s’agir de groupes que le registre a classés sous un code que vous avez exclu, ce qui vous renverrait à la grille de critères.
Gardez le journal des requêtes avec la donnée
| Requête | Lancée le | Par | Paramètres exacts ou URL | Lignes | Plafond atteint | Crédits ou coût | Notes |
|---|---|---|---|---|---|---|---|
| Q3 | 2026-11-09 | Growth | URL Sales Navigator | 580 | Non | 580 | Découpée en 13 régions |
Vous relancerez ces requêtes lors de l’actualisation du TAM : ce qui n’est pas écrit ici sera reconstitué de mémoire.
Votre prochaine étape : écrivez votre plan de requêtes, lancez d’abord les requêtes d’ancrage et mesurez ce que chaque requête suivante ajoute jusqu’à votre règle d’arrêt. Portez ensuite la table brute à la déduplication, avant de dépenser quoi que ce soit en enrichissement.