> ## Documentation Index
> Fetch the complete documentation index at: https://docs.enrow.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Enrichissement d'e-mails (n8n)

> Créez un workflow n8n qui enrichit les contacts Google Sheets avec des e-mails vérifiés grâce aux API Email Finder et Email Verifier d'Enrow

Ce guide vous accompagne dans la création d'un workflow n8n qui lit les contacts d'une feuille Google Sheet, trouve des e-mails professionnels avec l'endpoint [Email Finder](/fr/api-reference/email-finder/find-single), les vérifie avec l'endpoint [Email Verifier](/fr/api-reference/email-verifier/verify-single) et réécrit les résultats dans la feuille — automatiquement, selon une planification. Vous débutez avec n8n et Enrow ? Commencez par le [guide de prise en main de n8n](/fr/playbooks/n8n/getting-started).

## Que allez-vous construire ?

Vous allez construire un workflow automatisé qui :

1. **Lit les contacts** depuis une feuille Google Sheet
2. **Trouve les e-mails** à l'aide de l'Email Finder d'Enrow
3. **Vérifie les e-mails** pour confirmer leur délivrabilité avec l'Email Verifier d'Enrow
4. **Réécrit les résultats** dans la feuille Google Sheet

**Temps de réalisation** : 15 minutes
**Difficulté** : Intermédiaire

## De quoi avez-vous besoin avant de commencer ?

Avant de construire le workflow, assurez-vous de disposer des éléments suivants :

* n8n installé ([obtenir n8n](https://n8n.io))
* Une clé API Enrow — consultez [Authentication](/fr/authentication) pour savoir comment obtenir et utiliser votre clé
* Un compte Google avec une feuille de contacts

Chaque recherche consomme des crédits, vérifiez donc d'abord votre solde. Consultez [Credits & billing](/fr/credits-billing) pour connaître les coûts par endpoint.

## Comment configurer la feuille Google Sheet ?

Créez une feuille Google Sheet avec ces colonnes :

| First Name | Last Name | Company Domain | Email | Status | Verified |
| ---------- | --------- | -------------- | ----- | ------ | -------- |
| John       | Doe       | apple.com      |       |        |          |
| Jane       | Smith     | microsoft.com  |       |        |          |
| Bob        | Johnson   | meta.com       |       |        |          |

**Nom de la feuille** : "Contacts"
**URL** : Enregistrez et copiez l'URL de la feuille

## À quoi ressemble le workflow ?

Le workflow s'exécute selon une planification, lit chaque contact, trouve et vérifie l'e-mail, puis met à jour la feuille :

```mermaid theme={null}
graph LR
    A[Cron Trigger] --> B[Read Google Sheet]
    B --> C[Loop Over Contacts]
    C --> D[Find Email - Enrow]
    D --> E[Verify Email - Enrow]
    E --> F[Update Google Sheet]
```

## Comment construire le workflow étape par étape ?

Suivez ces étapes pour assembler chaque nœud dans n8n.

### Étape 1 : Configurer la connexion Google Sheets

1. Ajoutez un nœud **"Google Sheets"**
2. Opération : **"Read"**
3. Authentifiez-vous auprès de Google
4. Sélectionnez votre feuille de calcul
5. Nom de la feuille : **"Contacts"**
6. Plage : **"A:F"** (toutes les colonnes)

### Étape 2 : Ajouter le déclencheur Cron

1. Ajoutez un nœud **"Cron"** comme déclencheur
2. Mode : **"Every Hour"** (ou planification personnalisée)
3. Connectez-le au nœud Google Sheets

Cela traitera automatiquement les nouvelles lignes toutes les heures.

### Étape 3 : Filtrer les e-mails vides

1. Ajoutez un nœud **"IF"** après Google Sheets
2. Condition :
   * **Value 1** : `{{$json["Email"]}}`
   * **Operation** : `Is Empty`
3. Routez "true" vers l'étape suivante (ne traiter que les contacts sans e-mail)

### Étape 4 : Trouver l'e-mail avec Enrow

Envoyez chaque contact à l'endpoint Email Finder. Authentifiez-vous avec votre clé API dans l'en-tête `x-api-key`.

1. Ajoutez un nœud **"HTTP Request"**
2. Configurez :

```
Method: POST
URL: https://api.enrow.io/email/find/single
Authentication: Header Auth
  Name: x-api-key
  Value: YOUR_ENROW_API_KEY

JSON Body:
{
  "company_domain": "{{$json["Company Domain"]}}",
  "fullname": "{{$json["First Name"]}} {{$json["Last Name"]}}"
}
```

### Étape 5 : Attendre le résultat

L'Email Finder s'exécute de manière asynchrone : vous pouvez donc soit attendre un webhook, soit interroger l'endpoint GET pour obtenir le résultat.

**Option A : Webhook (recommandé)**

1. Ajoutez un nœud **"Webhook"**
2. Chemin : `enrow-email-webhook`
3. Copiez l'URL du webhook
4. Mettez à jour le corps JSON de Find Email :

```json theme={null}
{
  "company_domain": "{{$json["Company Domain"]}}",
  "fullname": "{{$json["First Name"]}} {{$json["Last Name"]}}",
  "settings": {
    "webhook": "YOUR_WEBHOOK_URL"
  }
}
```

Pour connaître la charge utile envoyée par Enrow et savoir comment enregistrer des endpoints, consultez [How webhooks work](/fr/how-webhooks-work).

**Option B : Attendre et interroger**

1. Ajoutez un nœud **"Wait"** : 5 secondes
2. Ajoutez un nœud **"HTTP Request"** :
   * Method : `GET`
   * URL : `https://api.enrow.io/email/find/single?id={{$json["id"]}}`
3. Ajoutez un nœud **"IF"** pour vérifier le statut
4. Bouclez si le statut est toujours `ongoing`

Consultez l'endpoint [Get Single Result](/fr/api-reference/email-finder/get-single-result) pour le format complet de la réponse.

### Étape 6 : Vérifier l'e-mail

Transmettez l'e-mail trouvé à l'Email Verifier pour confirmer sa délivrabilité avant de le réécrire.

1. Ajoutez un nœud **"HTTP Request"** une fois l'e-mail trouvé
2. Configurez :

```
Method: POST
URL: https://api.enrow.io/email/verify/single
Authentication: Header Auth (reuse Enrow credential)

JSON Body:
{
  "email": "{{$json["email"]}}"
}
```

### Étape 7 : Mettre à jour la feuille Google Sheet

1. Ajoutez un nœud **"Google Sheets"**
2. Opération : **"Update"**
3. Sélectionnez la même feuille de calcul
4. Nom de la feuille : **"Contacts"**
5. Plage : **Match row** (utilisez l'index de ligne des données d'origine)
6. Mappez les champs :
   * **Email** : `{{$json["email"]}}`
   * **Status** : `{{$json["confidence"]}}`
   * **Verified** : `{{$json["status"]}}`

## Où se trouve le JSON complet du workflow ?

Importez le JSON ci-dessous pour obtenir le workflow complet en une seule étape.

<Note>
  Importez ce workflow pour démarrer immédiatement. Il vous suffit de mettre à jour vos clés API !
</Note>

<details>
  <summary>Cliquez pour afficher le JSON complet du workflow</summary>

  ```json theme={null}
  {
    "name": "Enrow - Email Enrichment from Google Sheets",
    "nodes": [
      {
        "parameters": {
          "rule": {
            "interval": [{"field": "hours", "hoursInterval": 1}]
          }
        },
        "name": "Every Hour",
        "type": "n8n-nodes-base.cron",
        "typeVersion": 1,
        "position": [240, 300]
      },
      {
        "parameters": {
          "operation": "read",
          "sheetId": "YOUR_SHEET_ID",
          "range": "Contacts!A:F",
          "options": {}
        },
        "name": "Read Contacts",
        "type": "n8n-nodes-base.googleSheets",
        "typeVersion": 3,
        "position": [460, 300]
      },
      {
        "parameters": {
          "conditions": {
            "string": [
              {
                "value1": "={{$json[\"Email\"]}}",
                "operation": "isEmpty"
              }
            ]
          }
        },
        "name": "Filter Empty Emails",
        "type": "n8n-nodes-base.if",
        "typeVersion": 1,
        "position": [680, 300]
      },
      {
        "parameters": {
          "method": "POST",
          "url": "https://api.enrow.io/email/find/single",
          "authentication": "headerAuth",
          "sendBody": true,
          "bodyContentType": "json",
          "jsonBody": "={\n  \"company_domain\": \"{{$json[\"Company Domain\"]}}\",\n  \"fullname\": \"{{$json[\"First Name\"]}} {{$json[\"Last Name\"]}}\"\n}"
        },
        "name": "Find Email",
        "type": "n8n-nodes-base.httpRequest",
        "typeVersion": 3,
        "position": [900, 300],
        "credentials": {
          "headerAuth": {"name": "Enrow API"}
        }
      },
      {
        "parameters": {
          "amount": 5,
          "unit": "seconds"
        },
        "name": "Wait 5s",
        "type": "n8n-nodes-base.wait",
        "typeVersion": 1,
        "position": [1120, 300]
      },
      {
        "parameters": {
          "method": "GET",
          "url": "=https://api.enrow.io/email/find/single?id={{$json[\"id\"]}}",
          "authentication": "headerAuth"
        },
        "name": "Get Result",
        "type": "n8n-nodes-base.httpRequest",
        "typeVersion": 3,
        "position": [1340, 300],
        "credentials": {
          "headerAuth": {"name": "Enrow API"}
        }
      },
      {
        "parameters": {
          "conditions": {
            "string": [
              {
                "value1": "={{$json[\"status\"]}}",
                "value2": "completed"
              }
            ]
          }
        },
        "name": "Check if Complete",
        "type": "n8n-nodes-base.if",
        "typeVersion": 1,
        "position": [1560, 300]
      },
      {
        "parameters": {
          "method": "POST",
          "url": "https://api.enrow.io/email/verify/single",
          "authentication": "headerAuth",
          "sendBody": true,
          "bodyContentType": "json",
          "jsonBody": "={\n  \"email\": \"{{$json[\"email\"]}}\"\n}"
        },
        "name": "Verify Email",
        "type": "n8n-nodes-base.httpRequest",
        "typeVersion": 3,
        "position": [1780, 300],
        "credentials": {
          "headerAuth": {"name": "Enrow API"}
        }
      },
      {
        "parameters": {
          "operation": "update",
          "sheetId": "YOUR_SHEET_ID",
          "range": "=Contacts!A{{$json[\"row\"]}}:F{{$json[\"row\"]}}",
          "options": {
            "valueInputMode": "USER_ENTERED"
          }
        },
        "name": "Update Sheet",
        "type": "n8n-nodes-base.googleSheets",
        "typeVersion": 3,
        "position": [2000, 300]
      }
    ],
    "connections": {
      "Every Hour": {
        "main": [[{"node": "Read Contacts", "type": "main", "index": 0}]]
      },
      "Read Contacts": {
        "main": [[{"node": "Filter Empty Emails", "type": "main", "index": 0}]]
      },
      "Filter Empty Emails": {
        "main": [[{"node": "Find Email", "type": "main", "index": 0}]]
      },
      "Find Email": {
        "main": [[{"node": "Wait 5s", "type": "main", "index": 0}]]
      },
      "Wait 5s": {
        "main": [[{"node": "Get Result", "type": "main", "index": 0}]]
      },
      "Get Result": {
        "main": [[{"node": "Check if Complete", "type": "main", "index": 0}]]
      },
      "Check if Complete": {
        "main": [
          [{"node": "Verify Email", "type": "main", "index": 0}],
          [{"node": "Wait 5s", "type": "main", "index": 0}]
        ]
      },
      "Verify Email": {
        "main": [[{"node": "Update Sheet", "type": "main", "index": 0}]]
      }
    }
  }
  ```
</details>

## Comment améliorer le workflow ?

Une fois le workflow de base opérationnel, ces ajouts le rendent plus robuste et plus économique.

### Ajouter la gestion des erreurs

1. Ajoutez un nœud **"Error Trigger"**
2. Ajoutez un nœud **"Send Email"** ou **"Slack"** pour être notifié en cas d'erreur
3. Consignez les lignes en échec dans une feuille distincte

Pour les codes de statut que vous pouvez rencontrer et la manière d'y réagir, consultez [Error handling](/fr/error-handling) et [Status codes](/fr/status-codes).

### Traiter en masse

Pour de meilleures performances avec de nombreux contacts, passez des recherches unitaires à un lot :

1. Modifiez le nœud Find Email pour utiliser `/email/find/bulk`
2. Regroupez les contacts par paquets de 100
3. Traitez-les tous en une fois plutôt qu'un par un

Exemple de requête en masse :

```json theme={null}
{
  "searches": [
    {
      "company_domain": "{{$json[\"Company Domain\"]}}",
      "fullname": "{{$json[\"First Name\"]}} {{$json[\"Last Name\"]}}"
    }
  ]
}
```

L'endpoint [Find Bulk Emails](/fr/api-reference/email-finder/find-bulk) accepte jusqu'à 5 000 recherches par lot.

### Ajouter une vérification conditionnelle

Ne vérifiez que les e-mails à forte confiance pour économiser des crédits :

```javascript theme={null}
// In IF node
{{$json["confidence"]}} === "high"
```

Cela économise des crédits en évitant de vérifier les e-mails incertains.

## Quand utiliser ce workflow ?

Ce workflow convient bien aux cas suivants :

* **Équipes commerciales** : enrichir des listes de prospects avant la prospection
* **Recruteurs** : trouver les coordonnées des candidats
* **Marketeurs** : constituer des listes d'e-mails à partir de bases de données d'entreprises
* **Équipes data** : nettoyer et enrichir les données CRM

## Quelles sont les bonnes pratiques ?

<AccordionGroup>
  <Accordion title="Limites de débit">
    Si vous traitez de grandes listes (plus de 1 000 contacts) :

    * Utilisez les endpoints en masse
    * Ajoutez des délais entre les lots
    * Ou faites évoluer votre forfait Enrow

    Consultez [Rate limits](/fr/rate-limits) pour connaître les seuils de requêtes actuels.
  </Accordion>

  <Accordion title="Qualité des données">
    * Vérifiez toujours les e-mails avant de les utiliser
    * Examinez les scores de confiance
    * Supprimez les résultats de faible qualité
  </Accordion>

  <Accordion title="Optimisation des coûts">
    * Dédupliquez les contacts avant le traitement
    * Mettez les résultats en cache pour éviter de relancer des recherches
    * Utilisez une logique conditionnelle pour éviter les appels API inutiles
  </Accordion>

  <Accordion title="Reprise sur erreur">
    * Consignez toutes les réponses de l'API
    * Suivez les enrichissements en échec
    * Relancez automatiquement les recherches en échec
  </Accordion>
</AccordionGroup>

## Comment résoudre les problèmes courants ?

**Le workflow ne s'exécute pas automatiquement ?**

* Vérifiez que le déclencheur Cron est activé
* Vérifiez que la planification est correcte

**Aucun e-mail trouvé ?**

* Vérifiez que les domaines des entreprises sont corrects
* Vérifiez que les noms sont correctement orthographiés
* Essayez uniquement avec le domaine de l'entreprise (sans les noms)

**La feuille ne se met pas à jour ?**

* Vérifiez les permissions de Google Sheets
* Vérifiez que la plage correspond à vos données
* Testez le nœud Update manuellement

## FAQ

<AccordionGroup>
  <Accordion title="Ai-je besoin d'un webhook, ou puis-je simplement interroger les résultats ?">
    Les deux fonctionnent. L'Email Finder s'exécute de manière asynchrone : vous pouvez donc soit enregistrer un webhook dans le champ `settings.webhook` (Option A), soit interroger l'endpoint [Get Single Result](/fr/api-reference/email-finder/get-single-result) à intervalles réguliers (Option B). Les webhooks sont recommandés car ils évitent les requêtes d'interrogation inutiles et renvoient les résultats dès que la recherche est terminée. Consultez [How webhooks work](/fr/how-webhooks-work).
  </Accordion>

  <Accordion title="Combien de crédits ce workflow consomme-t-il ?">
    Chaque recherche Email Finder et chaque vérification Email Verifier consomme des crédits par appel. Exécuter les deux sur chaque contact consomme plus de crédits que la seule recherche : ajoutez donc une vérification conditionnelle pour ignorer les e-mails incertains. Pour les coûts exacts par endpoint, consultez [Credits & billing](/fr/credits-billing).
  </Accordion>

  <Accordion title="Comment authentifier les nœuds HTTP Request ?">
    Utilisez les identifiants Header Auth de n8n avec le nom d'en-tête `x-api-key` et votre clé API Enrow comme valeur, puis réutilisez les mêmes identifiants sur chaque nœud Enrow. Tous les détails se trouvent dans [Authentication](/fr/authentication).
  </Accordion>

  <Accordion title="Que faire si j'ai des milliers de contacts ?">
    Basculez le nœud Find Email vers l'endpoint [Find Bulk Emails](/fr/api-reference/email-finder/find-bulk), qui accepte jusqu'à 5 000 recherches par lot, et restez dans les [limites de débit](/fr/rate-limits) de votre forfait.
  </Accordion>
</AccordionGroup>

## Étapes suivantes

<CardGroup cols={2}>
  <Card title="Workflow de vérification" icon="shield-check" href="/fr/playbooks/n8n/lead-verification-workflow">
    Vérifiez des listes d'e-mails existantes avec n8n et Enrow.
  </Card>

  <Card title="Trouver un e-mail" icon="envelope" href="/fr/api-reference/email-finder/find-single">
    Découvrez l'endpoint Email Finder utilisé dans ce workflow.
  </Card>

  <Card title="Vérifier un e-mail" icon="circle-check" href="/fr/api-reference/email-verifier/verify-single">
    Vérifiez si une adresse e-mail est valide et délivrable.
  </Card>

  <Card title="Webhooks" icon="bell" href="/fr/how-webhooks-work">
    Soyez notifié automatiquement à la fin d'une recherche.
  </Card>
</CardGroup>
