← Retour au site
Étude de cas

Automatiser l'onboarding client : de 2h de boulot répétitif à 0

Comment on a construit un système d'automation qui transforme un nouveau paiement Stripe en client parfaitement onboardé en 30 secondes.

30s
Temps total d'exécution
2h
Économisées par client
0
Erreurs humaines

Le contexte

Un nouveau client signe. Génial ! Sauf que maintenant il faut : lui envoyer le questionnaire d'onboarding, créer sa page dans Notion, l'ajouter au CRM, générer ses accès, planifier le kick-off, lui envoyer le guide de démarrage...

Bref, 2 heures de tâches répétitives où tu te dis "un robot pourrait faire ça".

Spoiler : oui, un robot peut faire ça.

Le problème initial

  • Agence avec 5-10 nouveaux clients par mois
  • Chaque onboarding = 2h de tâches administratives
  • Process inconsistant (on oublie des étapes, chaque personne fait différemment)
  • Les clients attendent parfois 48h avant de recevoir leurs infos

Avant d'écrire une ligne de code, on a passé plusieurs jours à observer l'onboarding réel pour voir comment circulaient les infos entre Stripe, Notion, le CRM et les emails. Cette cartographie nous a servi de base pour remettre de l'ordre.

La réalité terrain

10 clients/mois × 2h = 20h/mois de travail répétitif. Sans méthode, ça mange du temps et ça crée des écarts d'expérience client.

La solution : un système d'automation complet

On a construit un système qui automatise 100% de l'onboarding client, de la réception du paiement Stripe jusqu'à l'envoi de l'email de bienvenue personnalisé avec le lien Calendly.

La méthode en action

Observer le réel (audit du process manuel) → Mettre de l'ordre (carto des outils, checklists) → Construire le système (automations + docs). Chaque étape a été validée avec l'équipe avant de passer à la suivante.

Le flow global

1

Client paie sur Stripe

Le client achète une offre (Starter, Pro ou Enterprise). Stripe déclenche un webhook automatiquement.

2

Python reçoit les données

Le script Python récupère les infos du client (nom, email, offre achetée) et lance le process d'automation.

3

L'IA génère l'email personnalisé

Groq (Llama 3.1) rédige un email de bienvenue adapté à l'offre du client en 2-3 secondes.

4

Création automatique dans Notion

Une page projet structurée est créée avec toutes les infos du client, prête pour l'équipe.

5

Ajout au CRM (HubSpot)

Le client est ajouté au CRM avec un deal créé et une tâche assignée au Account Manager.

6

Génération du lien Calendly

Un lien personnalisé est créé pour que le client puisse planifier son kick-off call.

7

Envoi de l'email via SendGrid

L'email de bienvenue + guide PDF + lien Calendly sont envoyés. Total : 30 secondes.

La technique expliquée

Étape 1 : Le webhook Stripe (le déclencheur)

C'est quoi un webhook ?

Un webhook, c'est comme une sonnette. Quand un événement se produit (ici, un paiement Stripe), Stripe "sonne" à une URL que tu lui as donnée. Ton système reçoit la notification et peut agir automatiquement.

Quand un client paie, Stripe envoie automatiquement une requête POST à notre serveur Python avec toutes les infos :

webhook.py
# Route Flask qui reçoit le webhook Stripe
@app.route('/webhook/stripe', methods=['POST'])
def handle_stripe_webhook():
    """Cette fonction est appelée automatiquement par Stripe"""

    # Récupération des données du paiement
    data = request.json
    client_email = data['customer_email']
    client_name = data['customer_name']
    offer_type = data['product_name']  # "Starter", "Pro", "Enterprise"

    # Lancement de l'automation
    run_onboarding_automation(client_name, client_email, offer_type)

    return {"status": "success"}, 200

Étape 2 : L'IA génère l'email de bienvenue

On refuse d'envoyer le même email générique à tout le monde. Un client qui achète l'offre Starter n'a pas les mêmes besoins qu'un client Enterprise.

L'IA génère un email adapté automatiquement en 2-3 secondes.

Pourquoi Groq et pas ChatGPT ?

Groq est beaucoup plus rapide (2-3 secondes vs 10-15 secondes pour GPT-4). Pour une automation, la vitesse compte. On utilise le modèle Llama 3.1 qui est gratuit jusqu'à un certain volume et largement suffisant pour ce cas d'usage.

ai_email.py
def generate_welcome_email_with_ai(client_name, offer_type):
    """Appelle l'API Groq pour générer un email personnalisé"""

    prompt = f"""Tu es un Account Manager bienveillant. Rédige un email de bienvenue pour :

Client : {client_name}
Offre : {offer_type}

Ton email doit :
- Remercier chaleureusement
- Expliquer les prochaines étapes (questionnaire, kick-off)
- Être concis (150 mots max)
- Adopter un ton pro mais friendly

Ne mets pas de formule de politesse finale.
"""

    # Appel API Groq
    response = requests.post(
        "https://api.groq.com/openai/v1/chat/completions",
        headers={
            "Authorization": f"Bearer {GROQ_API_KEY}",
            "Content-Type": "application/json"
        },
        json={
            "model": "llama-3.1-70b-versatile",
            "messages": [{"role": "user", "content": prompt}],
            "temperature": 0.7  # Un peu de créativité
        }
    )

    return response.json()['choices'][0]['message']['content']

Exemple d'email généré :

Étape 3 : Création automatique dans Notion

Chaque client = une page Notion structurée avec toutes les infos nécessaires pour l'équipe.

L'API Notion, c'est quoi ?

Notion expose une API qui permet à ton code Python de créer/modifier des pages Notion automatiquement. C'est comme si tu cliquais dans l'interface, mais en automatique.

notion_sync.py
def create_notion_page(client_name, client_email, offer_type):
    """Crée automatiquement une page Notion pour le client"""

    response = requests.post(
        "https://api.notion.com/v1/pages",
        headers={
            "Authorization": f"Bearer {NOTION_API_KEY}",
            "Content-Type": "application/json",
            "Notion-Version": "2022-06-28"
        },
        json={
            "parent": {"database_id": NOTION_DATABASE_ID},
            "properties": {
                "Nom": {"title": [{"text": {"content": client_name}}]},
                "Email": {"email": client_email},
                "Offre": {"select": {"name": offer_type}},
                "Statut": {"select": {"name": "Onboarding en cours"}}
            }
        }
    )

    return response.json()

Ce que ça évite : 15 min de copier-coller manuel + risque d'oublier des sections.

Étape 4 : Les autres intégrations (CRM + Calendly + Email)

Le même principe s'applique pour :

  • HubSpot API : Ajouter le client au CRM avec un deal + une tâche assignée
  • Calendly API : Générer un lien de planification personnalisé
  • SendGrid API : Envoyer l'email avec le guide PDF en pièce jointe

Toutes ces actions se font en parallèle. Total : 30 secondes.

La stack technique

Voici les outils qu'on a utilisés pour construire ce système :

Python + Flask
Backend qui reçoit le webhook Stripe et orchestre toute l'automation. Simple, rapide, beaucoup de librairies disponibles.
Stripe Webhooks
Déclencheur de l'automation. Dès qu'un client paie, Stripe notifie notre système automatiquement.
Groq (Llama 3.1)
Génération d'emails personnalisés en 2-3 secondes. Gratuit, ultra rapide, qualité suffisante pour ce use case.
Notion API
Création automatique des pages clients avec toutes les infos structurées pour l'équipe.
HubSpot API
CRM commercial. Le client est ajouté automatiquement avec un deal et une tâche assignée.
Calendly API
Planification du kick-off. Génère un lien personnalisé qui pré-remplit les infos du client.
SendGrid API
Envoi des emails avec délivrabilité optimale. Support des pièces jointes (guide PDF).
Railway / Render
Hébergement du script Python. Pas cher (~10€/mois), facile à déployer, toujours disponible.

Les résultats

Avant l'automation

  • 2h de travail manuel par client
  • Emails envoyés avec 24-48h de délai
  • Oublis fréquents (guide pas envoyé, CRM pas mis à jour)
  • Process différent selon qui gère l'onboarding

Après l'automation

  • 30 secondes (temps machine)
  • Emails envoyés instantanément
  • 0 oubli (tout est systématique)
  • Process identique pour tous les clients

ROI mensuel (pour 10 clients/mois)

20h
Économisées par mois
0.5
ETP libéré
~50€
Coût mensuel total
Le calcul du ROI

20h économisées/mois = 0.5 ETP libéré pour du vrai conseil client. Si on valorise ce temps à 40€/h, ça fait 800€/mois d'économies pour un coût d'infrastructure de ~50€/mois. ROI : 16x.

Ce qu'on a appris

1. L'IA n'est pas magique

Le prompt doit être précis pour avoir des résultats cohérents. On a testé 15 versions avant de trouver le bon équilibre entre ton friendly et professionnel.

2. Commencer simple

On a d'abord automatisé juste l'email. Puis Notion. Puis le reste. Pas tout d'un coup. Chaque étape validée avant de passer à la suivante.

3. La gestion d'erreurs est critique

Si Notion plante, le process doit continuer quand même. On log l'erreur et on crée la page manuellement plus tard. Mais l'email part quoi qu'il arrive.

error_handling.py
try:
    create_notion_page(client_name, client_email, offer_type)
except Exception as e:
    # Logger l'erreur mais continuer le process
    log_error(f"Notion failed: {e}")
    send_slack_alert(f"Alerte : création Notion impossible pour {client_name}")
    # L'automation continue (email, CRM, etc.)

4. Tester en conditions réelles

Pendant deux semaines, on a gardé l'ancien onboarding manuel tout en lançant l'automation sur 3 clients volontaires. Chaque action automatique était doublée d'une vérification humaine pour comparer les résultats. C'est comme ça qu'on a ajusté le ton de l'email, l'ordre des étapes et le timing des invitations Calendly.

Le code simplifié (structure globale)

Voici la structure globale du système (code simplifié pour la lisibilité) :

automation.py
from flask import Flask, request
import requests
import json

app = Flask(__name__)

# Webhook Stripe : reçoit la notification de paiement
@app.route('/webhook/stripe', methods=['POST'])
def handle_stripe_webhook():
    """Appelée automatiquement par Stripe quand un client paie"""

    # 1. Récupérer les données du paiement
    data = request.json
    client_email = data['customer_email']
    client_name = data['customer_name']
    offer_type = data['product_name']

    # 2. Générer l'email avec l'IA
    welcome_email = generate_welcome_email_with_ai(client_name, offer_type)

    # 3. Créer la page Notion
    create_notion_page(client_name, client_email, offer_type)

    # 4. Ajouter au CRM
    add_to_crm(client_email, client_name, offer_type)

    # 5. Générer le lien Calendly
    calendly_link = generate_calendly_link(client_email, client_name)

    # 6. Envoyer l'email
    send_email(
        to=client_email,
        subject="Bienvenue chez bigxbang",
        body=welcome_email,
        calendly_link=calendly_link
    )

    return {"status": "success"}, 200
Ce code est simplifié

En production, on ajoute : gestion des erreurs, vérification de la signature Stripe (sécurité), logs pour tracker chaque étape, retry logic (réessayer si ça plante), et tests automatisés.

bigxbang

On automatise les tâches répétitives pour libérer ce qui fait de toi un humain : penser, créer, décider.