Retour aux projets
Live SaaS B2B / B2G · Accessibilité web

EEL — Scanner d'accessibilité

Scanner WCAG / EAA / RGAA multi-moteurs adressé en cold email à un pool de 22 184 collectivités françaises et entreprises européennes.

Contexte

L'European Accessibility Act entre en application en juin 2025. À partir de cette date, des dizaines de milliers de sites européens deviennent légalement obligés d'être conformes WCAG 2.1 AA — sous peine d'amendes par pays (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 des rapports personnalisés, 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 HTML du rapport 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 résout ce problème en automatisant intégralement le pré-audit : chaque prospect reçoit un rapport individualisé avec son score, ses violations critiques, et l'amende applicable à son pays — le tout pour un coût marginal proche de zéro.

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 — c'est ce qui permet de scanner et adresser 30 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é — 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 — chiffre absurde car 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 batche par 30/jour pour passer sous les filtres anti-spam d'Instantly. C'est une vraie cible B2G avec un argumentaire spécifique (amende Arcom + FIPHFP).

Résultats

22 184
prospects collectivités INSEE
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 →