Prospection commerciale avec l'IA : dossier vérifié par prospect, tiers A/B/C calculés, séquence écrite par Claude, lint à 0 BLOCK et contrôle DNS. Les commandes.
Couverture swanbase du tuto prospection commerciale avec l'IA sans spam : dossier vérifié, tiers A/B/C, lint à 0 BLOCK

La prospection commerciale avec l'IA consiste à confier à un modèle de langage la recherche sur chaque prospect et l'écriture des messages, puis à contrôler son travail par des scripts avant tout envoi. Vous obtenez une séquence de quatre à six emails dont le premier message s'ouvre sur un fait daté et sourcé sur la personne qui le lit.

Depuis Claude Code, vous vérifiez d'abord le domaine d'envoi par DNS. Vous construisez ensuite un dossier vérifié par prospect, classez les prospects en tiers A, B et C par script et faites écrire la séquence par le modèle. Vous passez enfin un lint en boucle jusqu'à zéro blocage, puis relisez l'export avant de l'importer dans votre outil d'envoi.

L'agent n'envoie jamais rien : vous gardez la main sur l'envoi.

Un prospect passe en tier A avec au moins 65 points et un fait fort de moins de 120 jours. Un premier email de plus de 90 mots, ou avec un lien, reste bloqué au lint.

Pour la méthode générale (segmentation, objet, cadre légal), lisez notre guide du cold email B2B. Cet article détaille le process IA, commande par commande.

Les six étapes de la prospection commerciale avec l'IA : domaine vérifié, dossier par prospect, tiers A, B et C, séquence écrite par le modèle, lint à 0 BLOCK, validation de l'export

Qu'est-ce que la prospection commerciale avec l'IA ?

Tous les usages de l'IA en prospection butent sur le même risque : un modèle de langage écrit avec aplomb une phrase fausse sur votre prospect, et votre « personnalisation » devient une erreur signée de votre nom.

Chaque fait sur un prospect porte une date, l'URL de la page lue et un extrait copié mot pour mot. Un script recherche cet extrait dans la copie locale de la page. S'il n'y figure pas, le fait sort du dossier.

Le modèle cherche et écrit, les scripts vérifient

Le modèle trouve les pages publiques d'un prospect, en tire des faits et écrit les messages. Les scripts Python couvrent la partie mécanique : retrouver chaque extrait, attribuer les points, construire le CSV, compter mots et liens, comparer les accroches.

Le modèle ne modifie jamais un tier. Pour changer un classement, vous changez la grille de points ou vous ajoutez un fait sourcé.

Pour qui, et pour quelle taille de liste

La méthode vise un fondateur qui a une cible nette et une liste de 20 à 200 personnes. Elle exclut les envois de masse vers des milliers d'adresses et les listes achetées. Les personnes que vous connaissez déjà passent en tier C : elles méritent un message personnel écrit par vous.

Prérequis avant de commencer

Une cible écrite et une offre en deux phrases

L'agent démarre avec deux informations obligatoires : votre offre en deux phrases et votre cible (rôle, taille d'entreprise, secteur, géographie). Le reste a une valeur par défaut :

  • l'objectif : un retour, un appel, un essai, un partenariat, ou une relation sans demande pour des partenaires ou des investisseurs ;
  • le canal : email par défaut, LinkedIn en option ;
  • le domaine d'envoi et son sélecteur DKIM, pour l'étape 1 ;
  • l'âge de votre boîte d'envoi et la taille de la liste, pour calculer le rythme.

Avec une cible floue comme « les fondateurs », l'agent propose une définition plus étroite et note l'hypothèse dans son rapport.

Claude Code et un dossier de travail

Vous lancez l'agent dans Claude Code. Les scripts tournent en Python 3.9 ou plus, avec la seule bibliothèque standard. La lecture DNS passe par dig, sinon par DNS over HTTPS.

Chaque campagne vit dans son propre dossier :

<projet>/cold-outreach-builder/
  state/state.json            # qui a été contacté, à quelle étape, qui a répondu
  outreach-AAAAMMJJ/
    leads.csv
    cache/<hash>.txt          # chaque page lue
    dossiers/<id>/prospect.json
    tiers.json
    cold-outreach-output.json # la séquence modèle
    messages.json             # accroches et messages tier A
    sequence-export.csv
    sender-check.json  lint.json

Étape 1 : vérifier votre domaine d'envoi

Commencez par le domaine : une séquence parfaite envoyée depuis un domaine mal configuré finit dans les spams.

python3 scripts/check_sender.py --domain outreach.votre-startup.fr \
  --dkim-selector s1 --inbox-age-days 20 --list-size 60 --out sender-check.json

SPF, DKIM, DMARC et MX lus par DNS

Le script lit quatre enregistrements :

  • SPF : un seul enregistrement v=spf1, terminé par -all ou ~all, avec au plus 10 termes qui déclenchent une requête DNS. Un +all échoue.
  • DKIM : une clé publique non vide sous <sélecteur>._domainkey.<domaine>. Vous lisez le sélecteur dans le tag s= de l'en-tête DKIM-Signature d'un email envoyé depuis ce domaine.
  • DMARC : un enregistrement v=DMARC1. p=none passe avec un avertissement ; sans adresse rua=, vous ne recevez aucun rapport agrégé.
  • MX : le domaine doit recevoir les réponses et les rebonds. Un MX nul fait échouer le contrôle.

Le script sort en code 1 si un contrôle échoue. Voici sa sortie réelle sur example.com, domaine de test qui déclare ne recevoir aucun email :

Sortie du script check_sender.py sur example.com : SPF valide, DKIM non vérifié, DMARC sans adresse de rapport, MX nul en échec, plafond de 5 envois par jour pour 60 prospects

Envoyez depuis un sous-domaine dédié, avec ses propres SPF, DKIM et DMARC : votre domaine principal garde sa réputation si la campagne tourne mal. Google impose ces trois authentifications aux expéditeurs en volume dans ses règles pour les expéditeurs d'emails.

Jamais de sonde SMTP pour vérifier une adresse

Une sonde SMTP interroge le serveur du destinataire (commande RCPT TO) pour savoir si une adresse existe. Nous l'avons payé en août 2026 : après plusieurs milliers de sondes en une journée depuis notre serveur, son adresse IP est passée sur la liste Spamhaus. Les serveurs hébergés chez Microsoft ont alors rejeté toutes les adresses, y compris celles qu'ils confirmaient comme bonnes quelques heures plus tôt.

Confiez donc la vérification des adresses à un service tiers spécialisé, et n'envoyez aucune sonde depuis la machine qui fait tourner l'agent. Après une vague de rejets, recontrôlez une adresse que vous savez bonne avant de croire la vague. check_sender.py n'ouvre aucune connexion sur le port 25.

Le volume quotidien selon l'âge de la boîte

Une boîte neuve n'a aucune réputation. L'agent applique ces plafonds par défaut, choisis par prudence (aucun fournisseur ne publie de plafond pour l'email à froid) :

Âge de la boîte d'envoi Premiers emails par jour
Moins de 14 jours 0 (warm-up seulement)
14 à 30 jours 5 à 10
30 à 60 jours 20 à 30
Plus de 60 jours 30 à 50

Au-delà de 50 envois par jour, ajoutez des boîtes. Surveillez ensuite le taux de plaintes dans Postmaster Tools : Google demande de rester sous 0,1 % et de ne jamais atteindre 0,3 %.

Étape 2 : construire un dossier vérifié par prospect

python3 scripts/run_dossiers.py prepare --leads leads.csv --run-dir outreach-20261012 \
  --state state/state.json

Cette commande écarte les prospects déjà dans une séquence, désinscrits ou contactés trop récemment, puis écrit un fichier brief.md par prospect restant. Claude Code traite ces briefs par sous-agents, trois à la fois, chacun avec son seul brief en entrée. Un dossier compte comme fini quand son fichier existe sur le disque et passe le contrôle, quel que soit le message du sous-agent.

Les sources à lire, dans l'ordre

Le modèle lit le site et le blog de la société, la presse, les registres publics, les offres d'emploi, les pages de conférences et de podcasts, les posts publics, puis le site personnel du prospect. Il cherche d'abord les événements des 120 derniers jours : une levée, une création de société, un lancement, un recrutement, un nouveau poste. Deux à cinq faits suffisent.

L'agent ne lit jamais un profil ni une page entreprise LinkedIn : ces pages ne s'affichent qu'après connexion et leurs conditions interdisent l'extraction. Les posts publics restent lisibles, et l'identifiant d'un post donne sa date exacte.

Un fait = une date, une URL, un extrait copié

Chaque page lue passe d'abord par le cache local :

python3 scripts/cache_page.py --cache outreach-20261012/cache <url>

Le modèle écrit ensuite le fait dans prospect.json, comme dans notre exemple public du 12 octobre 2026 (prospect fictif, nom et URL masqués) :

Extrait anonymisé d'un dossier prospect.json : un fait de type lancement daté du 29 septembre 2026, avec URL source et extrait copié de l'annonce de bêta privée

L'extrait fait entre 15 et 400 caractères, copié tel quel. Un fait sans date lisible n'entre pas dans le dossier. L'adresse email vient de votre liste ou d'une page publique vérifiée : le modèle ne la devine jamais à partir d'un format prénom.nom.

Sans aucun fait daté et vérifiable, le dossier reste vide et le prospect part en tier C : la seule alternative serait d'inventer.

Le contrôle par script

python3 scripts/verify_dossiers.py outreach-20261012/dossiers --cache outreach-20261012/cache

Le script signale une page absente du cache (not-cached), un extrait introuvable dans la page (excerpt-not-found), une date dans le futur, un post daté autrement que par son identifiant, un email absent de la page citée. Il sort en code 1 tant qu'une erreur reste. Vous corrigez alors le dossier : copier les mots exacts, mettre la page en cache, ou supprimer le fait. Le script et le cache restent intacts. Sur notre exemple, le contrôle rend « 3 dossier(s), 3 ok; facts: 4 verified, 0 stale, 0 failed ».

Étape 3 : classer vos prospects en tiers A, B et C

python3 scripts/score_prospects.py outreach-20261012/dossiers --criteria criteria.json

La grille de points

Vous adaptez la grille, un simple fichier JSON, à votre cible. Elle compte cinq postes :

  • faits vérifiés : levée ou création de société 25 points, lancement ou recrutement 20, nouveau poste 15, post ou conférence 12, article de presse 10, autre 5, avec un plafond de 40 points ;
  • récence du fait le plus frais : 15 points sous 30 jours, 10 sous 90 jours, 5 sous 180 jours ;
  • rôle : fondateur ou CEO 25 points, direction 15, autre 5 ;
  • géographie : 10 points dans votre zone, 3 si elle reste inconnue ;
  • mots-clés de votre cible dans les faits : 5 points chacun, 10 au plus.

Tier A : au moins 65 points et un fait fort (levée, création, lancement, recrutement, nouveau poste) de moins de 120 jours. Tier B : au moins 35 points et un fait vérifié. Le reste part en tier C, avec la raison écrite. Un fait de plus de deux ans reste dans le dossier, sans points ni accroche.

Exemple : trois prospects, trois tiers

Grille appliquée à trois prospects fictifs : prospect A à 95 points en tier A, prospect B à 42 points en tier B, prospect C à 25 points en tier C, avec le détail des points

Dans notre exemple, la prospect A obtient 95 points. Elle a créé sa société le 20 août 2026, un fait fort de moins de 120 jours : tier A. Le prospect B a donné une conférence en mars 2026, hors de la fenêtre de 120 jours : 42 points, tier B. La prospect C n'a aucun fait vérifié : 25 points, tier C, aucun message.

Si toute votre liste tombe en tier C, gardez la grille. Cherchez de meilleures sources ou une meilleure liste.

Étape 4 : faire écrire la séquence par l'IA

Le tier A reçoit des messages écrits pour la personne, à chaque étape. Le tier B reçoit la séquence modèle partagée, avec une accroche construite sur un de ses faits vérifiés. Le tier C ne reçoit rien.

Le squelette : étapes, jours, une demande par message

Le modèle pose le squelette avant d'écrire une ligne. Les écarts entre messages s'allongent, pour qu'une réponse tardive ne paraisse pas tardive :

Message Séquence de 6 Séquence de 4
Accroche J0 J0
Relance courte J+3 (absente)
Contenu utile J+7 J+5
Preuve ou point de vue J+12 (absente)
Demande directe J+18 J+12
Message de clôture J+26 J+21

Chaque message porte un seul levier d'influence (réciprocité, engagement, autorité, sympathie, appartenance) et une seule demande. Une séquence de six messages en utilise au moins quatre différents. Sur LinkedIn, l'invitation tient en 200 caractères sans argumentaire, et le premier message part entre J+1 et J+3.

En français, l'agent vouvoie par défaut. Il tutoie seulement si le dossier montre, URL à l'appui, que la personne tutoie en public.

Le prompt de l'accroche

La consigne donnée au modèle pour chaque accroche, traduite de l'agent :

Pour chaque prospect de tier A ou B, écris une phrase d'accroche construite
sur UN fait vérifié (hook_fact_id). L'accroche ne dit rien de plus que
l'extrait du fait. Elle diffère de l'accroche de tous les autres prospects.
Pour le tier A, écris chaque étape pour la personne, autour de ses faits.
Langue et registre (tu ou vous) viennent du dossier.
Aucun taux de réponse, aucun client inventé, aucun chiffre sans source.

Extrait d'une séquence tier A

Le premier email écrit pour la prospect A, traduit de l'anglais, noms remplacés :

Objet : vos design partners, racontés à un investisseur

Bonjour [prénom],

[Société] a ouvert sa bêta privée le 29 septembre, et votre note sur vos dix
premiers design partners se termine sur une question : comment en faire une
histoire qu'un investisseur peut suivre.

Nous travaillons cette question avec les fondateurs chez swanbase, un
accélérateur parisien pour les fondateurs qui lancent leur première startup.
Nous avons écrit une checklist d'une page sur ce que les investisseurs
demandent à propos des premiers utilisateurs. Je vous l'envoie avant votre
pré-seed ?

{{sender_first_name}}

L'accroche reprend deux faits vérifiés du dossier.

Étape 5 : passer le lint jusqu'à 0 BLOCK

python3 scripts/lint_outreach.py outreach-20261012/sequence-export.csv \
  --dossiers outreach-20261012/dossiers --sequence outreach-20261012/cold-outreach-output.json \
  --out outreach-20261012/lint.json

Le lint sort en code 1 tant qu'un BLOCK reste.

Les limites mécaniques

  • Longueur : premier email en alerte à 80 mots, bloqué au-delà de 90 (signature exclue). Sur LinkedIn, 45 mots et 200 caractères pour le premier message.
  • Liens : aucun dans le premier email, un au plus dans les relances, aucun raccourcisseur.
  • Objet : obligatoire au premier email, 50 caractères au plus.
  • Accroches : comparées entre prospects par trigrammes de mots, après masquage du nom et de la société. Une similarité de 0,6 bloque, 0,4 déclenche une alerte.
  • Chiffres : un nombre doit figurer dans un fait vérifié du prospect ou dans vos preuves déclarées. Les dates et les durées passent.
  • Forme : aucun emoji, aucune puce, aucune variable oubliée, une signature en dernière ligne.

Le lint bloque aussi des tournures françaises : « j'espère que ce message vous trouve bien », « je me permets de vous contacter », « je serai bref », « ce n'est pas un pitch », la flatterie générique (« super post », « parcours impressionnant ») et la fausse rareté (« plus que 3 places »).

Les seuils de la méthode : 90 mots au premier email, aucun lien, similarité d'accroche bloquante à 0,6, tier A à 65 points, plaintes sous 0,1 %, recontact après 180 jours

Les blocages de notre test

Pour éprouver la boucle, nous avons cassé l'exemple du 12 octobre : un lien raccourci et une promesse chiffrée dans le premier email de la prospect A, et son accroche recopiée pour le prospect B. Résultat :

Sortie du lint sur une copie cassée volontairement : quatre BLOCK (lien interdit, chiffre sans source, lien raccourci, accroche dupliquée) et une alerte de longueur, puis zéro BLOCK sur l'exemple corrigé

Vous corrigez chaque BLOCK là où vous l'avez écrit, dans messages.json ou dans la séquence modèle, vous reconstruisez l'export et vous relancez. Après trois passes, un prospect encore bloqué passe en attente (hold) avec sa raison, hors de l'export. Ne touchez jamais aux limites ni au script pour faire passer un message. Sur l'exemple propre, le lint rend « 2 row(s) x 4 step(s), channel email: 0 BLOCK, 0 WARN ».

Une relecture humaine suit le lint : l'accroche dit-elle ce que dit le fait, le prospect peut-il répondre en une ligne. Écrivez chaque message en phrases complètes, sujet, verbe, complément : un email fait de fragments et d'étiquettes à deux-points se lit comme une fiche générée.

Étape 6 : valider, importer, suivre les réponses

L'export CSV et la validation humaine

python3 scripts/build_sequence_export.py --sequence cold-outreach-output.json --leads leads.csv \
  --tiers tiers.json --messages messages.json --dossiers dossiers --out sequence-export.csv

L'export est un CSV générique, une ligne par prospect, une colonne par étape. Vous l'importez dans un séquenceur qui accepte des champs personnalisés, comme Lemlist, ou dans un publipostage depuis un tableur. Les tiers C, les prospects exclus et les lignes avec une variable vide partent dans un fichier skipped.csv, chacun avec sa raison.

Avant l'import, vous relisez l'export. C'est le seul arrêt humain de l'agent, et il reste obligatoire.

Checklist de délivrabilité avant le premier envoi, du domaine d'envoi jusqu'aux messages

La mémoire entre deux campagnes

Après l'import, enregistrez les envois dans l'état des contacts :

python3 scripts/outreach_state.py register --state state/state.json \
  --export sequence-export.csv --sequence-id outreach-20261012 --start-date 2026-10-14 --channel email

Aux campagnes suivantes, un script classe les réponses exportées et met l'état à jour. Les adresses en rebond, les désinscrits et les réponses négatives ne reviennent jamais. Les autres attendent 180 jours avant un nouveau contact. L'agent rédige les réponses ; vous les validez et les envoyez vous-même.

Les erreurs de la prospection IA

Lancer des modèles sans liste

Notre premier run, le 28 avril 2026, a produit une séquence LinkedIn sans liste de prospects. L'agent a livré des modèles aux accroches génériques et des conseils d'envoi chiffrés sans source. La version d'octobre part toujours d'un dossier par personne, et un prospect sans fait vérifié ne reçoit rien.

Laisser l'IA écrire des chiffres

Un modèle ajoute volontiers « nos fondateurs lèvent trois fois plus vite » pour appuyer un message. Le lint bloque tout nombre absent des faits vérifiés et de vos preuves déclarées. La même règle écarte les taux de réponse promis et les clients inventés.

Copier la même accroche

Une accroche « personnalisée » recopiée d'un prospect à l'autre, prénom changé, reste un publipostage. La comparaison masque le nom et la société avant de mesurer la ressemblance : notre test l'a bloquée du premier coup.

Quels outils pour la prospection commerciale IA ?

Rôle Outil Remarque
Recherche, écriture, orchestration Claude Code et ses sous-agents trois dossiers en parallèle
Enrichissement de liste Clay ou votre tableur l'agent part de votre liste
Vérification des adresses un service tiers spécialisé aucune sonde SMTP depuis votre machine
Contrôle du domaine check_sender.py ou dig DNS seulement
Envoi et relances un séquenceur comme Lemlist import du CSV générique

Notre comparatif des outils de prospection B2B détaille les séquenceurs et les bases de contacts. L'agent cold-outreach-builder, avec ses scripts et l'exemple de cet article, est disponible sur fog-agents.com.

FAQ

L'IA peut-elle faire toute la prospection commerciale ?

Non. L'IA fait la recherche sur chaque prospect et l'écriture des messages, des scripts vérifient les faits et contrôlent les messages, et vous validez l'export avant tout envoi. Vous écrivez ou validez aussi les réponses aux prospects.

Quel est le meilleur outil d'IA pour la prospection commerciale ?

Un modèle capable de lire des pages, d'écrire des fichiers et de lancer des scripts, comme Claude Code, couvre la recherche et l'écriture. Ajoutez un séquenceur pour l'envoi et un service de vérification d'adresses.

Comment trouver des clients avec l'IA ?

Partez d'une liste de 20 à 200 personnes qui correspondent à votre cible. Faites construire un dossier de faits datés et sourcés pour chacune, puis écrivez à celles qui ont un fait récent, avec un premier message court, sans lien, ouvert sur ce fait.

Combien d'emails de prospection envoyer par jour ?

Aucun pendant les 14 premiers jours d'une boîte neuve, 5 à 10 jusqu'à 30 jours, 20 à 30 jusqu'à 60 jours, puis 30 à 50. Ces plafonds prudents viennent de notre méthode : au-delà de 50 par jour, ajoutez des boîtes.

La prospection par email avec l'IA est-elle légale ?

En B2B, la CNIL autorise la prospection par email sans consentement préalable si le message concerne la profession de la personne, si vous l'informez et si elle peut s'opposer simplement. L'IA ne change rien à ces règles : prévoyez un lien de désinscription et respectez chaque refus.

Comment créer un agent IA de prospection ?

Un agent de prospection réunit des consignes pour le modèle et des scripts de contrôle. Dans Claude Code, vous pouvez le packager en skill ou partir de l'agent cold-outreach-builder de fog-agents, qui fournit les scripts de cet article.