Chargement…
Chargement…
Case study orienté impact: objectif métier clair, exécution maîtrisée, preuve ROI et plan de delivery traçable.
Impact principal
−90% temps prospection
Valeur mesurable sur le flux critique
ROI business
3 deals signés le 1er mois
Référence client observée en production
Time-to-delivery
3 semaines
Cycle complet cadrage → go-live
Scope livré
6 livrables
Briques prêtes à exploiter par les équipes
Avant
3 jours/semaine prospection manuelle — 8 à 12 leads/semaine mal qualifiés
Après
1 run automatisé de 20 min — 40 leads scorés prêts à contacter
Aperçu produit
40
Leads générés
31
Score ≥ 70
12
Hot leads
12s
Temps run
31
Exportés CRM
Entreprise
Secteur
Contact
Score IA
Signal
Action
Fintech Capital SAS
€2.4M
Marie Dupont · CEO
PropTech Paris
€890K
Thomas Laurent · CTO
LegalTech Lyon
€1.1M
Camille Moreau · DG
HealthAI Bordeaux
€430K
Pierre Martin · CFO
RetailOS Nantes
€2.1M
Sophie Bernard · CEO
Architecture système
Scraping
Playwright · anti-detect
Enrichissement IA
CA · stack · effectif
Scoring
Modèle calibré client
Déduplication
Cross-sources · fuzzy
Export
CRM / CSV / API
Code — extrait anonymisé
1# Anti-detection scraping — human-like behavior simulation2class StealthScraper:3 def __init__(self):4 self.proxy_pool = ProxyRotator(providers=["residential"])5 self.browser = playwright.chromium.launch(6 args=["--disable-blink-features=AutomationControlled"]7 )89 async def scrape_profile(self, url: str) -> CompanyData:10 # Randomize viewport & user agent11 context = await self.browser.new_context(12 viewport=random.choice(VIEWPORTS),13 user_agent=self.proxy_pool.get_ua(),14 )15 # Human-like delays (gaussian distribution)16 await asyncio.sleep(random.gauss(mu=2.1, sigma=0.6))1718 page = await context.new_page()19 await page.goto(url, wait_until="networkidle")2021 # Simulate scroll & mouse movement22 await self._human_scroll(page)23 return await self._extract_company_data(page)
1# Lead scoring — calibrated on client's historical deals2import lightgbm as lgb3from sklearn.preprocessing import LabelEncoder45class LeadScorer:6 FEATURES = [7 "revenue_estimated", "headcount", "tech_stack_match",8 "funding_signal", "hiring_signal", "industry_fit",9 "decision_maker_detected", "days_since_founded",10 ]1112 def __init__(self, model_path: str):13 self.model = lgb.Booster(model_file=model_path)14 self.enc = LabelEncoder()1516 def score(self, lead: EnrichedLead) -> int:17 features = [getattr(lead, f, 0) for f in self.FEATURES]18 proba = self.model.predict([features])[0]19 # Scale to 0–100, clamp20 return min(100, max(0, int(proba * 100)))2122 def batch_score(self, leads: list[EnrichedLead]) -> list[ScoredLead]:23 matrix = [[getattr(l, f, 0) for f in self.FEATURES] for l in leads]24 probas = self.model.predict(matrix)25 return [26 ScoredLead(**lead.__dict__, score=int(p * 100))27 for lead, p in zip(leads, probas)28 ]
Delivery Roadmap
Discovery
Cadrage métier, collecte contraintes et architecture cible
Build
Implémentation coeur produit et intégrations prioritaires
Scale
Hardening: perf, fiabilité, monitoring et tests de charge
Launch
Go-live encadré, transfert, documentation et KPI de suivi
Phase 01 · Discovery
Phase 02 · Build
Phase 03 · Scale
Phase 04 · Launch
Démo interactive
/ testez la technologieLe problème
L'équipe commerciale de 2 personnes passait 3 jours par semaine à prospecter manuellement : chercher des entreprises cibles sur LinkedIn Sales Navigator, les croiser avec Pappers et Societe.com pour vérifier l'effectif et le chiffre d'affaires, enrichir les fiches à la main dans HubSpot, et finalement scorer mentalement leur pertinence. Le résultat : 8 à 12 leads qualifiés par semaine, souvent mal qualifiés, pour 2 jours de travail. L'équipe n'avait plus de temps pour vendre.
La solution
Pipeline de prospection entièrement automatisé : scraping multi-sources (LinkedIn Sales Navigator + Pappers + Societe.com) avec rotation de proxies résidentiels et simulation de comportement humain (délais gaussiens, scroll aléatoire). Enrichissement IA par batch : CA estimé, effectif réel, stack technologique détectée, signaux d'achat (levée de fonds, recrutement actif, changement de direction). Scoring LightGBM calibré sur les 80 deals historiques du client. Déduplication cross-sources (fuzzy matching à 0.85) et export direct vers HubSpot ou CSV.
Défis techniques
Anti-détection LinkedIn : rotation de 40 proxies résidentiels (IPv4 datacenter bannis d'office), fingerprinting canvas/WebGL randomisé, délais inter-actions issus d'une distribution gaussienne (μ=2.1s, σ=0.6s) — 0 blocage sur 6 semaines de production
Déduplication cross-sources : "Fintech Capital SAS", "FINTECH CAPITAL" et "Fintech Capital" désignent la même entreprise. Solution : normalisation + distance Levenshtein normalisée + matching phonétique (Soundex FR) combinés, seuil empirique à 0.85 sur le jeu de test
Calibration du modèle LightGBM sur seulement 80 deals historiques : sur-apprentissage probable. Solution : cross-validation stratifiée, feature importance pour identifier les 5 features discriminantes (levée de fonds, effectif 10-50, stack No-Code détectée, décideur identifié, secteur match)
Retour client
Avant je passais mes mardis et mercredis sur LinkedIn à copier-coller des infos dans HubSpot. Maintenant je lance le run le matin, j'ai 40 fiches complètes à 9h30 avec un score et les signaux détectés. On a signé 3 deals le premier mois avec des leads que le système avait trouvés.
Nom modifié pour respecter le NDA du client.
Impact clé
Stack technique