Sales Navigator sert à trouver les bonnes personnes. Pas à les garder. Aucun bouton d'export, aucun téléchargement CSV, aucun point d'entrée public à brancher sur une recherche sauvegardée : dès qu'une liste doit sortir de la plateforme, quelqu'un propose d'écrire un scraper en Python. Le réflexe est sain. C'est aussi la version du problème qui comporte le plus de pièces mobiles.
Ce guide couvre ce qu'un scraper atteint réellement dans Sales Navigator, les plafonds que LinkedIn impose à chaque recherche, le chemin Python étape par étape, les deux voies qui évitent complètement le code, et le vrai coût de maintenance le jour où l'interface change. À la fin, vous saurez laquelle des quatre méthodes correspond à votre volume, à votre échéance et à votre tolérance au risque.
Ce que fait vraiment un scraper Sales Navigator
Un scraper, c'est un logiciel qui ouvre votre session Sales Navigator, lit ce qu'une page affiche, et l'écrit quelque part que vous contrôlez. Rien de plus mystérieux. Il n'a aucun accès privilégié, il n'interroge aucune base cachée, et il ne voit pas un seul champ que votre propre siège ne voit pas.
Trois surfaces méritent d'être extraites. Les résultats de recherche de leads, la sortie de vos filtres. Les listes de leads sauvegardées, ces instantanés stables que vous avez construits à la main. Les listes de comptes, le versant société du même graphe, qui se comporte assez différemment pour que la recherche d'entreprise sur LinkedIn mérite ses propres filtres. Le reste, notes, tags, historique d'InMail, est soit verrouillé à la session, soit sans valeur hors de la plateforme.
Ce que l'on comprend mal, c'est la destination. Une extraction n'est pas un livrable. Elle vous donne qui contacter, sous forme de lignes, et elle s'arrête exactement là. Un nom, un titre et une entreprise n'ouvrent aucune conversation. La liste devient un pipeline uniquement une fois enrichie avec les coordonnées que la plateforme retient, vérifiée, puis dédupliquée contre ce que vous possédez déjà.
Ce que Sales Navigator renvoie, champ par champ
Avant de choisir une méthode, soyez précis sur la charge utile. Voici ce qu'une ligne de lead porte de façon fiable, et ce qu'elle ne porte jamais, quelle que soit la voie d'extraction.
| Champ | Présent sur une ligne de lead | Remarques |
|---|---|---|
| Nom complet | Oui | Tel que saisi par la personne, emoji et titres compris. |
| Titre et accroche | Oui | Texte libre, jamais une fonction normalisée. |
| Entreprise actuelle | Oui | Nom de l'entreprise, plus sa page LinkedIn le plus souvent. |
| URL du profil | Oui | La clé de jointure de toutes les étapes d'enrichissement suivantes. |
| Localisation | Oui | Région déclarée, pas une adresse postale. |
| Ancienneté dans le poste | En partie | Visible sur le profil, inconstante dans les vues en liste. |
| Email professionnel | Non | Jamais renvoyé. À trouver ensuite. |
| Téléphone direct | Non | Jamais renvoyé. À trouver ensuite. |
| Domaine, effectif, stack technique | Non | Partiel au mieux côté compte, absent des lignes de leads. |
Relisez ce tableau avant de budgéter un sprint. Deux des trois champs dont votre séquence a réellement besoin pour envoyer quoi que ce soit ne sont tout simplement pas dans la charge utile, aussi bonne soit l'extraction. Ce seul fait tranche l'essentiel de l'arbitrage build ou buy plus bas.
Les plafonds que tout scraper Sales Navigator rencontre
Ces limites viennent de la plateforme, pas de votre code. Un meilleur parseur ne les déplacera pas.
2 500 leads par recherche, sur 100 pages de 25 résultats. LinkedIn le documente dans son propre centre d'aide Sales Navigator, et la recherche de comptes plafonne encore plus bas, à 1 000 résultats sur 40 pages. Une recherche qui correspond à 40 000 personnes vous en rend 2 500, et ces 2 500 ne sont pas un échantillon aléatoire. Le contournement n'a rien de technique : vous découpez la recherche avec de meilleurs opérateurs booléens, par géographie, effectif, séniorité ou secteur, jusqu'à ce que chaque tranche passe sous le plafond, puis vous fusionnez et dédupliquez.
La session est le sésame. Tout s'affiche derrière un siège connecté. Un scraper fonctionne parce qu'il emprunte votre session authentifiée : il hérite donc de vos limites de compte, de vos avertissements et de votre risque. Une session partagée ou recyclée est le moyen le plus rapide de perdre à la fois la donnée et le siège.
L'interface change sans préavis. Sales Navigator est une application monopage à listes virtualisées : les lignes sont détruites et recréées au défilement, les noms de classes sont générés, et une refonte arrive quand LinkedIn décide de la livrer. Des sélecteurs écrits en mars cassent en juin, silencieusement, en produisant des colonnes vides plutôt qu'une erreur franche.
Les conditions d'utilisation ne sont pas ambiguës. Le contrat utilisateur de LinkedIn interdit la collecte automatisée sans autorisation, et les données Sales Navigator sont derrière un abonnement payant : les arguments sur les pages publiques ne s'y appliquent pas. Extraire vos propres listes sauvegardées n'est pas la même posture que moissonner le graphe entier, mais la question juridique se traite avec votre service concerné, pas dans un commentaire de code.
Méthode 1 : écrire un scraper Sales Navigator en Python
Le build classique s'appuie sur une bibliothèque d'automatisation de navigateur, parce que la donnée n'existe qu'après l'exécution du JavaScript. Requests et BeautifulSoup vous rendront une coquille vide : il n'y a aucun HTML rendu côté serveur à parser.
La forme du travail est toujours la même. Charger votre cookie de session dans un driver, ouvrir l'URL de recherche, attendre le conteneur de résultats, faire défiler pour forcer le rendu des lignes virtualisées, lire chaque carte, passer à la page suivante, recommencer, et écrire les lignes au fil de l'eau pour qu'un plantage page 60 ne coûte pas les 59 premières.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.linkedin.com")
driver.add_cookie({"name": "li_at", "value": SESSION_COOKIE, "domain": ".linkedin.com"})
for page in range(1, 101): # 100 pages maximum, par design
driver.get(f"{SEARCH_URL}&page={page}")
scroll_to_bottom(driver) # liste virtualisee : sans scroll, pas de lignes
for card in driver.find_elements(By.CSS_SELECTOR, LEAD_CARD):
write_row(parse(card)) # ecriture par page, jamais a la fin
Quatre détails séparent un script qui survit d'un script qui casse. Un rythme humain : des attentes aléatoires, pas un sleep fixe, et un plafond de volume quotidien. Des écritures idempotentes : clé sur l'URL du profil, pour qu'une relance mette à jour au lieu de dupliquer. Des échecs bruyants : si un sélecteur ne rend rien sur une page entière, arrêtez et alertez, car les vides silencieux sont exactement la façon dont une donnée fausse arrive dans un CRM. La discipline de l'instantané : extrayez une liste sauvegardée plutôt qu'une recherche en direct, qui bouge sous vos pieds entre la page 3 et la page 80.
Bien écrit, cela représente deux à quatre jours de travail pour un développeur Python aguerri, plus la taxe permanente détaillée en section 10. Écrit vite, c'est un week-end, puis un problème silencieux de qualité de données.
Méthode 2 : la voie des points d'entrée internes
Ouvrez l'onglet réseau pendant que vous paginez et vous verrez l'interface appeler des points d'entrée JSON internes. La tentation est immédiate : abandonner le navigateur, appeler l'endpoint, parser des objets propres. Des équipes prennent ce chemin chaque année.
C'est plus propre exactement aussi longtemps que ça marche. Ces points d'entrée sont internes, non documentés et non versionnés. Chaque appel doit porter un jeton dérivé de votre session : vous restez donc attaché à un siège vivant. Les formats de réponse changent sans journal des modifications, et comme les requêtes ne ressemblent plus à une personne qui navigue, c'est le motif le plus simple à repérer. Le mode d'échec est même pire qu'un sélecteur cassé : vous n'obtenez presque jamais une erreur, vous obtenez une forme que vous ne parsez plus correctement.
Si ce que vous voulez est une interface maintenue, la version honnête de ce souhait s'appelle une API supportée, avec un contrat derrière. C'est l'objet de la section 7.
Méthode 3 : importer dans Google Sheets, sans une ligne de code
La plupart des équipes qui réclament un scraper ne veulent pas un scraper. Elles veulent les lignes dans un tableur pour jeudi. C'est un autre problème, et il ne demande aucun dépôt de code.
Derrick vit dans une sidebar à l'intérieur de Google Sheets. Vous pointez Import LinkedIn Leads (Sales Navigator) sur une liste sauvegardée ou une recherche, et il écrit une ligne par lead dans la sheet, à 1 crédit par profil, disponible dès le plan gratuit. Le versant entreprise a son propre import à 1 crédit par société, et si vous préférez décrire la cible plutôt que construire des filtres, Import Leads from a Prompt part d'une description en langage naturel et ramène les profils correspondants à 1 crédit par lead.
La comparaison qui compte n'oppose pas des fonctionnalités à des fonctionnalités. Elle oppose jeudi à un sprint. Rien à déployer, rien à surveiller le jour où LinkedIn redessine une carte, et le même import traite 50 lignes ou 10 000 sans seconde architecture. Le plan gratuit donne 100 crédits par mois, de quoi faire tourner une vraie liste de bout en bout avant de décider quoi que ce soit.
Méthode 4 : API, intégrations et MCP pour les pipelines et les agents
Un développeur Python ne veut généralement pas d'un tableur : il veut la donnée dans un pipeline. L'exigence est légitime, et c'est précisément là qu'un scraper maison est le mauvais outil, puisque vous maintiendriez une couche d'extraction fragile au cœur d'un système qui doit être prévisible.
L'API. Derrick expose ses endpoints d'enrichissement dès le plan Standard à 20 euros par mois : votre script appelle une interface documentée et versionnée au lieu de parser le balisage de quelqu'un d'autre. Votre code garde l'orchestration, les reprises et le stockage ; la partie fragile n'est plus la vôtre à maintenir.
Les intégrations. Avec 3000+ intégrations via Zapier, Make et N8N, l'étape d'enrichissement se déclenche sur un événement CRM, une soumission de formulaire ou une tâche planifiée, sans service de colle à héberger.
Le MCP. Derrick MCP place la même donnée derrière un assistant IA : depuis Claude Desktop, ChatGPT ou tout client compatible MCP, un agent demande l'enrichissement dont il a besoin et reçoit une réponse structurée dans la conversation. Disponible à partir de 20 euros par mois sur le plan Standard. Pour un workflow agentique, c'est un bien meilleur contrat qu'un script Selenium qui tourne dans un conteneur à 3 heures du matin.
Scraper Sales Navigator ou voie sans code : le tableau de décision
| Scraper Python | Import Sheets | API et MCP | |
|---|---|---|---|
| Délai jusqu'à la première liste | 2 à 4 jours | Quelques minutes | Quelques heures |
| Casse à chaque refonte LinkedIn | Oui, en silence | Non | Non |
| Emails et téléphones inclus | Non | Oui, en étape d'enrichissement | Oui, en étape d'enrichissement |
| Maintenance récurrente | La vôtre | Aucune | Aucune |
| Cas idéal | Une extraction unique que personne ne relancera | Des listes de prospection récurrentes | Pipelines, CRM et agents IA |
Un seul scénario donne raison au fait maison : une extraction unique, sur une surface que personne d'autre ne couvre, que vous ne relancerez jamais. Tout ce qui est récurrent appartient à un outil maintenu, pour la même raison que personne n'écrit deux fois son propre parseur de PDF.
Après l'extraction : enrichir, vérifier, dédupliquer
Quelle que soit la méthode qui a produit vos lignes, la sheet devant vous reste une liste de noms. Trois étapes en font une matière exploitable par une séquence, et les trois tournent depuis la même sidebar.
Enrichir le profil. Enrich Leads part de l'URL du profil et remplit les données structurées à 1 crédit par profil, disponible dès le plan gratuit.
Trouver les points de contact. Email Finder rend un email professionnel à 5 crédits par email trouvé, et Phone Finder un numéro direct à 150 crédits par téléphone trouvé. Les deux sont des features payantes, à partir du plan Mini à 9 euros par mois, et les deux facturent au résultat plutôt qu'à la tentative. Email Verification contrôle une adresse à 1 crédit par email, avant de brûler la réputation d'un domaine sur une liste douteuse.
Nettoyer le fichier. Find Duplicates supprime les recouvrements que le découpage d'une recherche plafonnée crée toujours, sans coût en crédits. Faites-le avant l'enrichissement, jamais après, pour ne jamais payer deux fois la même personne.
Dans cet ordre, une extraction de 2 000 lignes devient une liste séquençable en un après-midi, avec un taux de rebond qui ne fera pas filtrer votre domaine. Notre benchmark de prospection 2026 chiffre pourquoi cette étape n'est pas optionnelle : une liste exportée se périme au rythme des changements de poste, et seule une re-vérification à la source la garde envoyable.
Ce que coûte vraiment un scraper Sales Navigator maison
L'estimation du build est la partie que tout le monde réussit. La maintenance est celle qui tranche.
| Poste de coût | Ce que cela donne en pratique |
|---|---|
| Build initial | 2 à 4 jours-développeur pour la pagination, le parsing, les reprises et la sortie CSV. |
| Maintenance des sélecteurs | D'une demi-journée à deux jours à chaque changement d'interface, à une date imprévisible. |
| Perte de données silencieuse | Des colonnes vides qui arrivent dans le CRM avant que quiconque le remarque. L'échec coûteux. |
| Risque sur le compte | Le siège qui exécute le script est celui avec lequel vous prospectez. |
| Toujours manquant | Les emails et les téléphones, qui exigent une étape d'enrichissement de toute façon. |
Mettez un taux horaire réel sur les deuxième et troisième lignes et l'arithmétique cesse d'être serrée. Une journée de développement coûte plus qu'une année de plan Standard, et le scraper vous rend toujours une liste sans le moindre email. Ce n'est pas un argument contre Python : c'est un argument pour dépenser votre Python sur ce que personne d'autre ne peut construire à votre place, et laisser un outil maintenu porter la frontière fragile avec une plateforme que vous ne contrôlez pas.
Si vous démarrez aujourd'hui, procédez dans cet ordre. Resserrez la recherche avec de meilleurs filtres pour passer sous le plafond, sauvegardez-la en liste de leads pour figer l'instantané, importez cette liste dans une sheet, enrichissez et vérifiez ce qui revient, puis dédupliquez. Si l'une de ces étapes vous est étrangère, le guide complet Sales Navigator couvre le versant prospection du même workflow. Une fois cet aller-retour devenu routinier sur trente leads, le même mouvement tourne sur dix mille sans changer de forme, ce qu'un scraper maison ne parvient jamais à promettre.
Questions fréquentes
A-t-on le droit de scraper Sales Navigator ?
Combien de leads un scraper Sales Navigator peut-il extraire par recherche ?
Un scraper Sales Navigator rend-il les emails et les téléphones ?
Quelle bibliothèque Python utiliser pour scraper Sales Navigator ?
Existe-t-il une API officielle pour exporter les leads Sales Navigator ?
Quelle est la façon la plus rapide d'obtenir ses leads Sales Navigator dans Google Sheets ?
Un agent IA peut-il récupérer des données Sales Navigator directement ?
À lire aussi dans ce cocon
Lancez votre enrichissement en 30 secondes
Gratuit, 100 crédits/mois. Sans carte bancaire.
Installer Derrick gratuitement →