> ## 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-mail-berigelse (n8n)

> Byg et n8n-workflow, der beriger Google Sheets-kontakter med verificerede e-mails ved hjælp af Enrow Email Finder- og Email Verifier-API'erne

Denne guide fører dig gennem opbygningen af et n8n-workflow, der læser kontakter fra et Google Sheet, finder professionelle e-mails med [Email Finder](/da/api-reference/email-finder/find-single)-endpointet, verificerer dem med [Email Verifier](/da/api-reference/email-verifier/verify-single)-endpointet og skriver resultaterne tilbage til arket — automatisk og efter en tidsplan. Ny til n8n med Enrow? Start med [n8n kom godt i gang-guiden](/da/playbooks/n8n/getting-started).

## Hvad bygger du?

Du bygger et automatiseret workflow, der:

1. **Læser kontakter** fra et Google Sheet
2. **Finder e-mails** ved hjælp af Enrow Email Finder
3. **Verificerer e-mails** for leveringsdygtighed med Enrow Email Verifier
4. **Skriver resultater** tilbage til Google Sheet

**Byggetid**: 15 minutter
**Sværhedsgrad**: Mellem

## Hvad har du brug for, før du starter?

Før du bygger workflowet, skal du sikre dig, at du har følgende:

* n8n installeret ([hent n8n](https://n8n.io))
* En Enrow API-nøgle — se [Authentication](/da/authentication) for, hvordan du får og bruger din nøgle
* En Google-konto med et ark med kontakter

Hver søgning forbruger credits, så bekræft din saldo først. Se [Credits & billing](/da/credits-billing) for omkostninger pr. endpoint.

## Hvordan opsætter du Google Sheet?

Opret et Google Sheet med disse kolonner:

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

**Arknavn**: "Contacts"
**URL**: Gem og kopiér arkets URL

## Hvordan ser workflowet ud?

Workflowet kører efter en tidsplan, læser hver kontakt, finder og verificerer e-mailen og opdaterer derefter arket:

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

## Hvordan bygger du workflowet trin for trin?

Følg disse trin for at samle hver node i n8n.

### Trin 1: Opsæt Google Sheets-forbindelsen

1. Tilføj **"Google Sheets"**-node
2. Operation: **"Read"**
3. Godkend med Google
4. Vælg dit regneark
5. Sheet Name: **"Contacts"**
6. Range: **"A:F"** (alle kolonner)

### Trin 2: Tilføj Cron-triggeren

1. Tilføj **"Cron"**-node som trigger
2. Mode: **"Every Hour"** (eller brugerdefineret tidsplan)
3. Forbind til Google Sheets-noden

Dette behandler automatisk nye rækker hver time.

### Trin 3: Filtrér tomme e-mails

1. Tilføj **"IF"**-node efter Google Sheets
2. Betingelse:
   * **Value 1**: `{{$json["Email"]}}`
   * **Operation**: `Is Empty`
3. Send "true" til næste trin (behandl kun kontakter uden e-mails)

### Trin 4: Find e-mailen med Enrow

Send hver kontakt til Email Finder-endpointet. Godkend med din API-nøgle i `x-api-key`-headeren.

1. Tilføj **"HTTP Request"**-node
2. Konfigurér:

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

### Trin 5: Vent på resultatet

Email Finder kører asynkront, så du venter enten på et webhook eller poller GET-endpointet for resultatet.

**Mulighed A: Webhook (anbefales)**

1. Tilføj **"Webhook"**-node
2. Path: `enrow-email-webhook`
3. Kopiér webhook-URL'en
4. Opdatér Find Email JSON-body:

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

For den payload, Enrow sender, og hvordan du registrerer endpoints, se [How webhooks work](/da/how-webhooks-work).

**Mulighed B: Vent & poll**

1. Tilføj **"Wait"**-node: 5 sekunder
2. Tilføj **"HTTP Request"**-node:
   * Method: `GET`
   * URL: `https://api.enrow.io/email/find/single?id={{$json["id"]}}`
3. Tilføj **"IF"**-node for at tjekke status
4. Loop tilbage, hvis stadig `ongoing`

Se [Get Single Result](/da/api-reference/email-finder/get-single-result)-endpointet for det fulde svarformat.

### Trin 6: Verificér e-mailen

Send den fundne e-mail til Email Verifier for at bekræfte leveringsdygtighed, før du skriver den tilbage.

1. Tilføj **"HTTP Request"**-node, efter e-mailen er fundet
2. Konfigurér:

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

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

### Trin 7: Opdatér Google Sheet

1. Tilføj **"Google Sheets"**-node
2. Operation: **"Update"**
3. Vælg samme regneark
4. Sheet Name: **"Contacts"**
5. Range: **Match row** (brug rækkeindeks fra de oprindelige data)
6. Map felter:
   * **Email**: `{{$json["email"]}}`
   * **Status**: `{{$json["confidence"]}}`
   * **Verified**: `{{$json["status"]}}`

## Hvor er den komplette workflow-JSON?

Importér JSON'en nedenfor for at få hele workflowet i ét trin.

<Note>
  Importér dette workflow for at komme i gang med det samme. Opdatér blot dine API-nøgler!
</Note>

<details>
  <summary>Klik for at se den komplette workflow-JSON</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>

## Hvordan kan du forbedre workflowet?

Når basis-workflowet kører, gør disse tilføjelser det mere robust og omkostningseffektivt.

### Tilføj fejlhåndtering

1. Tilføj **"Error Trigger"**-node
2. Tilføj **"Send Email"**- eller **"Slack"**-node for at give besked ved fejl
3. Log fejlede rækker til et separat ark

For de statuskoder, du kan støde på, og hvordan du reagerer på dem, se [Error handling](/da/error-handling) og [Status codes](/da/status-codes).

### Behandl i bulk

For bedre ydeevne med mange kontakter skal du skifte fra enkeltsøgninger til et batch:

1. Ændr Find Email-noden til at bruge `/email/find/bulk`
2. Saml kontakter i grupper på 100
3. Behandl alle på én gang i stedet for én ad gangen

Eksempel på bulk-anmodning:

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

[Find Bulk Emails](/da/api-reference/email-finder/find-bulk)-endpointet accepterer op til 5.000 søgninger pr. batch.

### Tilføj betinget verificering

Verificér kun e-mails med høj konfidens for at spare credits:

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

Dette sparer credits ved at springe verificering over for usikre e-mails.

## Hvornår bør du bruge dette workflow?

Dette workflow passer godt til:

* **Salgsteams**: Berig prospect-lister før outreach
* **Rekrutteringskonsulenter**: Find kandidaters kontaktoplysninger
* **Marketingfolk**: Byg e-mail-lister fra virksomhedsdatabaser
* **Datateams**: Rens og berig CRM-data

## Hvad er bedste praksis?

<AccordionGroup>
  <Accordion title="Rate Limits">
    Hvis du behandler store lister (1000+ kontakter):

    * Brug bulk-endpoints
    * Tilføj forsinkelser mellem batches
    * Eller opgradér din Enrow-plan

    Se [Rate limits](/da/rate-limits) for de aktuelle anmodningsgrænser.
  </Accordion>

  <Accordion title="Data Quality">
    * Verificér altid e-mails, før du bruger dem
    * Tjek konfidensscorer
    * Fjern resultater af lav kvalitet
  </Accordion>

  <Accordion title="Cost Optimization">
    * Fjern dubletter blandt kontakter før behandling
    * Cache resultater for at undgå gentagne søgninger
    * Brug betinget logik til at springe unødvendige API-kald over
  </Accordion>

  <Accordion title="Error Recovery">
    * Log alle API-svar
    * Spor fejlede berigelser
    * Prøv fejlede søgninger igen automatisk
  </Accordion>
</AccordionGroup>

## Hvordan fejlfinder du almindelige problemer?

**Kører workflowet ikke automatisk?**

* Tjek, at Cron-triggeren er aktiveret
* Bekræft, at tidsplanen er korrekt

**Ingen e-mails fundet?**

* Tjek, at virksomhedsdomænerne er korrekte
* Bekræft, at navnene er stavet korrekt
* Prøv med kun virksomhedsdomæne (uden navne)

**Opdateres arket ikke?**

* Tjek Google Sheets-tilladelser
* Bekræft, at range matcher dine data
* Test Update-noden manuelt

## FAQ

<AccordionGroup>
  <Accordion title="Har jeg brug for et webhook, eller kan jeg bare polle efter resultater?">
    Begge virker. Email Finder kører asynkront, så du kan enten registrere et webhook i `settings.webhook`-feltet (Mulighed A) eller polle [Get Single Result](/da/api-reference/email-finder/get-single-result)-endpointet med jævne mellemrum (Mulighed B). Webhooks anbefales, fordi de undgår spildte poll-anmodninger og returnerer resultater, så snart søgningen er fuldført. Se [How webhooks work](/da/how-webhooks-work).
  </Accordion>

  <Accordion title="Hvor mange credits bruger workflowet?">
    Hver Email Finder-søgning og hvert Email Verifier-tjek forbruger credits pr. kald. At køre begge på hver kontakt bruger flere credits end at finde alene, så tilføj betinget verificering for at springe usikre e-mails over. For nøjagtige omkostninger pr. endpoint, se [Credits & billing](/da/credits-billing).
  </Accordion>

  <Accordion title="Hvordan godkender jeg HTTP Request-noderne?">
    Brug n8n's Header Auth-credential med headernavnet `x-api-key` og din Enrow API-nøgle som værdi, og genbrug derefter den samme credential på tværs af alle Enrow-noder. Alle detaljer findes i [Authentication](/da/authentication).
  </Accordion>

  <Accordion title="Hvad hvis jeg har tusindvis af kontakter?">
    Skift Find Email-noden til [Find Bulk Emails](/da/api-reference/email-finder/find-bulk)-endpointet, som accepterer op til 5.000 søgninger pr. batch, og hold dig inden for din plans [rate limits](/da/rate-limits).
  </Accordion>
</AccordionGroup>

## Næste skridt

<CardGroup cols={2}>
  <Card title="Verificeringsworkflow" icon="shield-check" href="/da/playbooks/n8n/lead-verification-workflow">
    Verificér eksisterende e-mail-lister med n8n og Enrow.
  </Card>

  <Card title="Find enkelt e-mail" icon="envelope" href="/da/api-reference/email-finder/find-single">
    Udforsk Email Finder-endpointet, der bruges i dette workflow.
  </Card>

  <Card title="Verificér enkelt e-mail" icon="circle-check" href="/da/api-reference/email-verifier/verify-single">
    Tjek, om en e-mailadresse er gyldig og leveringsdygtig.
  </Card>

  <Card title="Webhooks" icon="bell" href="/da/how-webhooks-work">
    Få automatisk besked, når en søgning er fuldført.
  </Card>
</CardGroup>
