Il y a quelques semaines, j'ai envoyé 456 emails à des médiathèques et centres culturels pour proposer ma conférence Démystifier l'IA. Je n'ai pas passé 900 minutes à les rédiger. Je n'ai pas non plus passé une seule minute à générer les devis qui ont suivi.
Résultat : 38 demandes de devis en 4 jours. 8,67% de taux de réponse sur un public froid, sans aucune relation préalable.
Ce chiffre ne tombe pas du ciel. Il est le produit d'un flow entièrement automatisé — du premier email jusqu'à la signature électronique du contrat. Voilà comment ça marche, pourquoi ça marche, et ce que j'ai appris en le construisant.
Le problème que je voulais résoudre
Je suis développeur indépendant. Je fais des conférences sur l'IA. Entre les deux, il y a un cycle de vente que la plupart des indépendants gèrent à la main :
- Trouver les contacts
- Envoyer un email
- Attendre
- Relancer
- Envoyer un devis en PDF
- Attendre encore
- Relancer encore
- Recevoir le bon pour accord par fax (oui, en 2026)
C'est épuisant, chronophage, et surtout — c'est du temps que je ne passe pas à coder ou à préparer mes conférences. J'ai décidé d'automatiser les étapes 2 à 8. Entièrement.
Le flow, étape par étape
1. La liste de contacts
Tout commence avec un fichier CSV : médiathèques.csv. Nom de la structure, email, adresse, code postal, ville.
Un script Python filtre les emails invalides, exclut les zones trop éloignées (déplacements trop coûteux), et nettoie les noms de structures — parce qu'une médiathèque qui s'appelle "Médiathèque intercommunale du Pays de l'Arbresle (MIPA)" dans un CSV ne mérite pas d'apparaître telle quelle dans un email.
def clean_library_name(name):
name = re.split(r'\.|\,', name)[0]
name = name.replace('"', '').strip()
return name if len(name) > 2 else 'Médiathèque'
2. Le calcul des frais de déplacement
C'est le détail qui change tout : chaque devis intègre automatiquement les vrais frais kilométriques, calculés à la volée.
Le script géocode l'adresse de la structure via l'API gouvernementale api-adresse.data.gouv.fr, puis calcule la distance aller-retour via OSRM (un routeur open source). Si la structure est à moins de 30 km, les frais sont à zéro. Au-delà, le tarif kilométrique s'applique.
distance_km = data["routes"][0]["distance"] / 1000
frais = round(distance_km * 2 * tarif, 2) if distance_km >= SEUIL_KM else 0.0
Résultat : une médiathèque à 15 km reçoit un devis à 300 €. Une autre à 80 km reçoit un devis à 324 €. Automatiquement. Sans que j'aie tapé un seul chiffre.
3. L'email initial
Le mail envoyé via Brevo est volontairement court. Une seule question. Deux boutons.
Seriez-vous intéressé de recevoir un devis pour une conférence sur l'intelligence artificielle dans votre structure ?
[Oui, envoyez-moi un devis] · [Non merci]
Pas de présentation interminable. Pas de liste à puces. Juste une décision binaire à prendre.
Le bouton "Non merci" est aussi important que le "Oui" — il redirige vers un formulaire de refus qui me donne les vraies raisons (budget, timing, pas intéressé...) et propose de rester dans ma liste ou d'en sortir. Je collecte de la donnée même sur les non.
4. La génération du devis
Quand quelqu'un clique sur "Oui", un token unique est créé côté serveur. Ce token déclenche :
- La création d'un client en base de données (ou la mise à jour s'il existe déjà)
- La génération d'un devis numéroté (
DEV-202603-XXXX) - La génération d'un PDF via TCPDF
- La mise en file d'attente de l'email (
email_queue)
Le devis ne part pas immédiatement. Un délai aléatoire entre 3 et 8 minutes est introduit volontairement — parce qu'un devis qui arrive 11 secondes après un clic, ça fait robot. Un devis qui arrive 5 minutes après, ça ressemble à quelqu'un qui a pris le temps de le préparer.
$delay = rand(180, 480); // entre 3 et 8 minutes
$sendAfter = date('Y-m-d H:i:s', strtotime('+' . $delay . ' seconds'));
5. L'email du devis
Le devis PDF est joint à l'email, mais l'email lui-même est pensé comme un kit complet :
- Le PDF du devis
- Ma photo de profil
- Une affiche PNG haute définition pour les communications
- Les textes prêts à copier-coller pour les flyers et réseaux sociaux
- Les codes couleurs de la charte graphique
- Trois boutons d'action : voir les thématiques, proposer des dates, signer en ligne
L'idée : zéro friction. La structure reçoit tout ce dont elle a besoin pour dire oui et pour communiquer sur l'événement. Elle n'a pas à me relancer pour un visuel.
6. La signature électronique
Le devis contient un lien vers une page de signature en ligne. Le client dessine sa signature sur un canvas HTML5, clique sur "Bon pour accord", et :
- La signature est horodatée avec l'IP
- Un PDF final est regénéré avec la signature incrustée
- Le client reçoit son exemplaire signé par email
- Je reçois une notification avec un lien vers le CRM
const signaturePad = new SignaturePad(canvas, {
backgroundColor: "rgba(255, 255, 255, 0)",
penColor: "#1a1a1a",
});
Tout ça sans que j'intervienne une seule fois.
Les chiffres
| Étape | Volume |
|---|---|
| Emails envoyés | 900 |
| Demandes de devis | 47 (5,2%) |
| Devis générés automatiquement | 47 |
| Minutes passées manuellement | 0 |
Pour contextualiser : la moyenne B2B du cold email en 2025 tourne autour de 4% de taux de réponse. Les meilleures campagnes atteignent 10%. Un taux de réponse de 8,67% sur un public entièrement froid, c'est dans le top 10% mondial des campagnes cold email — surtout pour un indépendant sans équipe commerciale.
Ce que j'ai appris
Le bouton "Non merci" est sous-estimé. La plupart des campagnes de cold mail ignorent les refus. Moi je les collecte, je les analyse, et je m'en sers pour améliorer le ciblage. Un refus pour raison budgétaire n'est pas la même chose qu'un refus par désintérêt.
Le délai aléatoire change la perception. Un email qui arrive trop vite casse l'illusion. Trois à huit minutes de délai, c'est suffisant pour que ça ressemble à une interaction humaine.
Donner plus que ce qu'on demande. Envoyer le devis ET le kit de communication ET les textes prêts à l'emploi, c'est retirer une étape au client. Moins il doit faire, plus il avance vite vers la signature.
Automatiser ne veut pas dire déshumaniser. Le mail initial est court, direct, non-corporate. Il n'a pas l'air d'un mail automatisé parce que je n'ai pas essayé de le rendre impressionnant — j'ai essayé de le rendre honnête.
La stack
- Python — script d'envoi, géocodage, calcul de distance (OSRM)
- Brevo — envoi transactionnel
- PHP — backend CRM, génération de devis, API
- TCPDF — génération PDF
- MySQL — clients, devis, queue d'emails
- Signature Pad (JS) — signature électronique côté client
Tout le code tourne sur un hébergement mutualisé standard. Pas de serverless, pas de microservices, pas de Kubernetes. Un VHost PHP et une base MySQL suffisent.
Si tu es indépendant et que tu passes encore du temps à envoyer des devis manuellement, je t'encourage à regarder ce que tu peux automatiser. Pas tout d'un coup — une étape à la fois. Commence par le devis. Puis la relance. Puis la signature.
Le temps que tu récupères, tu peux le mettre ailleurs. Dans le travail que tu aimes. Ou dans un article de blog.

Top comments (0)