Voir tous les cas clients
● Case study NurturingData-cleaning

Comment Cashmyrr a transformé les données CRM en une machine à campagnes scalable et sûre en délivrabilité pour TGV Lyria

Le client : TGV Lyria, la grande vitesse entre la France et la Suisse TGV Lyria opère des trains à grande vitesse entre la France et la Suisse. Derrière chaqu

Résultat

4 350

contacts en doublon fusionnés

Résultat

367

entreprises en doublon fusionnées

Résultat

159K

contacts migrés de Sarbacane vers HubSpot, puis Brevo

● Contexte

Le client : TGV Lyria, la grande vitesse entre la France et la Suisse

TGV Lyria opère des trains à grande vitesse entre la France et la Suisse. Derrière chaque liaison Paris-Genève ou Paris-Zurich, une petite équipe communication mène des campagnes à fort volume sur trois marchés et trois langues, la France, la Suisse romande et la Suisse alémanique, sous les contraintes de process strictes de deux grands groupes ferroviaires : SNCF et CFF.

Au moment de changer de plateforme d'emailing, le « suffisant » n'était pas une option. Une campagne commerciale stratégique était déjà programmée au calendrier.

Le problème : une migration CRM qui ne pouvait pas se permettre le moindre faux pas

Au lancement du projet, la situation était un cas d'école du « rapide et fiable, il faut choisir les deux » :

  • Une migration avec une deadline. Passer de Sarbacane à Brevo sans perdre en qualité de données, en délivrabilité ou en exploitabilité, avec un temps fort commercial déjà programmé.
  • Trois outils, aucun ne communiquant proprement. Sarbacane pour l'envoi historique, HubSpot comme socle CRM, Brevo prévu comme nouvelle plateforme transactionnelle et marketing. Aucune vue contact cohérente entre les trois.
  • Des années de données en désordre. Les données source vivaient dans des fichiers CSV/Excel plats, répartis par langue. Des opt-ins stockés en "Oui", "Ja", "1" et une douzaine d'autres variantes. Plaintes, NPAI (retours postaux), désabonnements et rebonds, tous remélangés dans les mêmes listes que les contacts actifs.
  • Deux couches de conformité grand groupe. La SNCF et les CFF apportaient leurs propres workflows de cybersécurité, de RGPD et de validation interne par-dessus des opérations marketing B2C standard.

Les risques étaient tout aussi clairs : perdre la capacité d'envoyer des communications de masse, dégrader la réputation du domaine avec des données de mauvaise qualité, ou se retrouver avec un workflow plus lourd que celui qu'on remplaçait.

La demande : reconstruire la stack data et email sur HubSpot + Brevo, nettoyer des années de bruit historique, et livrer avant la prochaine fenêtre de campagne, sans interrompre un seul envoi.

● La solution Cashmyrr

Pourquoi HubSpot + Brevo (et pas Sarbacane v2)

Sarbacane gérait l'envoi correctement, mais ne réglait pas le problème de fond : le CRM de TGV Lyria était une collection d'imports, pas une base de données. Il nous fallait deux choses à la fois :

  1. Un socle CRM qui tient un modèle de contact propre et structuré, avec segmentation native, étapes du cycle de vie, relations entreprises parent/enfant et traçabilité RGPD complète. HubSpot.
  2. Une plateforme d'envoi en masse dotée d'outils de délivrabilité solides, d'une authentification native (DKIM/SPF/DMARC), du warming d'IP et d'une synchronisation bidirectionnelle avec le CRM. Brevo.

Concrètement, cette combinaison nous a permis de livrer trois choses que Sarbacane seul n'aurait jamais pu :

  • Une source de vérité unique pour les trois marchés, avec opt-ins, étapes du cycle de vie et champs de langue alignés.
  • Un sous-domaine d'envoi dédié (newsletter.lyria.com) qui protège la réputation du domaine principal quel que soit le volume de campagnes.
  • Une synchronisation bidirectionnelle entre Brevo (envois, rebonds, désabonnements) et HubSpot (la source de vérité) toutes les ~6 heures, avec suppression pilotée par workflow pour maintenir une délivrabilité élevée.

● Étapes

L'architecture en production

La nouvelle stack compte quatre couches :

  1. Une base de staging (SQL + MongoDB) où les fichiers CSV/Excel bruts sont normalisés avant de toucher HubSpot.
  2. Un workflow d'ingestion n8n qui fait des upserts intelligents dans HubSpot, en vérifiant ce qui existe déjà, en ne mettant à jour que les champs manquants, sans jamais écraser une bonne donnée par une moins bonne.
  3. HubSpot comme source de vérité structurée, avec des comptes B2B parent/enfant, des étapes du cycle de vie et une auto-segmentation par source.
  4. Brevo sur un sous-domaine dédié pour l'envoi en masse, avec synchronisation bidirectionnelle native vers HubSpot.

Les seules couches sur mesure sont le pipeline de staging et le contrôleur d'ingestion n8n. Tout ce qui est en aval est du HubSpot et du Brevo natifs.

La migration, étape par étape

Étape 1 - Des fichiers plats à une zone de staging contrôlée

Importer les CSV historiques directement dans HubSpot aurait incrusté des années de bruit dans le nouveau système. À la place, nous avons fait transiter tout par une couche de staging SQL + MongoDB.

Des pipelines d'agrégation MongoDB ($project, $unionWith, $lookup) ont fait le gros du travail :

  • Normalisation : opt-ins ramenés à un seul booléen, dates standardisées, champs alignés entre les sources FR/DE/EN.
  • Exclusion dynamique : les e-mails signalés dans les collections complaints et npai étaient filtrés avant d'atteindre HubSpot.
  • Nettoyage des formats : les entrées numéro-de-téléphone-en-guise-d'e-mail (0606060606@icloud.com) et autres adresses tueuses de délivrabilité étaient supprimées à ce stade.

Seules les données qui passaient le staging poursuivaient vers l'aval.

Étape 2 - Upserts intelligents dans HubSpot

Nous ne faisions pas confiance à un bouton « Tout importer » avec un CRM aussi chargé. Nous avons construit un workflow n8n comme contrôleur d'ingestion :

  • Le workflow interroge HubSpot par lots via l'API.
  • Pour chaque e-mail, il vérifie si le contact existe déjà.
  • Il ne met alors à jour que les champs manquants ou crée un nouveau contact — sans jamais écraser une meilleure donnée par une moins bonne.

Résultat : TGV Lyria s'est retrouvé avec un CRM enrichi, pas écrasé.

Étape 3 - Un sous-domaine dédié + authentification complète

Les campagnes de masse ont été ré-ancrées sur une infrastructure qui protège le domaine principal :

  • Sous-domaine dédié : newsletter.lyria.com, séparé du courrier transactionnel et corporate.
  • Stack d'authentification complète : DKIM, SPF, DMARC configurés pour un placement en boîte de réception maximal.
  • Synchronisation bidirectionnelle : synchro native Brevo ↔ HubSpot toutes les ~6 heures, pour que les hard bounces et les désabonnements de Brevo reviennent automatiquement dans HubSpot.
  • Des workflows de suppression dans Brevo qui retirent les hard et soft bounces avant chaque premier envoi.

Étape 4 - Nettoyer la base historique avec clustering + IA

Des années d'imports avaient créé un problème de doublons flous qu'une simple déduplication par e-mail ne pouvait pas résoudre :

  • jean.dupont@company.com vs j.dupont@company.fr
  • Fautes de frappe et orthographes alternatives sur les prénoms/noms
  • Profils B2B/B2C mélangés

Nous avons superposé trois étapes :

1. Clustering déterministe - regroupement des doublons potentiels selon trois clés : e-mail exact, domaine + nom, téléphone + nom. Cela a produit des clusters ciblés sans encore rien fusionner.

2. Scoring assisté par IA sur la zone grise - pour les paires dont la similarité initiale se situait entre 0,60 et 0,84, nous avons utilisé GPT pour évaluer la similarité sémantique : surnom vs nom complet, fautes typiques, prénom/nom inversés, noms abrégés. GPT renvoyait un score de confiance, et seules les paires à ≥ 0,85 étaient fusionnées automatiquement. Tout ce qui était en dessous restait dans une file de revue manuelle.

3. Règles de fusion intelligentes - champ par champ, jamais destructives :

  • Conserver l'e-mail le plus valide.
  • Conserver l'étape du cycle de vie la plus avancée (Customer > Opportunity > Lead).
  • Préserver le propriétaire existant là où c'était pertinent.

Étape 5 - Un modèle de comptes B2B parent/enfant

Pour les données B2B, nous avons restructuré autour d'un modèle d'entreprise parent/enfant :

  • Les entreprises partageant le même root_domain (ex. hermes.com) étaient identifiées.
  • Un script désignait ensuite une entreprise parent (typiquement le siège) et reliait les entités locales en tant qu'entreprises enfants.

Les commerciaux ont obtenu une vue globale des comptes clés sans perdre le contexte des contacts locaux.

Étape 6 - Corriger les données à la source

Nettoyer les données historiques est une chose. Stopper la nouvelle pollution est ce qui rend l'effort durable.

Plusieurs entrées « maison » injectaient des contacts de faible qualité directement dans HubSpot - formulaires en pur HTML, barres de recherche et autres fonctionnalités du site qui déclenchaient une création automatique de contact. Résultat : des milliers de « Organic Leads » sans info exploitable et sans consentement. Des cookies marketing étaient aussi déposés avant l'opt-in de l'utilisateur, posant des problèmes de RGPD.

Le point de douleur le plus sévère était structurel : HubSpot traitait chaque champ de saisie comme une source de leads. Requêtes de recherche, connexions au portail, soumissions de formulaire de contact, tout créait de nouveaux contacts et entreprises dans le CRM.

Nous avons corrigé cela en deux mouvements :

1. Verrouillage de l'API. Désactivation de la capture « Non-HubSpot Forms » de HubSpot. Seuls des points de contact intentionnels et contrôlés peuvent désormais créer des contacts.

2. Tracking conditionnel via CookieFirst. Réécriture de l'intégration GTM pour que le script de tracking HubSpot et le cookie hubspotutk ne se déclenchent qu'après consentement explicite via la CMP CookieFirst.

En plus de cela, chaque nouveau contact est auto-segmenté par source et intention via des workflows HubSpot : un contact issu du formulaire newsletter est taggé comme cible B2C ; un contact venant de Salesforce ou doté d'un Owner spécifique est taggé B2B. Le reporting et la pertinence des campagnes démarrent propres dès la création du contact.

Les garde-fous : la documentation comme livrable

Un projet réparti entre des workflows n8n, des scripts Python/SQL, des pipelines MongoDB et de la configuration HubSpot a un mode de défaillance critique : la connaissance qui ne vit que dans la tête des gens.

Nous avons traité la documentation comme un livrable à part entière dès le premier jour :

  • Documentation technique en Markdown décrivant le quoi (architecture, workflows, scripts) et le comment, avec des extraits JSON pour les workflows n8n clés, les requêtes MongoDB et leur logique sous-jacente. Tout développeur qui rejoint plus tard peut comprendre le système sans le rétro-concevoir.
  • Des runbooks de maintenance, procédures pas à pas pour la vérification des logs de synchro Brevo, la gestion des nouveaux doublons et autres opérations récurrentes. Pas des notes théoriques, de vrais playbooks du quotidien.
  • La traçabilité des décisions, règles de fusion et seuils d'IA documentés en langage clair. Si une fusion de contacts est un jour contestée, la logique sous-jacente est auditable.

● Résultat

Ce qui a été livré, le résultat en production

Zéro interruption de campagne. La migration complète a été livrée sans sauter un seul envoi, malgré le temps fort commercial stratégique déjà au calendrier.

Une fondation structurée sur trois marchés et trois langues, prête pour des campagnes à fort volume sur Brevo, avec opt-ins, étapes du cycle de vie et champs de langue alignés entre FR / FR-CH / DE-CH.

Une infrastructure email protégée, sous-domaine dédié, DKIM/SPF/DMARC complets, synchro bidirectionnelle native avec HubSpot. Réputation du domaine isolée du volume de campagnes.

Un risque de pollution des données nettement réduit, grâce au staging, à la déduplication déterministe + IA, et au verrouillage à la source des entrées web non contrôlées.

Un modèle de comptes B2B qui fait remonter les relations entreprises parent/enfant et permet des vues par compte clé.

Une documentation et des runbooks clairs qui rendent les équipes internes opérationnellement autonomes et résilientes aux changements de personnel.

Cashmyrr a su proposer un plan d'action efficace, réaliste et aligné avec nos contraintes de timing, notamment une campagne commerciale stratégique déjà au calendrier.

Nous avons bénéficié d'une double expertise : marketing et pilotage de projet avec Antoine, et un accompagnement technique pointu avec Telmo.

Disponibilité, expertise et agilité dans les projets. Il y a un vrai sentiment de construire aux côtés du client.

— TGV Lyria

Ce que nous avons appris en migrant du B2C à fort volume sur HubSpot + Brevo

Ce qui a marché

  • Le staging avant HubSpot, à chaque fois. Traiter HubSpot comme la destination, pas le moteur de traitement, a été la décision unique qui a rendu le reste du projet gérable. Nettoyer les champs, normaliser les opt-ins et appliquer les listes de suppression dans MongoDB est rapide, peu coûteux et auditable. Nettoyer les mêmes données dans HubSpot aurait signifié des workflows par-dessus des workflows, des performances moindres et un coût plus élevé.
  • L'IA sur la zone grise, pas sur tout. Le clustering déterministe a traité la majorité des doublons. GPT n'était invoqué que pour la bande intermédiaire ambiguë (similarité 0,60-0,84). Coût prévisible, comportement prévisible, et une seule bande de décisions à auditer.
  • n8n comme contrôleur d'ingestion. Des upserts intelligents via l'API battent n'importe quel import en masse. Nous avons choisi quoi mettre à jour, quoi laisser tel quel, et comment journaliser chaque opération, ce qu'un import HubSpot par défaut ne donne pas.
  • La documentation comme livrable, pas comme après-coup. Une doc technique en Markdown et des runbooks opérationnels ont rendu la passation ennuyeuse, ce qui est exactement ce qu'on veut sur un projet aussi distribué.

Les limites que nous avons rencontrées

  • Les comportements par défaut de HubSpot nécessitent un verrouillage actif. Tel quel, HubSpot crée des contacts à partir de sources que vous ne destiniez pas à être des sources de leads. La capture Non-HubSpot Forms, le script de tracking, le cookie déposé avant le consentement, tout cela a demandé une configuration explicite. Si vous ne traitez pas ce point dès le premier jour, votre CRM « propre » se resalit en quelques semaines.
  • La synchro native Brevo ↔ HubSpot tourne toutes les ~6 heures. Suffisant pour la cadence des campagnes marketing, un peu juste pour des boucles de feedback rapides sur les problèmes d'envoi. Nous avons compensé avec des workflows de suppression côté Brevo en amont de chaque premier envoi.
  • Les sources multilingues ne se normalisent pas toutes seules. Les données FR/DE/EN arrivaient avec leurs propres vocabulaires d'opt-in et formats de date. Les règles de normalisation devaient être explicites, langue par langue, dans la couche de staging, jamais supposées.

● Questions fréquentes