> ## 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.

# E-mailverrijking (n8n)

> Bouw een n8n-workflow die Google Sheets-contacten verrijkt met geverifieerde e-mails via de Enrow Email Finder- en Email Verifier-API's

Deze gids helpt je bij het bouwen van een n8n-workflow die contacten leest uit een Google Sheet, professionele e-mails vindt met het [Email Finder](/nl/api-reference/email-finder/find-single)-endpoint, deze verifieert met het [Email Verifier](/nl/api-reference/email-verifier/verify-single)-endpoint en de resultaten terugschrijft naar de sheet — automatisch, volgens een schema. Nieuw met n8n en Enrow? Begin met de [n8n-startgids](/nl/playbooks/n8n/getting-started).

## Wat ga je bouwen?

Je bouwt een geautomatiseerde workflow die:

1. **Contacten leest** uit een Google Sheet
2. **E-mails vindt** met de Enrow Email Finder
3. **E-mails verifieert** op afleverbaarheid met de Enrow Email Verifier
4. **Resultaten terugschrijft** naar de Google Sheet

**Bouwtijd**: 15 minuten
**Moeilijkheidsgraad**: Gemiddeld

## Wat heb je nodig voordat je begint?

Zorg dat je het volgende hebt voordat je de workflow bouwt:

* n8n geïnstalleerd ([n8n verkrijgen](https://n8n.io))
* Een Enrow-API-sleutel — zie [Authenticatie](/nl/authentication) voor hoe je je sleutel verkrijgt en gebruikt
* Een Google-account met een Sheet vol contacten

Elke zoekopdracht verbruikt credits, dus controleer eerst je saldo. Zie [Credits en facturering](/nl/credits-billing) voor de kosten per endpoint.

## Hoe stel je de Google Sheet in?

Maak een Google Sheet met deze kolommen:

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

**Sheetnaam**: "Contacts"
**URL**: Sla de Sheet-URL op en kopieer deze

## Hoe ziet de workflow eruit?

De workflow draait volgens een schema, leest elk contact, vindt en verifieert de e-mail en werkt vervolgens de sheet bij:

```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]
```

## Hoe bouw je de workflow stap voor stap?

Volg deze stappen om elke node in n8n samen te stellen.

### Stap 1: Stel de Google Sheets-verbinding in

1. Voeg een **"Google Sheets"**-node toe
2. Bewerking: **"Read"**
3. Authenticeer met Google
4. Selecteer je spreadsheet
5. Sheetnaam: **"Contacts"**
6. Bereik: **"A:F"** (alle kolommen)

### Stap 2: Voeg de Cron-trigger toe

1. Voeg een **"Cron"**-node toe als trigger
2. Modus: **"Every Hour"** (of een aangepast schema)
3. Verbind met de Google Sheets-node

Hiermee worden nieuwe rijen automatisch elk uur verwerkt.

### Stap 3: Filter lege e-mails

1. Voeg een **"IF"**-node toe na Google Sheets
2. Voorwaarde:
   * **Value 1**: `{{$json["Email"]}}`
   * **Operation**: `Is Empty`
3. Stuur "true" door naar de volgende stap (verwerk alleen contacten zonder e-mails)

### Stap 4: Vind de e-mail met Enrow

Stuur elk contact naar het Email Finder-endpoint. Authenticeer met je API-sleutel in de `x-api-key`-header.

1. Voeg een **"HTTP Request"**-node toe
2. Configureer:

```
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"]}}"
}
```

### Stap 5: Wacht op het resultaat

De Email Finder draait asynchroon, dus je wacht op een webhook of pollt het GET-endpoint voor het resultaat.

**Optie A: Webhook (aanbevolen)**

1. Voeg een **"Webhook"**-node toe
2. Pad: `enrow-email-webhook`
3. Kopieer de webhook-URL
4. Werk de JSON-body van Find Email bij:

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

Voor de payload die Enrow verstuurt en hoe je endpoints registreert, zie [Hoe webhooks werken](/nl/how-webhooks-work).

**Optie B: Wachten en pollen**

1. Voeg een **"Wait"**-node toe: 5 seconden
2. Voeg een **"HTTP Request"**-node toe:
   * Method: `GET`
   * URL: `https://api.enrow.io/email/find/single?id={{$json["id"]}}`
3. Voeg een **"IF"**-node toe om de status te controleren
4. Keer terug in de lus als de status nog `ongoing` is

Zie het [Get Single Result](/nl/api-reference/email-finder/get-single-result)-endpoint voor het volledige responseformaat.

### Stap 6: Verifieer de e-mail

Geef de gevonden e-mail door aan de Email Verifier om de afleverbaarheid te bevestigen voordat je deze terugschrijft.

1. Voeg een **"HTTP Request"**-node toe nadat de e-mail is gevonden
2. Configureer:

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

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

### Stap 7: Werk de Google Sheet bij

1. Voeg een **"Google Sheets"**-node toe
2. Bewerking: **"Update"**
3. Selecteer dezelfde spreadsheet
4. Sheetnaam: **"Contacts"**
5. Bereik: **Match row** (gebruik de rij-index uit de oorspronkelijke data)
6. Velden toewijzen:
   * **Email**: `{{$json["email"]}}`
   * **Status**: `{{$json["confidence"]}}`
   * **Verified**: `{{$json["status"]}}`

## Waar vind ik de volledige workflow-JSON?

Importeer de onderstaande JSON om de volledige workflow in één stap te krijgen.

<Note>
  Importeer deze workflow om meteen aan de slag te gaan. Werk alleen je API-sleutels bij!
</Note>

<details>
  <summary>Klik om de volledige workflow-JSON te bekijken</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>

## Hoe kun je de workflow verbeteren?

Zodra de basisworkflow draait, maken deze toevoegingen hem robuuster en kostenefficiënter.

### Voeg foutafhandeling toe

1. Voeg een **"Error Trigger"**-node toe
2. Voeg een **"Send Email"**- of **"Slack"**-node toe om bij fouten een melding te sturen
3. Log mislukte rijen naar een aparte sheet

Voor de statuscodes die je kunt tegenkomen en hoe je erop reageert, zie [Foutafhandeling](/nl/error-handling) en [Statuscodes](/nl/status-codes).

### Verwerk in bulk

Schakel voor betere prestaties bij veel contacten over van losse zoekopdrachten naar een batch:

1. Wijzig de Find Email-node om `/email/find/bulk` te gebruiken
2. Groepeer contacten in groepen van 100
3. Verwerk alles in één keer in plaats van één voor één

Voorbeeld van een bulkverzoek:

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

Het [Find Bulk Emails](/nl/api-reference/email-finder/find-bulk)-endpoint accepteert tot 5.000 zoekopdrachten per batch.

### Voeg voorwaardelijke verificatie toe

Verifieer alleen e-mails met een hoge betrouwbaarheid om credits te besparen:

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

Hiermee bespaar je credits door verificatie over te slaan voor onzekere e-mails.

## Wanneer moet je deze workflow gebruiken?

Deze workflow is geschikt voor:

* **Salesteams**: Verrijk prospectlijsten vóór outreach
* **Recruiters**: Vind contactgegevens van kandidaten
* **Marketeers**: Bouw e-maillijsten op uit bedrijfsdatabases
* **Datateams**: Schoon CRM-data op en verrijk deze

## Wat zijn de best practices?

<AccordionGroup>
  <Accordion title="Rate limits">
    Bij het verwerken van grote lijsten (1000+ contacten):

    * Gebruik bulk-endpoints
    * Voeg vertragingen toe tussen batches
    * Of upgrade je Enrow-abonnement

    Zie [Rate limits](/nl/rate-limits) voor de huidige verzoekdrempels.
  </Accordion>

  <Accordion title="Datakwaliteit">
    * Verifieer e-mails altijd voordat je ze gebruikt
    * Controleer betrouwbaarheidsscores
    * Verwijder resultaten van lage kwaliteit
  </Accordion>

  <Accordion title="Kostenoptimalisatie">
    * Ontdubbel contacten vóór de verwerking
    * Sla resultaten op in de cache om herhaald zoeken te voorkomen
    * Gebruik voorwaardelijke logica om onnodige API-aanroepen over te slaan
  </Accordion>

  <Accordion title="Foutherstel">
    * Log alle API-responses
    * Houd mislukte verrijkingen bij
    * Probeer mislukte zoekopdrachten automatisch opnieuw
  </Accordion>
</AccordionGroup>

## Hoe los je veelvoorkomende problemen op?

**Draait de workflow niet automatisch?**

* Controleer of de Cron-trigger is geactiveerd
* Verifieer of het schema correct is

**Geen e-mails gevonden?**

* Controleer of de bedrijfsdomeinen correct zijn
* Verifieer of de namen correct zijn gespeld
* Probeer het met alleen het bedrijfsdomein (zonder namen)

**Wordt de sheet niet bijgewerkt?**

* Controleer de Google Sheets-machtigingen
* Verifieer of het bereik overeenkomt met je data
* Test de Update-node handmatig

## FAQ

<AccordionGroup>
  <Accordion title="Heb ik een webhook nodig, of kan ik gewoon pollen voor resultaten?">
    Beide werken. De Email Finder draait asynchroon, dus je kunt een webhook registreren in het `settings.webhook`-veld (Optie A) of het [Get Single Result](/nl/api-reference/email-finder/get-single-result)-endpoint op een timer pollen (Optie B). Webhooks worden aanbevolen omdat ze overbodige pollverzoeken voorkomen en resultaten retourneren zodra de zoekopdracht voltooid is. Zie [Hoe webhooks werken](/nl/how-webhooks-work).
  </Accordion>

  <Accordion title="Hoeveel credits gebruikt de workflow?">
    Elke Email Finder-zoekopdracht en elke Email Verifier-controle verbruikt credits per aanroep. Beide op elk contact uitvoeren verbruikt meer credits dan alleen zoeken, dus voeg voorwaardelijke verificatie toe om onzekere e-mails over te slaan. Voor de exacte kosten per endpoint, zie [Credits en facturering](/nl/credits-billing).
  </Accordion>

  <Accordion title="Hoe authenticeer ik de HTTP Request-nodes?">
    Gebruik de Header Auth-credential van n8n met de headernaam `x-api-key` en je Enrow-API-sleutel als waarde, en hergebruik vervolgens dezelfde credential in elke Enrow-node. Alle details vind je in [Authenticatie](/nl/authentication).
  </Accordion>

  <Accordion title="Wat als ik duizenden contacten heb?">
    Schakel de Find Email-node over naar het [Find Bulk Emails](/nl/api-reference/email-finder/find-bulk)-endpoint, dat tot 5.000 zoekopdrachten per batch accepteert, en blijf binnen de [rate limits](/nl/rate-limits) van je abonnement.
  </Accordion>
</AccordionGroup>

## Volgende stappen

<CardGroup cols={2}>
  <Card title="Verificatieworkflow" icon="shield-check" href="/nl/playbooks/n8n/lead-verification-workflow">
    Verifieer bestaande e-maillijsten met n8n en Enrow.
  </Card>

  <Card title="E-mail vinden" icon="envelope" href="/nl/api-reference/email-finder/find-single">
    Ontdek het Email Finder-endpoint dat in deze workflow wordt gebruikt.
  </Card>

  <Card title="E-mail verifiëren" icon="circle-check" href="/nl/api-reference/email-verifier/verify-single">
    Controleer of een e-mailadres geldig en afleverbaar is.
  </Card>

  <Card title="Webhooks" icon="bell" href="/nl/how-webhooks-work">
    Word automatisch op de hoogte gesteld wanneer een zoekopdracht voltooid is.
  </Card>
</CardGroup>
