Retour aux projets
SaaS B2B / B2G · Accessibilité web

EEL : Scanner d'accessibilité

Un pipeline qui scanne un site sur 5 moteurs WCAG / EAA / RGAA, génère un rapport personnalisé, l'héberge, puis l'envoie en cold email. 9 étapes automatisées, de la cible au signal d'intérêt.

Contexte

L'European Accessibility Act entre en application en juin 2025. À partir de cette date, des dizaines de milliers de sites européens sont légalement tenus d'être conformes au WCAG 2.1 AA, sous peine d'amendes qui varient d'un pays à l'autre (jusqu'à 50k€/an pour les collectivités françaises au titre du RGAA).

J'ai construit EEL pour automatiser l'identification de ces sites non conformes, générer un rapport personnalisé pour chacun et les transformer en prospects qualifiés. Le pipeline complet va du scraping public à l'envoi d'email A/B testé, en passant par la génération du rapport HTML et son hébergement sur Cloudflare.

Le challenge métier

Un audit d'accessibilité manuel coûte 3 000 à 8 000€ et prend 2 à 5 jours par site. Impossible de prospecter à grande échelle dans ces conditions. EEL automatise intégralement ce pré-audit : chaque prospect reçoit un rapport individualisé avec son score, ses violations critiques et l'amende applicable à son pays, pour un coût marginal proche de zéro. La machine exécute tout le travail répétitif ; je ne garde la main que sur la stratégie, c'est-à-dire les angles à tester et les segments à prioriser.

Le flow opérationnel en 9 étapes

EEL transforme un CSV de prospects en signaux d'intérêt qualifiés. Chaque étape passe le flambeau à la suivante sans intervention humaine, et le pipeline traite ainsi 130 prospects par jour de façon répétable :

  1. 1. Acquisition : import du CSV (22k+ collectivités INSEE enrichies, ou entreprises EU).
  2. 2. Crawl : découverte des pages du site cible (sitemap + suivi des liens internes, max 5 pages).
  3. 3. Scan parallèle : 5 moteurs WCAG lancés simultanément (axe-core, Lighthouse, pa11y, IBM, QualWeb).
  4. 4. Normalisation : cross-reference max-per-tool avec niveaux de confidence (high/medium/low selon le nombre de moteurs qui détectent la violation).
  5. 5. Analyse contextuelle : GPT-4o-mini lit le HTML pour repérer les vrais blocages métier (formulaires inaccessibles, panier KO, etc).
  6. 6. Génération du rapport : HTML personnalisé FR/EN avec 3 variants d'angle (legal, business, competitive).
  7. 7. Hébergement : push sur Cloudflare Pages, URL unique par prospect (eel.moonlist.tech/rapport/...).
  8. 8. Cold email : push Instantly v2 avec 54 templates A/B (9 angles × 2 langues × 3 steps J0/J+3/J+7).
  9. 9. Signal de retour : le clic sur l'une des 3 URLs renvoie l'angle qui a résonné, une donnée précieuse pour la suite du funnel.
flowchart TB A["1. Acquisition
CSV 22k+ prospects INSEE"] A --> B["2. Crawl
sitemap + liens internes"] B --> C["3. Scan parallèle
axe-core / Lighthouse / pa11y / IBM / QualWeb"] C --> D["4. Normalisation
cross-reference max-per-tool"] D --> E["5. Analyse contextuelle
GPT-4o-mini sur HTML"] E --> F["6. Rapport HTML
3 variants (legal / business / competitive)"] F --> G["7. Hébergement Cloudflare Pages
URL unique par prospect"] G --> H["8. Cold email Instantly v2
54 templates A/B en 3 steps"] H --> I["9. Signal de retour
click URL = angle qui résonne"]

Stack technique

Scanner Node.js
  • Puppeteer (headless Chrome)
  • axe-core, Lighthouse, pa11y
  • IBM accessibility-checker
  • QualWeb
Normalisation
  • Cross-reference max-per-tool
  • Niveaux high/medium/low confidence
  • GPT-4o-mini pour contexte HTML
Reporting
  • HTML responsive FR/EN
  • 3 variants (legal / business / competitive)
  • Cloudflare Pages + domaine custom
Outreach
  • Instantly API v2 (Bearer token)
  • 54 templates A/B (9 × 2 × 3 steps)
  • Dashboard Express.js pour orchestration

3 décisions d'architecture clés

1. Cross-reference "max-per-tool" plutôt que somme

Premier bug rencontré : la somme naïve des violations des 5 moteurs donnait 2 003 violations pour un seul site, un chiffre absurde puisque les moteurs détectent souvent les mêmes problèmes. La logique max(violations par outil) donne 584 violations dédupliquées, avec un niveau de confiance hiérarchisé : si 5/5 outils détectent un problème = high confidence, 1/5 = low confidence.

2. Trois versions du rapport, indexées par "clé d'angle"

Pour le même prospect et la même donnée brute (score WCAG, violations détectées), le système génère trois fichiers HTML distincts stockés sur Cloudflare Pages avec une URL chacun. Chaque version est un rendu indexé par une clé d'angle marketing :

Les trois URLs sont insérées dans la séquence email à des emplacements différents (J0 / J+3 / J+7 par exemple). Quel lien le prospect clique = quel angle a résonné chez lui. C'est une donnée précieuse réinjectée dans le funnel pour les relances suivantes ou pour qualifier le lead.

3. Pool collectivités séparé via API Service Public

Pour la France, j'ai créé un pipeline distinct qui extrait les 22 184 collectivités françaises (EPCI, départements, régions, mairies) depuis l'API api-lannuaire.service-public.gouv.fr, les enrichit avec INSEE (population, code postal), puis les répartit sur plusieurs adresses d'expédition pour rester sous les filtres anti-spam d'Instantly, à un rythme d'environ 130 prospects contactés par jour. C'est une vraie cible B2G avec un argumentaire spécifique (amende Arcom + FIPHFP).

Le système en chiffres

9
étapes 100% automatisées
5 / 5
moteurs WCAG parallélisés
54
templates emails A/B
FR / EN
rapports localisés

Lien direct avec Salesforce

EEL est un mini-Marketing-Cloud doublé d'un Sales Cloud. Voici la cartographie 1-pour-1 :

Lessons learned (honnêtes)

← Tous les projets Projet suivant : ALLIN →