Auth0 + CRM (HubSpot, Salesforce) : synchroniser identité et pipeline commercial

Enrichir votre CRM avec les données d'authentification Auth0 : créer des contacts au signup, tracker les logins, identifier les churns et personnaliser les campagnes.

Par Auth0.Expert · 2025-02-28 · 10 min de lecture

HubSpot Salesforce CRM

Auth0 + CRM : synchroniser identité et commercial

TL;DR

Les données d'authentification sont précieuses pour le commercial et le marketing : date de première connexion, fréquence d'usage, plan actuel, dernière activité. Ce guide connecte Auth0 à HubSpot et Salesforce.

---

Données d'identité utiles pour le CRM

Voici les principales données Auth0 qui peuvent enrichir vos process CRM pour mieux qualifier et engager vos clients.

| Donnée Auth0 | Usage CRM | |-------------|-----------| | Email vérifié | Qualification du contact | | Date signup | Début du trial | | Nombre de logins | Score d'engagement | | Dernière connexion | Détection churn | | Méthode auth (Google/SAML) | Indique une organisation | | app_metadata.plan | Segmentation des clients |

---

HubSpot : créer un contact au signup

Ce code permet de créer ou mettre à jour automatiquement un contact HubSpot à chaque enregistrement d'utilisateur sur Auth0, afin de garantir que chaque nouvel utilisateur est suivi dès son premier jour.

// Action: Post User Registration
exports.onExecutePostUserRegistration = async (event, api) => {
  const hubspotToken = event.secrets.HUBSPOT_ACCESS_TOKEN;

  // Créer/mettre à jour le contact HubSpot
  await fetch('https://api.hubapi.com/crm/v3/objects/contacts', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${hubspotToken}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      properties: {
        email: event.user.email,
        firstname: event.user.given_name,
        lastname: event.user.family_name,
        auth0_user_id: event.user.user_id,
        signup_date: new Date().toISOString(),
        auth_method: event.connection.strategy, // 'google-oauth2', 'auth0', etc.
        lifecyclestage: 'lead',
        hs_lead_status: 'NEW',
        source_app: event.client.name,
      },
    }),
  }).catch(err => {
    // Ne jamais bloquer le login si HubSpot est down
    console.error('HubSpot error (non-blocking):', err.message);
  });
};

Ce code automatise la création du contact HubSpot lors d'un nouveau signup Auth0 et centralise l'info client dans le CRM.

---

HubSpot : tracker les connexions

Ici, vous pouvez envoyer des mises à jour de login à HubSpot pour suivre l'activité de vos utilisateurs, tout en évitant une surcharge des appels API grâce à une limitation à une fois par jour.

// Action: Post Login
exports.onExecutePostLogin = async (event, api) => {
  const hubspotToken = event.secrets.HUBSPOT_ACCESS_TOKEN;

  // Ne tracker que 1 fois par jour (éviter les appels excessifs)
  const lastTrack = event.user.app_metadata?.last_hs_track;
  const today = new Date().toISOString().slice(0, 10);
  if (lastTrack === today) return;

  // Trouver le contact HubSpot par email
  const searchRes = await fetch(
    'https://api.hubapi.com/crm/v3/objects/contacts/search',
    {
      method: 'POST',
      headers: { Authorization: `Bearer ${hubspotToken}`, 'Content-Type': 'application/json' },
      body: JSON.stringify({
        filterGroups: [{
          filters: [{ propertyName: 'email', operator: 'EQ', value: event.user.email }]
        }],
        properties: ['hs_object_id'],
      }),
    }
  );
  const { results } = await searchRes.json();
  if (!results?.length) return;

  const contactId = results[0].id;

  // Mettre à jour les propriétés d'engagement
  await fetch(`https://api.hubapi.com/crm/v3/objects/contacts/${contactId}`, {
    method: 'PATCH',
    headers: { Authorization: `Bearer ${hubspotToken}`, 'Content-Type': 'application/json' },
    body: JSON.stringify({
      properties: {
        last_login_date: new Date().toISOString(),
        total_logins: (event.stats.logins_count || 1).toString(),
        current_plan: event.user.app_metadata?.plan || 'free',
      },
    }),
  });

  api.user.setAppMetadata('last_hs_track', today);
};

Ce bloc gère la synchronisation quotidienne des logins pour chaque utilisateur connecté, maintenant ainsi vos données d'engagement à jour dans HubSpot.

---

Salesforce : intégration via Apex ou REST API

Dans cette section, découvrez comment automatiser la création d’un lead dans Salesforce à chaque inscription Auth0, grâce à l’API REST et OAuth2.

// Action: créer un Lead Salesforce au signup
exports.onExecutePostUserRegistration = async (event, api) => {
  // Obtenir un token Salesforce via OAuth2 Client Credentials
  const sfTokenRes = await fetch(
    `https://login.salesforce.com/services/oauth2/token`,
    {
      method: 'POST',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
      body: new URLSearchParams({
        grant_type: 'client_credentials',
        client_id: event.secrets.SF_CLIENT_ID,
        client_secret: event.secrets.SF_CLIENT_SECRET,
      }),
    }
  );
  const { access_token, instance_url } = await sfTokenRes.json();

  // Créer le Lead
  await fetch(`${instance_url}/services/data/v58.0/sobjects/Lead/`, {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${access_token}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      Email: event.user.email,
      FirstName: event.user.given_name || 'Unknown',
      LastName: event.user.family_name || event.user.email.split('@')[0],
      Company: event.user.email.split('@')[1],
      LeadSource: 'Web Signup',
      Auth0_User_ID__c: event.user.user_id, // Custom field
      Status: 'Open - Not Contacted',
    }),
  });
};

Cette opération lie vos nouveaux inscrits Auth0 à des leads Salesforce, assurant ainsi un suivi commercial sans perte d’information.

---

Détection churn : utilisateurs inactifs

Le script ci-dessous identifie automatiquement les clients Pro inactifs depuis 30 jours dans Auth0 et signale le risque de churn dans HubSpot pour aider les équipes à réagir rapidement.

# Script de détection churn : Auth0 → HubSpot
# À exécuter quotidiennement (cron)

async def sync_churn_signals():
    # 1. Récupérer les utilisateurs inactifs depuis 30 jours
    cutoff = (datetime.utcnow() - timedelta(days=30)).isoformat()
    inactive_users = await auth0_search(
        f'last_login:[* TO {cutoff}] AND app_metadata.plan:pro'
    )

    for user in inactive_users:
        # 2. Mettre à jour HubSpot avec signal de churn
        await hubspot_update_contact(user['email'], {
            'churn_risk': 'high',
            'days_since_last_login': (datetime.utcnow() - datetime.fromisoformat(user['last_login'])).days,
            'lifecycle_stage': 'customer',
            'hs_lead_status': 'AT_RISK',
        })

Ce script assure la détection proactive de churn côté Auth0-CRM afin d’automatiser vos campagnes de rétention.

---

Segmentation marketing basée sur Auth0

Cette logique de segmentation permet de créer des listes ciblées dans HubSpot à partir des informations Auth0, facilitant des campagnes marketing et commerciales personnalisées.

// Segments à créer dans HubSpot basés sur les données Auth0:

const segments = {
  "Free Power Users": {
    filter: "plan == 'free' AND total_logins > 50",
    action: "Proposer upgrade Pro"
  },
  "Churn Risk Pro": {
    filter: "plan == 'pro' AND days_since_last_login > 21",
    action: "Déclencher séquence email rétention"
  },
  "Enterprise Ready": {
    filter: "plan == 'pro' AND auth_method == 'waad'",
    action: "Outreach commercial Enterprise"
  },
  "Trial Expiring": {
    filter: "plan_status == 'trialing' AND trial_end < 3 days",
    action: "Séquence conversion urgente"
  }
};

On segmente ainsi automatiquement les contacts pour maximiser la personnalisation et l'efficacité marketing.

---

> 📊 Intégration CRM Auth0 : nous automatisons la synchronisation Auth0↔CRM pour alimenter votre pipeline commercial avec des données d'engagement temps réel.

📧 [email protected]


Autres articles