ITSkillsCenter
Intelligence Artificielle

Personnaliser 10 000 emails avec Claude et Instantly

9 min de lecture
Miniature - Personnaliser 10 000 emails avec Claude et Instantly

Ce que vous saurez faire à la fin

  1. Enrichir une base de 10 000 leads à partir d’Apollo.io et Hunter.io avec données firmographiques exploitables
  2. Concevoir un prompt de personnalisation 1-1 qui produit une accroche unique par destinataire
  3. Orchestrer la séquence d’envoi dans Instantly avec rotation de boîtes et warm-up automatique
  4. Préserver la deliverability (SPF, DKIM, DMARC, BIMI) pour passer la barre des 70% d’inbox placement
  5. Mesurer et arbitrer les KPI : taux d’ouverture, taux de réponse, taux de positif, ROI par boîte expéditrice

Durée : 5h. Pré-requis : compte Anthropic API, abonnement Apollo.io ou Hunter.io (à partir de 49 USD soit 30 000 FCFA/mois), compte Instantly (Hypergrowth à partir de 97 USD), 5 à 10 boîtes Google Workspace ou Outlook 365 dédiées (3 000 FCFA/mois/boîte), budget mensuel total entre 280 000 et 450 000 FCFA pour 10 000 envois.

Étape 1 — Définir l’ICP et segmenter avant tout enrichissement

L’erreur fondatrice est d’envoyer 10 000 emails identiques à une cible floue. Définissez 3 segments maximum, par exemple : DAF de PME 50-200 salariés à Dakar et Abidjan, DRH de groupes industriels au Sénégal et en Côte d’Ivoire, dirigeants de cabinets comptables OHADA. Pour chaque segment, listez 4 à 5 douleurs business concrètes (clôture mensuelle douloureuse, turnover trop élevé, conformité OHADA chronophage). Ces douleurs serviront de matière première au prompt de personnalisation.

Étape 2 — Extraire les leads depuis Apollo.io via API

import requests

APOLLO_API_KEY = "votre_cle_apollo"

def chercher_leads(titre, pays, taille_min, taille_max, page=1):
    url = "https://api.apollo.io/v1/mixed_people/search"
    payload = {
        "api_key": APOLLO_API_KEY,
        "person_titles": [titre],
        "person_locations": [pays],
        "organization_num_employees_ranges": [f"{taille_min},{taille_max}"],
        "page": page,
        "per_page": 100
    }
    r = requests.post(url, json=payload)
    return r.json().get("people", [])

leads = []
for p in range(1, 11):
    leads.extend(chercher_leads("Directeur Administratif et Financier", "Senegal", 50, 200, p))
print(f"{len(leads)} leads extraits")

Étape 3 — Vérifier les emails avec Hunter.io pour éviter les bounces

Un taux de bounce supérieur à 4% détruit la réputation domaine en 48h. Hunter.io vérifie chaque email et retourne un statut (deliverable, risky, undeliverable) avec un score de confiance.

HUNTER_API_KEY = "votre_cle_hunter"

def verifier_email(email):
    url = f"https://api.hunter.io/v2/email-verifier?email={email}&api_key={HUNTER_API_KEY}"
    r = requests.get(url).json()
    return {
        "email": email,
        "status": r["data"]["status"],
        "score": r["data"]["score"]
    }

leads_filtres = []
for lead in leads:
    if not lead.get("email"):
        continue
    v = verifier_email(lead["email"])
    if v["status"] == "deliverable" and v["score"] >= 80:
        leads_filtres.append(lead)
print(f"{len(leads_filtres)} leads valides après vérification")

Étape 4 — Enrichir avec données firmographiques et signaux d’achat

Pour personnaliser réellement, ajoutez à chaque lead : secteur précis, dernière levée de fonds, ouverture récente d’un bureau, recrutement actif d’un poste signalant la douleur (recrutement de 3 comptables = clôture lourde). Ces signaux se trouvent dans Apollo (champ news_articles) ou via le scraping LinkedIn pour les offres d’emploi récentes. Stockez-les dans un champ buying_signal par lead.

Étape 5 — Concevoir le prompt de personnalisation 1-1

Le prompt doit produire une accroche unique en 2 à 3 phrases, jamais générique. La règle d’or : si l’accroche pourrait être copiée-collée vers un autre destinataire, elle est ratée.

PROMPT_PERSO = """Tu es un copywriter B2B francophone spécialisé en cold email pour le marché ouest-africain.
Ton style : direct, factuel, sans flatterie creuse, ton de pair-à-pair.

Données du destinataire :
- Prénom : {prenom}
- Poste : {poste}
- Entreprise : {entreprise}
- Secteur : {secteur}
- Pays : {pays}
- Taille entreprise : {taille} salariés
- Signal d'achat détecté : {signal}
- Dernière actualité entreprise : {actualite}

Tu rédiges UNIQUEMENT l'ouverture de l'email (2 à 3 phrases, max 50 mots).
Cette ouverture doit :
1. Mentionner un fait précis et vérifiable sur l'entreprise ou le destinataire
2. Faire le lien avec une douleur métier crédible pour son poste
3. Préparer la transition vers notre proposition (ne PAS pitcher le produit)
4. Éviter absolument : 'j'espère que vous allez bien', 'rapidement', '5 minutes', 'je vous présente'

Réponds UNIQUEMENT avec l'ouverture, sans formule de politesse, sans signature."""

Étape 6 — Générer les 10 000 ouvertures via Batch API

import anthropic

client = anthropic.Anthropic()

def construire_batch_personnalisation(leads):
    requests_batch = []
    for lead in leads:
        prompt = PROMPT_PERSO.format(
            prenom=lead["first_name"],
            poste=lead["title"],
            entreprise=lead["organization"]["name"],
            secteur=lead["organization"]["industry"],
            pays=lead["country"],
            taille=lead["organization"]["estimated_num_employees"],
            signal=lead.get("buying_signal", "Non détecté"),
            actualite=lead.get("recent_news", "Aucune")
        )
        requests_batch.append({
            "custom_id": lead["id"],
            "params": {
                "model": "claude-sonnet-4-6",
                "max_tokens": 200,
                "messages": [{"role": "user", "content": prompt}]
            }
        })
    return requests_batch

batch = client.messages.batches.create(requests=construire_batch_personnalisation(leads_filtres))
print("Batch créé :", batch.id)

Étape 7 — Construire la séquence Instantly à 5 touches

Touche Délai Sujet Objectif
1 J+0 Personnalisé sur le signal d’achat Provoquer la curiosité, demande douce
2 J+3 « Une question rapide sur votre clôture » Reformulation, autre angle douleur
3 J+7 Cas client similaire (PME OHADA même secteur) Preuve sociale, ROI chiffré FCFA
4 J+12 « Je me trompe peut-être… » Inversion psychologique, demande honnête
5 J+18 Breakup professionnel Sortir de la liste avec élégance

Étape 8 — Configurer la deliverability technique avant le premier envoi

Sans cette étape, 60% de vos emails finiront en spam. Pour chaque domaine d’envoi (jamais le domaine principal de l’entreprise), configurez : un enregistrement SPF (v=spf1 include:_spf.google.com ~all), une signature DKIM 2048 bits, une politique DMARC progressive (p=none puis p=quarantine après 30 jours). Vérifiez le tout sur mxtoolbox.com et mail-tester.com (cible : score 9/10 minimum). Achetez 2 à 3 domaines secondaires proches de votre marque (ex : votre-marque.co, get-votre-marque.com) pour isoler le risque.

Étape 9 — Warm-up des boîtes pendant 14 jours minimum

Instantly propose un warm-up automatique : vos boîtes échangent des emails entre elles avec un volume croissant (jour 1 : 3 emails, jour 14 : 40 emails). Pendant cette phase, n’envoyez AUCUN email à votre liste réelle. Activez l’option auto-reply et mark as important pour simuler un comportement humain. Pour 5 boîtes en parallèle, comptez 200 emails/jour de capacité maximale soutenable, soit 50 jours pour écouler 10 000 leads.

Étape 10 — Charger les leads enrichis dans Instantly via API

const fetch = require('node-fetch');

const INSTANTLY_API_KEY = process.env.INSTANTLY_API_KEY;

async function ajouterLeadsCampagne(campaignId, leads) {
    const url = 'https://api.instantly.ai/api/v1/lead/add';
    const payload = {
        api_key: INSTANTLY_API_KEY,
        campaign_id: campaignId,
        leads: leads.map(function(l) {
            return {
                email: l.email,
                first_name: l.first_name,
                last_name: l.last_name,
                company_name: l.organization,
                personalization: l.opening_claude,
                custom_variables: {
                    signal: l.signal,
                    pays: l.country
                }
            };
        })
    };
    const r = await fetch(url, {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify(payload)
    });
    return r.json();
}

Étape 11 — Rédiger les corps d’email avec variables dynamiques

Le corps d’email reste semi-statique mais utilise les variables Instantly pour fluidifier la lecture. La variable {{personalization}} contient l’ouverture générée par Claude. Le reste du corps mentionne un cas client OHADA, propose un échange de 15 minutes, et signe avec un PS qui rappelle un détail concret du secteur. Limite stricte : 90 mots maximum, pas d’image, pas de tracking pixel agressif (utilisez le tracking link uniquement sur le CTA).

Étape 12 — Lancer la campagne avec rotation et capping intelligent

import anthropic
from datetime import datetime, timedelta

CAPPING = {
    "boite_1": 40,
    "boite_2": 40,
    "boite_3": 35,
    "boite_4": 35,
    "boite_5": 30
}

def planifier_envois(leads, capping):
    planning = {}
    boites = list(capping.keys())
    idx = 0
    jour = datetime.now().date()
    compteur_jour = {b: 0 for b in boites}
    for lead in leads:
        boite = boites[idx % len(boites)]
        while compteur_jour[boite] >= capping[boite]:
            idx += 1
            boite = boites[idx % len(boites)]
            if all(compteur_jour[b] >= capping[b] for b in boites):
                jour += timedelta(days=1)
                compteur_jour = {b: 0 for b in boites}
        planning[lead["id"]] = {"boite": boite, "jour": jour.isoformat()}
        compteur_jour[boite] += 1
        idx += 1
    return planning

Étape 13 — Mesurer les KPI et arbitrer en temps réel

KPI Cible minimum Cible excellence Action si en dessous
Taux d’ouverture (open rate) 35% 55% Retravailler les sujets, vérifier deliverability
Taux de clic 2% 5% Reformuler le CTA, ajouter une preuve chiffrée
Taux de réponse 3% 8% Améliorer la personnalisation Claude (signal plus précis)
Taux de réponse positive 0,8% 2,5% Re-qualifier l’ICP, affiner le segment
Taux de bounce < 2% < 0,8% Repasser la liste dans Hunter, retirer les risky
Taux de spam complaint < 0,1% < 0,03% Pause campagne, audit deliverability complet

Étape 14 — Reporter automatiquement les réponses dans le CRM

Connectez Instantly à votre CRM (HubSpot, Pipedrive, ou un Notion structuré) via Zapier ou n8n. À chaque réponse, créez une opportunité avec : score de sentiment Claude (positif, neutre, négatif), résumé de la réponse en 1 phrase, prochaine action recommandée. Pour 10 000 envois avec 3% de réponses, vous générez 300 conversations à traiter. Sans automatisation, votre commercial passe 2 jours à trier ; avec Claude, il commence directement par les 80 réponses positives qualifiées.

Erreurs classiques à éviter

  • Envoyer depuis le domaine principal : conséquence, blacklist du domaine corporate, emails internes en spam pendant 3 mois.
  • Sauter le warm-up : conséquence, 80% des emails partent en spam dès le jour 1, perte de 6 mois de réputation.
  • Personnaliser uniquement le prénom : conséquence, taux de réponse plafonné à 1%, ROI négatif sur la stack technique.
  • Ignorer la conformité RGPD/loi sénégalaise CDP : conséquence, sanction CDP jusqu’à 100 millions de FCFA, plainte des destinataires.
  • Lancer sans test A/B sur les 200 premiers envois : conséquence, vous brûlez 9800 leads avec un sujet médiocre.

Checklist Personnalisation cold email

✓ ICP défini avec 3 segments maximum et douleurs métier listées
✓ Apollo configuré avec filtres précis (titre, pays, taille)
✓ Hunter.io passé sur 100% des emails extraits
✓ Signaux d'achat enrichis (recrutements, news, levées)
✓ Prompt Claude testé sur 20 leads et validé manuellement
✓ Batch API lancé avec custom_id traçable
✓ Domaines secondaires achetés (jamais le domaine principal)
✓ SPF, DKIM, DMARC configurés et vérifiés mxtoolbox
✓ Warm-up Instantly actif depuis 14 jours minimum
✓ Capping par boîte défini (max 40 envois/jour/boîte)
✓ Séquence à 5 touches avec délais 0/3/7/12/18 jours
✓ KPI dashboard temps réel (ouverture, réponse, bounce)
✓ Conformité RGPD et loi CDP Sénégal documentée
✓ CRM connecté avec scoring sentiment Claude
✓ Procédure de pause d'urgence si spam complaint > 0,1%
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité