Skip to main content
At verificere leads før en kampagne reducerer bounce-rater og beskytter dit afsenderomdømme. Denne playbook bygger et n8n-workflow, der læser en e-mailliste, verificerer hver adresse med Email Verifier, kategoriserer resultaterne (gyldig, ugyldig, risikabel) og eksporterer en ren liste, der er klar til at sende. Hvis du er ny til n8n med Enrow, så start med n8n kom godt i gang-guiden.

Hvad bygger du?

Du bygger et workflow, der:
  1. Læser e-maillisten fra Google Sheets eller CSV
  2. Verificerer hver e-mail med Enrow
  3. Kategoriserer resultater (gyldig, ugyldig, risikabel)
  4. Eksporterer en ren liste klar til kampagner
Tid at bygge: 10 minutter Sværhedsgrad: Begynder

Hvornår bør du bruge dette workflow?

Brug dette workflow, når e-mail-leveringsdygtighed har betydning for en efterfølgende proces. Almindelige anvendelser:
  • Rens e-maillister før marketingkampagner
  • Verificer formularindsendelser i realtid
  • Hold databasen ren
  • Reducer bounce-rater

Hvad har du brug for, før du går i gang?

Før du bygger workflowet, skal du sikre dig, at du har følgende: Enrow API-nøglen autentificerer hver anmodning via x-api-key-headeren. Se Autentificering for, hvordan du henter og videregiver API-nøglen, og Credits og fakturering for at forstå, hvordan verificeringscredits forbruges.

Hvordan opsætter du Google Sheet’et?

Opret et ark med e-mailadresser og tomme kolonner til resultaterne:
EmailStatusDeliverableRisk Factors
john@example.com
invalid@fake.com
temp@tempmail.com

Hvordan bygger du workflowet på 5 minutter?

Den hurtigste vej er at importere et færdigt workflow, konfigurere dine legitimationsoplysninger og køre det.

Trin 1: Importer workflow

Kopiér og importer dette workflow til n8n:
{
  "name": "Enrow - Email Verification",
  "nodes": [
    {
      "parameters": {},
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "operation": "read",
        "sheetId": "YOUR_SHEET_ID",
        "range": "Sheet1!A:D"
      },
      "name": "Read Email List",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 3,
      "position": [460, 300]
    },
    {
      "parameters": {
        "batchSize": 100,
        "options": {}
      },
      "name": "Batch Emails",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 1,
      "position": [680, 300]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.enrow.io/email/verify/bulk",
        "authentication": "headerAuth",
        "sendBody": true,
        "bodyContentType": "json",
        "jsonBody": "={\n  \"emails\": {{$json[\"emails\"].map(e => e.Email)}}\n}"
      },
      "name": "Verify Bulk",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [900, 300],
      "credentials": {
        "headerAuth": {"name": "Enrow API"}
      }
    },
    {
      "parameters": {
        "amount": 10,
        "unit": "seconds"
      },
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1,
      "position": [1120, 300]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "=https://api.enrow.io/email/verify/bulk?id={{$json[\"batch_id\"]}}",
        "authentication": "headerAuth"
      },
      "name": "Get Results",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [1340, 300],
      "credentials": {
        "headerAuth": {"name": "Enrow API"}
      }
    },
    {
      "parameters": {
        "operation": "update",
        "sheetId": "YOUR_SHEET_ID",
        "range": "Sheet1!A:D"
      },
      "name": "Update Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 3,
      "position": [1560, 300]
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [[{"node": "Read Email List", "type": "main", "index": 0}]]
    },
    "Read Email List": {
      "main": [[{"node": "Batch Emails", "type": "main", "index": 0}]]
    },
    "Batch Emails": {
      "main": [[{"node": "Verify Bulk", "type": "main", "index": 0}]]
    },
    "Verify Bulk": {
      "main": [[{"node": "Wait", "type": "main", "index": 0}]]
    },
    "Wait": {
      "main": [[{"node": "Get Results", "type": "main", "index": 0}]]
    },
    "Get Results": {
      "main": [[{"node": "Update Sheet", "type": "main", "index": 0}]]
    }
  }
}

Trin 2: Konfigurer

  1. Erstat YOUR_SHEET_ID med dit Google Sheet-ID
  2. Tilføj din Enrow API-nøgle til Header Auth-legitimationsoplysningen
  3. Test først med nogle få e-mails

Trin 3: Kør

  1. Klik på “Execute Workflow”
  2. Vent på, at verificeringen er færdig
  3. Tjek dit Google Sheet for resultater

Hvordan bygger du workflowet trin for trin?

Hvis du foretrækker at bygge workflowet node for node, så følg den detaljerede guide nedenfor.

Trin 1: Læs e-maillisten

Google Sheets:
  1. Tilføj en “Google Sheets”-node
  2. Operation: Read
  3. Vælg dit regneark
  4. Range: Sheet1!A:A (kun e-mailkolonnen)
CSV-fil:
  1. Tilføj en “Read Binary Files”-node
  2. Tilføj en “CSV to JSON”-node
  3. Map e-mailfeltet

Trin 2: Opret batches

For bedre ydeevne kan du behandle e-mails i batches:
  1. Tilføj en “Split In Batches”-node
  2. Batch Size: 100 (eller mindre for hurtigere resultater)
Dette sender 100 e-mails ad gangen til Enrow.

Trin 3: Verificer med Enrow Bulk API

  1. Tilføj en “HTTP Request”-node
  2. Konfigurer:
Method: POST
URL: https://api.enrow.io/email/verify/bulk
Authentication: Header Auth
  Name: x-api-key
  Value: YOUR_API_KEY

JSON Body:
{
  "emails": {{ $json["items"].map(item => item.Email) }}
}
Dette returnerer straks et batch_id. Se Verificer e-mails i bulk for den fulde reference til anmodning og svar.

Trin 4: Vent på resultater

Tilføj en “Wait”-node med 10-15 sekunders forsinkelse. For store batches skal du vente længere. For hændelsesdrevet hentning i stedet for polling kan du videregive en webhook-URL i anmodningen — se Sådan fungerer webhooks.

Trin 5: Hent resultater

  1. Tilføj en “HTTP Request”-node
  2. Konfigurer:
Method: GET
URL: https://api.enrow.io/email/verify/bulk?id={{$json["batch_id"]}}
Authentication: Header Auth (reuse credential)
Endpointet Hent bulk-verificeringer returnerer verificeringsresultaterne for batchen.

Trin 6: Behandl resultater

Tilføj en “Function”-node for at kategorisere e-mails:
const results = $input.all()[0].json.results;

const valid = results.filter(r =>
  r.status === 'valid' &&
  r.is_deliverable &&
  !r.metadata.is_disposable
);

const invalid = results.filter(r => r.status === 'invalid');

const risky = results.filter(r =>
  r.status === 'risky' ||
  r.metadata.is_disposable ||
  r.metadata.is_role
);

return [
  {
    json: {
      total: results.length,
      valid: valid.length,
      invalid: invalid.length,
      risky: risky.length,
      validEmails: valid.map(r => r.email),
      invalidEmails: invalid.map(r => r.email),
      riskyEmails: risky.map(r => r.email)
    }
  }
];

Trin 7: Opdater Google Sheet

  1. Tilføj en “Google Sheets”-node
  2. Operation: Update
  3. Map resultaterne tilbage til de oprindelige rækker
Eller opret separate ark for hver kategori:
  • Gyldige e-mails → Ark “Valid”
  • Ugyldige e-mails → Ark “Invalid”
  • Risikable e-mails → Ark “Risky”

Hvordan verificerer du e-mails fra en formular i realtid?

For at verificere e-mails, når brugere indsender formularer, kan du udløse workflowet med en webhook og verificere hver adresse individuelt:

Workflow:

  1. Webhook Trigger: Modtager formularindsendelser
  2. Extract Email: Hent e-mail fra formulardata
  3. Verify: Kald Enrow /email/verify/single
  4. Beslutning:
    • Gyldig → Gem i CRM (Salesforce, HubSpot osv.)
    • Ugyldig → Send fejlsvar eller markér til gennemgang
// In Function node after verification
if ($json.status === 'valid' && $json.is_deliverable) {
  return [
    {
      json: {
        action: 'accept',
        email: $json.email
      }
    }
  ];
} else {
  return [
    {
      json: {
        action: 'reject',
        email: $json.email,
        reason: 'Invalid or undeliverable email'
      }
    }
  ];
}
Verificering af en enkelt adresse bruger endpointet Verificer enkelt e-mail. For at sende accepterede leads ind i dit CRM, se integrationerne HubSpot og Salesforce.

Hvordan eksporterer du den rene liste?

Når resultaterne er kategoriseret, kan du eksportere den rene liste i det format, din stack har brug for.

Mulighed 1: Google Sheets

Allerede gjort! Resultaterne er i dit ark.

Mulighed 2: CSV-eksport

  1. Tilføj en “Move Binary Data”-node
  2. Tilføj en “Write Binary File”-node
  3. Gem til disk eller send via e-mail

Mulighed 3: Send til e-mailplatform

  1. Tilføj en “HTTP Request”-node til din e-mailplatforms API
  2. Eksempler:
    • Mailchimp: Tilføj til audience
    • SendGrid: Opdater kontakter
    • Customer.io: Synkronisér attributter

Hvordan sporer du verificeringsmetrikker?

Tilføj en opsummeringsnode for at beregne leveringsmetrikker for hver kørsel:
// Function node
const results = $input.all()[0].json.results;
const summary = {
  timestamp: new Date().toISOString(),
  total_verified: results.length,
  valid: results.filter(r => r.status === 'valid').length,
  invalid: results.filter(r => r.status === 'invalid').length,
  risky: results.filter(r => r.status === 'risky').length,
  disposable: results.filter(r => r.metadata?.is_disposable).length,
  role_based: results.filter(r => r.metadata?.is_role).length,
  free_provider: results.filter(r => r.metadata?.is_free).length
};

summary.valid_rate = (summary.valid / summary.total_verified * 100).toFixed(2) + '%';
summary.invalid_rate = (summary.invalid / summary.total_verified * 100).toFixed(2) + '%';

return [{ json: summary }];
Send denne opsummering til:
  • Slack: Send opsummering i en kanal
  • Email: Daglige/ugentlige rapporter
  • Database: Spor over tid

Hvordan reducerer du creditforbruget?

Verificering forbruger credits pr. e-mail, så reducer arbejdet før hver kørsel. Tre taktikker holder omkostningerne nede.

Fjern dubletter før verificering

// Function node before verification
const emails = $input.all().map(item => item.json.Email);
const unique = [...new Set(emails)];

return unique.map(email => ({ json: { Email: email } }));
At fjerne dubletter sparer credits ved kun at verificere hver adresse én gang.

Cache resultater

Gem verificeringsresultater i 30-90 dage:
// Check cache before API call
const cached = await redis.get(`verified:${email}`);
if (cached) {
  return JSON.parse(cached);
}

// Call API
const result = await verifyEmail(email);

// Cache result
await redis.setex(`verified:${email}`, 7776000, JSON.stringify(result)); // 90 days

return result;

Spring allerede verificerede over

Verificer kun e-mails med tom status:
// IF node
{{$json["Status"]}} === "" || {{$json["Status"]}} === null
Se Credits og fakturering for creditomkostningen pr. endpoint.

Bedste praksis

Verificer altid din liste 24-48 timer før afsendelse. E-mailgyldighed kan ændre sig.
Beslut ud fra anvendelsen:
  • B2B: Rolle-e-mails (info@, support@) kan være i orden
  • B2C: Afvis engangs-e-mails
  • Cold outreach: Brug kun e-mails med høj sikkerhed
Spor bounce-rater efter afsendelse. Hvis de er høje, så verificer din liste igen.
Verificer hele din liste hver 3.-6. måned for at fjerne ugyldige e-mails.

Fejlfinding

Tager verificeringen for lang tid?
  • Reducer batch-størrelsen til 50-100 e-mails
  • Øg ventetiden mellem batches
Nogle e-mails vises som “risky”?
  • Tjek metadata.is_disposable – kan være midlertidige e-mails
  • Gennemgå metadata.is_catch_all – accept-all-servere
Bliver du rate limited?
  • Tilføj forsinkelser mellem batches
  • Reducer batch-størrelsen
  • Opgradér dit Enrow-abonnement
For anmodningslofter og håndtering af 429, se Rate limits. For statuskoder og fejlformater, se Fejlhåndtering.

FAQ

Brug Batch Emails-noden til at behandle e-mails i grupper (eksemplet bruger en batch-størrelse på 100). For meget store lister kan du opdele arbejdet i mindre batches og tilføje en længere ventetid mellem anmodningerne for at undgå at blive rate limited. Se Rate limits for anmodningslofterne.
valid betyder, at adressen er leveringsdygtig, invalid betyder, at den ville bounce, og risky dækker catch-all-, engangs- eller rollebaserede adresser, hvor leveringsdygtigheden er usikker. Brug metadata-felterne (is_disposable, is_role, is_catch_all, is_free) til at beslutte, hvordan du behandler risikable resultater i din anvendelse.
Brug Verificer e-mails i bulk til lister og planlagt oprydning, og Verificer enkelt e-mail til realtidstjek såsom formularindsendelser.
Fjern dubletter af adresser før verificering, cache resultater i 30-90 dage, og spring rækker over, der allerede har en status. Se Credits og fakturering for omkostninger pr. endpoint.

Næste skridt

E-mailberigelse

Find e-mails til dine kontakter med et n8n-workflow.

Verificer e-mails i bulk

Udforsk referencen til bulk-verificerings-endpointet.

Autentificering

Sådan videregiver du din API-nøgle i x-api-key-headeren.

Webhooks

Få besked automatisk, når en batch er færdig.