[ Construire un fichier de prospection ]
Base de données B2B : comment les comparer sans se faire avoir
Toutes les bases annoncent des millions d'entreprises, et toutes disent vrai. La comparaison ne se joue donc jamais sur le volume affiché : elle se joue sur ce qui reste quand on applique un filtre réel.
Trois familles, trois métiers différents
| Famille | Ce qu'elle fait bien | Sa limite |
|---|---|---|
| Registres et information légale | L'exhaustivité sur les données d'immatriculation, les dirigeants, les comptes | Aucune coordonnée exploitable pour prospecter |
| Bases de contacts internationales | Le décideur nommé, avec son poste, dans les grandes entreprises | Couverture faible sur les PME françaises et les indépendants |
| Bases de données françaises croisées | Le rapprochement entre la société, son lieu, son site et ses gens | Le rapprochement lui-même : il n'est jamais parfait |
Choisir, c'est d'abord savoir dans quelle famille se trouve votre besoin. Une entreprise qui vend aux grands comptes internationaux et une entreprise qui vend aux artisans du bâtiment n'ont pas le même problème, et aucun fournisseur ne résout les deux également bien.
Les cinq critères qui discriminent
- La couverture après filtre. Le seul chiffre qui compte. Demandez le compte sur votre segment, pas sur la base entière.
- Le taux de remplissage du champ décisif. Si votre canal est le téléphone, la question est le nombre de lignes avec un numéro, pas le nombre de lignes.
- La fraîcheur. Date du dernier millésime, fréquence de rafraîchissement, et surtout : les entreprises cessées sont-elles retirées ?
- Le niveau de rattachement. Entreprise ou établissement : la distinction est structurante et détermine ce que vous pourrez livrer à vos commerciaux.
- Le mode de facturation. Au contact, au crédit, à l'abonnement, à l'export. C'est ce qui décide du coût réel d'un test, et donc de votre capacité à essayer avant de vous engager.
Le rapprochement, ce qui coûte cher et ne se voit pas
La matière première est gratuite : les registres sont ouverts. Ce qui a de la valeur, c'est de savoir que la société immatriculée sous tel SIREN, le commerce qui porte telle enseigne sur Google Maps, la page LinkedIn de telle marque et le site tel-domaine.fr désignent la même entreprise.
Ce rapprochement se fait sur des indices (le nom, l'adresse, le domaine, le numéro de téléphone), et aucun n'est fiable à cent pour cent. Deux sociétés homonymes à la même adresse, une enseigne qui ne ressemble pas à la raison sociale, un domaine partagé par un groupe : chaque cas produit des erreurs.
Les questions de conformité à poser
- D'où vient la donnée ? Registres publics, collecte sur des sources accessibles, déclaratif : les régimes juridiques ne sont pas les mêmes.
- Comment l'information est-elle donnée aux personnes ? Une base qui contient des données personnelles doit prévoir comment les personnes en sont informées.
- Comment s'exerce une opposition ? Et sous quel délai la suppression se propage-t-elle jusqu'à vos exports ?
- Où sont hébergées les données ? Et quel contrat de sous-traitance vous est proposé ?
Ces questions ne sont pas de la formalité : c'est vous, en tant qu'expéditeur, qui répondrez d'une plainte. Voir le cadre de la prospection B2B.
Faire passer le test de l'échantillon : compter son propre segment, puis en extraire quelques dizaines de lignes
Le premier des cinq critères, la couverture après filtre, ne se demande pas au commercial : il se lit soi-même, en posant le filtre de son marché et en regardant le compte. Puis on descend d'un cran et on ouvre quelques dizaines de lignes, parce qu'un total ne dit rien du remplissage des colonnes. Compter ne consomme aucun crédit ; l'échantillon, lui, se paie (aux lignes lues en API, sur le quota d'export depuis la plateforme), ce qui rend le test abordable avant tout engagement.
Dans la plateforme, pas à pas
- Ouvrez la recherche et placez-vous sur l'onglet « Entreprises », ou « Personnes » si votre cible est un décideur nommé.
- Dans le panneau de filtres, posez votre segment : « Activité » pour le métier, le bloc « Localisation » pour la ville, le département ou la région, « Employés » pour la taille. La bascule « Entreprises actives uniquement » est posée par défaut, laissez-la.
- Lisez le compteur en haut de la liste, qui affiche « N résultats ». C'est votre couverture après filtre, et l'afficher ne consomme rien. Une précaution : au-delà de 2 000 entreprises, ce nombre n'est plus un décompte mais une somme des trois sources avant déduplication, donc surévaluée, et l'écran ne vous en avertit pas. Sur les entreprises, un second nombre donne les établissements : une enseigne compte pour une entreprise mais pour des dizaines de points de vente.
- Cliquez « Sélectionner la page » pour prendre les lignes affichées, ou « Sélectionner une tranche… » et saisissez « Du résultat n° 1 » à « Au résultat n° 50 ».
- Ouvrez « Exporter CSV ». La fenêtre « Exporter en CSV » demande d'abord le format : « Par entreprise » (1 ligne par entreprise, dédupliqué) ou « Par point de vente » (1 ligne par établissement Google). Prenez « Par entreprise » pour un premier coup d'œil.
- Validez par « Exporter N lignes », ouvrez le fichier et parcourez les colonnes de gauche à droite. Un export d'entreprises en porte 57, un export de personnes 79 : ce qui vous intéresse, c'est lesquelles sont vides sur votre segment.
Le compteur peut bouger d'un filtre à l'autre pour une raison qui n'est pas la couverture, et le mouvement ne va pas dans le sens qu'on attend. Un critère porté par le seul registre (département, code NAF, forme juridique, capital, date de création) écarte bien les fiches Google, qui ne portent aucun de ces champs, mais il n'écarte pas les fiches LinkedIn : celles-ci restent dans le décompte sans être restreintes par le critère. Le total est donc gonflé, pas réduit. Les sources ne commencent à tomber qu'à partir de deux familles de critères mono-source différentes. Pour un compte qui veuille dire quelque chose sur les trois sources, tenez-vous à des critères qu'elles portent toutes, l'activité et la ville par exemple, et comparez ensuite.
Par l'API : POST /companies/find
{
"filters": {
"activity": { "include": ["plomberie_chauffage_clim"] },
"headquarters_city": { "include": ["Lyon"] },
"company_ceased": false
},
"countOnly": true
}`total` est le compte de votre segment, `establishmentsTotal` le nombre de points de vente Google derrière ces entreprises, `leads` reste vide et rien n'est débité. Une précision qui change la lecture : ce total n'est un décompte exact que sous 2 000 entreprises, seuil sous lequel le serveur recompte les sociétés distinctes. Au-dessus, il additionne les trois index avant la déduplication par domaine, surévalue (de 26 à 60 % selon les segments, d'après les mesures inscrites dans le code) et le signale par `totalEstimated: true`. `meta.sources` liste les index réellement interrogés (`LKI`, `Legal`, `GMB`) : c'est là que vous voyez si votre filtre a réduit le périmètre. `meta.noticeCode` apparaît quand la résolution mérite une explication : `sources_split` lorsqu'un filtre ne concerne qu'une source pendant que les autres restent incluses sans être restreintes par lui, `gmb_filter_dropped` lorsqu'un critère propre à Google (note, avis) se retrouve sans source pour le porter et ne filtre donc plus rien.
Pour l'échantillon, rejouez le même corps en remplaçant `"countOnly": true` par `"limit": 50` : vous recevez 50 fiches et vous payez 50 crédits, un par fiche renvoyée, à chaque appel et sans mémoire d'un appel à l'autre. Quelques pièges. `"limit": 1` n'est pas un mode de comptage mais une fiche facturée, et tout appel qui renvoie des fiches voit en plus son `total` plafonné à 100 000, ce dont le `countOnly` est exempt : c'est la raison de fond de compter à part. Au-delà de 1000, le `limit` est ramené à 1000 sans erreur, donc comptez les lignes reçues et non celles demandées ; la suite se lit avec le curseur `pagination.nextToken`, repassé dans `paginationToken`, et cette marche s'arrête à 250 000 lignes servies pour une clé d'API. Enfin une recherche par clé d'API sans filtre effectif est refusée en 400, « At least one filter is required ». Pour le CSV complet, `POST /companies/export` accepte le même objet `filters`, ou une liste d'`ids` relevés sur `/find`, et renvoie le fichier en flux ; il ignore le `limit` du corps, donc resserrez le filtre en amont si vous ne voulez que quelques dizaines de lignes. Il ne se paie pas en crédits mais sur le quota mensuel de lignes du plan : 402 `export_quota_exhausted` une fois épuisé, et les en-têtes `X-Export-Max-Rows` et `X-Export-Capped` vous disent si le fichier a été tronqué. Base `https://api.basile.cc`, clé dans l'en-tête `Authorization`, en clair, sans préfixe `Bearer`.
Le détail des champs, des filtres et des codes de réponse est dans la documentation de l'API.
Avec Claude, en langage courant
Combien y a-t-il de plombiers-chauffagistes en activité à Lyon dans Basile, et sors-moi cinquante fiches pour que je voie ce qu'il y a vraiment dedans.
Claude enchaîne basile_activity_suggest, basile_count, basile_search_companies puis basile_export.
`basile_activity_suggest` traduit « plomberie » en identifiant de concept avant de filtrer, ce qui évite de chercher sur un mot libre. `basile_count` ne débite rien et échappe au plafond de 100 000, mais son total reste une estimation par excès au-delà de 2 000 entreprises (et, côté personnes, dès que LinkedIn et le registre contribuent tous les deux, une même personne pouvant être comptée deux fois). Les outils de recherche coûtent 1 crédit par fiche renvoyée, à chaque appel, sans mémoire d'un appel à l'autre, donc ne demandez que le nombre de fiches réellement utile. Si vous préférez le CSV aux fiches lues à l'écran, `basile_export` le rend directement dans la conversation en dessous de 500 lignes ; au-delà il refuse et vous renvoie vers l'export de la plateforme, sans avoir rien consommé.
Mesurer la couverture réelle d'un segment champ par champ
Un fournisseur se départage moins sur le nombre de lignes que sur le nombre de lignes utilisables : si votre canal est le téléphone, une base à deux millions d'entreprises dont trois pour cent portent un numéro vaut moins qu'une base plus petite mieux remplie. La mesure tient en deux gestes : compter le même segment avec puis sans chaque exigence, et lire le rapport. Le comptage ne consommant aucun crédit, la manœuvre se répète autant de fois que de champs à tester.
Dans la plateforme, pas à pas
- Posez votre segment sur l'onglet « Entreprises » (« Activité », « Localisation », « Employés », « Entreprises actives uniquement ») et notez le nombre de résultats affiché. C'est votre référence.
- Descendez au bloc « Avec : » du panneau de filtres. Il porte quatre bascules : « Données légales », « Page LinkedIn », « Email », « Téléphone ».
- Activez « Données légales » seule, notez le nouveau compte, puis désactivez-la avant de passer à la suivante. Recommencez pour « Page LinkedIn », « Email » et « Téléphone », une bascule à la fois : combinées, elles se multiplient et vous ne mesurez plus rien.
- Divisez chaque compte par la référence. Vous tenez quatre taux de remplissage sur votre marché, pas sur le parc entier. Au-delà de 2 000 entreprises, les deux nombres du rapport sont des estimations de même nature (somme des sources avant déduplication) : le taux reste lisible comme un ordre de grandeur, pas au dixième de point.
- Pour la mesure ligne par ligne, sélectionnez une tranche de résultats, exportez en CSV, et lisez les colonnes `has_lki_company_enrichment`, `has_legal_match`, `has_domain`, `has_gmb_match`, `has_crawled_email`, `has_crawled_phone` et `fill_score`. Le `fill_score` est un score de 0 à 100 qui additionne les sources présentes sur la fiche : 20 points pour LinkedIn, 20 pour le registre, 20 pour la fiche Google, 10 pour le domaine, 15 pour un email relevé, 15 pour un téléphone relevé.
Sur la recherche de personnes, le bloc « Avec : » ne propose qu'une seule bascule, « Profil LinkedIn ». Il n'y a ni bascule email ni bascule téléphone côté contacts, et pas non plus de bascule « Données légales » : le filtre `with_legal_data` existe bien dans l'API mais n'est pas exposé dans l'interface. La couverture des coordonnées d'un contact ne se mesure donc que dans l'export. Trois réserves valent pour les entreprises. Les bascules « Avec … » sont des filtres ET appliqués à chaque source retenue, pas des sélecteurs de source : « Page LinkedIn » n'envoie pas la recherche sur l'index LinkedIn, elle ajoute une condition, et le nombre d'index interrogés ne bouge pas. Ensuite, « Téléphone » ne recouvre pas la même chose selon la source : sur le registre et sur LinkedIn, c'est un drapeau posé au moment de la synchronisation, qui ne couvre que 815 225 fiches entreprises (180 278 pour l'email) ; sur les fiches Google, c'est la présence réelle d'un numéro sur la fiche. Un taux très bas mesure donc en partie l'état du drapeau, pas seulement l'absence de la donnée. Enfin la note et le nombre d'avis n'existent que sur les fiches Google, et le `tech_stack` que sur les entreprises dont le site a été analysé : ces champs-là ne se mesurent pas comme les autres.
Par l'API : POST /companies/find
{
"filters": {
"activity": { "include": ["expert_comptable_audit"] },
"headquarters_city": { "include": ["Bordeaux"] },
"company_ceased": false,
"with_phone": true
},
"countOnly": true
}Le `total` de cet appel est le nombre d'entreprises du segment qui portent aussi le drapeau. Rapporté au `total` du même corps privé de la ligne `with_phone`, il donne le taux de remplissage. Deux précautions de lecture. `meta.sources` sera identique sur les deux appels, et c'est normal : les drapeaux `with_*` sont des conditions ajoutées à chaque source retenue, ils ne changent jamais la liste des index interrogés, ce qui est précisément ce qui rend le rapport valide. Ce qui la change, en revanche, c'est un critère du seul registre ou du seul LinkedIn : si vous en ajoutez un en cours de route, vous ne mesurez plus un remplissage mais un changement de périmètre, et un `meta.noticeCode` à `sources_split` vous le dit. Seconde précaution : au-dessus de 2 000 entreprises les deux totaux sont des sommes cross-source avant déduplication, marquées `totalEstimated: true`, donc le rapport garde son sens mais pas le chiffre absolu.
Rejouez le corps en remplaçant `with_phone` par `with_legal_data`, `with_linkedin_page`, puis `with_email`, et une cinquième fois sans aucun de ces drapeaux pour obtenir la référence. Les cinq appels sont en `countOnly` : aucun crédit débité, et pas de plafond à 100 000, contrairement au `total` d'un appel qui renvoie des fiches. Pour la mesure ligne par ligne, `POST /companies/export` avec les mêmes `filters` rend un CSV de 57 colonnes qui se termine par les drapeaux `has_*` et le `fill_score` (79 colonnes et les mêmes drapeaux sur `POST /people/export`) ; il se paie sur le quota mensuel de lignes du plan, pas en crédits. Une dernière chose à savoir avant de coder : si le taux vous déçoit, l'API ne propose pas de le combler. Les routes d'enrichissement, `/integrations/emelia/:id/find-email`, `/find-phone`, les jobs en masse et le portefeuille, sont montées derrière la session navigateur ou derrière l'extension LinkedIn, jamais derrière une clé d'API. Chercher un email manquant se fait depuis la plateforme ou l'extension, pas depuis un script. Et côté personnes, `/people/find` n'expose ni `with_email` ni `with_phone` : seuls `with_legal_data` et `with_linkedin_profile` y existent.
Le détail des champs, des filtres et des codes de réponse est dans la documentation de l'API.
Avec Claude, en langage courant
Prends les experts-comptables en activité à Bordeaux dans Basile. Compte-les, puis recompte-les quatre fois : avec données légales, avec page LinkedIn, avec email, avec téléphone. Donne-moi les quatre taux.
Claude enchaîne basile_activity_suggest puis basile_count.
Les cinq comptages passent tous par `basile_count`, qui ne débite rien : c'est la seule opération qui se répète sans coût, donc n'hésitez pas à faire varier le segment dans la même conversation. Retenez seulement que son total n'est un décompte exact que sous 2 000 entreprises ; au-dessus c'est une estimation par excès, suffisante pour un rapport, pas pour annoncer un volume. Le `fill_score` ligne par ligne, lui, n'existe que dans le CSV et demande `basile_export`, qui consomme le quota d'export du plan et refuse au-delà de 500 lignes dans une conversation. Le MCP se facture comme une clé d'API : il ouvre la recherche, le comptage et l'export, et pas l'enrichissement. Aucun de ces outils ne remplit un champ vide.
À lire ensuite
- Fichier de prospection : le constituer ou l'acheterCe que contient un bon fichier de prospection, ce que coûte vraiment un fichier acheté, et comment reconnaître celui qui vous fera perdre votre temps.
- RGPD et prospection B2B : ce qui est permis, et à quelles conditionsEn B2B, l'email de prospection ne suppose pas de consentement préalable, mais il suppose une condition précise. Les obligations qui restent, et qui répond en cas de plainte.
- Segmenter un marché B2B français : les critères qui existent vraimentLes critères de segmentation réellement disponibles sur les entreprises françaises, ceux qui manquent, et comment définir un profil de client idéal exploitable.