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

# Weryfikacja leadów (n8n)

> Oczyszczaj i weryfikuj listy e-mail przed kampaniami za pomocą przepływu n8n, który masowo weryfikuje leady przy użyciu API Enrow i eksportuje listę gotową do wysyłki

Weryfikacja leadów przed kampanią obniża współczynnik odrzuceń i chroni reputację nadawcy. Ten playbook tworzy przepływ n8n, który odczytuje listę e-mail, weryfikuje każdy adres za pomocą [Email Verifier](/pl/api-reference/email-verifier/verify-bulk), kategoryzuje wyniki (poprawne, niepoprawne, ryzykowne) i eksportuje czystą listę gotową do wysłania. Jeśli dopiero zaczynasz pracę z n8n i Enrow, zacznij od [przewodnika wprowadzającego do n8n](/pl/playbooks/n8n/getting-started).

## Co zbudujesz?

Zbudujesz przepływ, który:

1. **Odczytuje listę e-mail** z Google Sheets lub pliku CSV
2. **Weryfikuje każdy adres e-mail** za pomocą Enrow
3. **Kategoryzuje wyniki** (poprawne, niepoprawne, ryzykowne)
4. **Eksportuje czystą listę** gotową do kampanii

**Czas budowy**: 10 minut
**Poziom trudności**: Początkujący

## Kiedy warto użyć tego przepływu?

Użyj tego przepływu zawsze, gdy dostarczalność e-maili ma znaczenie dla dalszego procesu. Typowe przypadki użycia:

* Oczyszczanie list e-mail przed kampaniami marketingowymi
* Weryfikacja zgłoszeń z formularzy w czasie rzeczywistym
* Utrzymanie higieny bazy danych
* Obniżenie współczynnika odrzuceń

## Czego potrzebujesz przed rozpoczęciem?

Przed zbudowaniem przepływu upewnij się, że masz następujące rzeczy:

* n8n ([pobierz n8n](https://n8n.io))
* Klucz API Enrow ([uzyskaj klucz](https://app.enrow.io/settings/api-keys))
* Lista e-mail (Google Sheet lub CSV)

Klucz API Enrow uwierzytelnia każde żądanie za pomocą nagłówka `x-api-key`. Zobacz [Uwierzytelnianie](/pl/authentication), aby dowiedzieć się, jak pobrać i przekazać klucz API, oraz [Kredyty i rozliczenia](/pl/credits-billing), aby zrozumieć, jak zużywane są kredyty weryfikacyjne.

## Jak skonfigurować arkusz Google Sheet?

Utwórz arkusz z adresami e-mail i pustymi kolumnami na wyniki:

| Email                                         | Status | Deliverable | Risk Factors |
| --------------------------------------------- | ------ | ----------- | ------------ |
| [john@example.com](mailto:john@example.com)   |        |             |              |
| [invalid@fake.com](mailto:invalid@fake.com)   |        |             |              |
| [temp@tempmail.com](mailto:temp@tempmail.com) |        |             |              |

## Jak zbudować przepływ w 5 minut?

Najszybsza droga to zaimportowanie gotowego przepływu, skonfigurowanie poświadczeń i jego uruchomienie.

### Krok 1: Import przepływu

Skopiuj i zaimportuj ten przepływ do n8n:

```json theme={null}
{
  "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}]]
    }
  }
}
```

### Krok 2: Konfiguracja

1. Zastąp `YOUR_SHEET_ID` identyfikatorem swojego arkusza Google Sheet
2. Dodaj swój klucz API Enrow do poświadczenia Header Auth
3. Najpierw przetestuj na kilku adresach e-mail

### Krok 3: Uruchomienie

1. Kliknij **"Execute Workflow"**
2. Poczekaj na zakończenie weryfikacji
3. Sprawdź wyniki w swoim arkuszu Google Sheet

## Jak zbudować przepływ krok po kroku?

Jeśli wolisz budować przepływ węzeł po węźle, postępuj zgodnie ze szczegółowym przewodnikiem poniżej.

### Krok 1: Odczyt listy e-mail

**Google Sheets:**

1. Dodaj węzeł **"Google Sheets"**
2. Operacja: **Read**
3. Wybierz swój arkusz kalkulacyjny
4. Zakres: `Sheet1!A:A` (tylko kolumna z adresami e-mail)

**Plik CSV:**

1. Dodaj węzeł **"Read Binary Files"**
2. Dodaj węzeł **"CSV to JSON"**
3. Zmapuj pole z adresem e-mail

### Krok 2: Tworzenie partii

Dla lepszej wydajności przetwarzaj adresy e-mail w partiach:

1. Dodaj węzeł **"Split In Batches"**
2. Rozmiar partii: **100** (lub mniej dla szybszych wyników)

To wysyła 100 adresów e-mail naraz do Enrow.

### Krok 3: Weryfikacja za pomocą Enrow Bulk API

1. Dodaj węzeł **"HTTP Request"**
2. Skonfiguruj:

```javascript theme={null}
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) }}
}
```

To natychmiast zwraca `batch_id`. Zobacz [Masowa weryfikacja e-maili](/pl/api-reference/email-verifier/verify-bulk), aby zapoznać się z pełną dokumentacją żądania i odpowiedzi.

### Krok 4: Oczekiwanie na wyniki

Dodaj węzeł **"Wait"** z opóźnieniem 10-15 sekund. W przypadku dużych partii odczekaj dłużej. Aby pobierać wyniki w oparciu o zdarzenia zamiast odpytywania, przekaż w żądaniu adres URL webhooka — zobacz [Jak działają webhooki](/pl/how-webhooks-work).

### Krok 5: Pobranie wyników

1. Dodaj węzeł **"HTTP Request"**
2. Skonfiguruj:

```javascript theme={null}
Method: GET
URL: https://api.enrow.io/email/verify/bulk?id={{$json["batch_id"]}}
Authentication: Header Auth (reuse credential)
```

Punkt końcowy [Pobierz masowe weryfikacje](/pl/api-reference/email-verifier/get-bulk-verifications) zwraca wyniki weryfikacji dla danej partii.

### Krok 6: Przetwarzanie wyników

Dodaj węzeł **"Function"**, aby kategoryzować adresy e-mail:

```javascript theme={null}
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)
    }
  }
];
```

### Krok 7: Aktualizacja arkusza Google Sheet

1. Dodaj węzeł **"Google Sheets"**
2. Operacja: **Update**
3. Zmapuj wyniki z powrotem do oryginalnych wierszy

Możesz też utworzyć osobne arkusze dla każdej kategorii:

* **Poprawne adresy e-mail** → arkusz "Valid"
* **Niepoprawne adresy e-mail** → arkusz "Invalid"
* **Ryzykowne adresy e-mail** → arkusz "Risky"

## Jak weryfikować adresy e-mail z formularza w czasie rzeczywistym?

Aby weryfikować adresy e-mail w momencie przesyłania formularzy przez użytkowników, uruchamiaj przepływ za pomocą webhooka i weryfikuj każdy adres osobno:

```mermaid theme={null}
graph LR
    A[Webhook] --> B[Receive Form Data]
    B --> C[Verify Email]
    C --> D{Valid?}
    D -->|Yes| E[Save to CRM]
    D -->|No| F[Reject Submission]
```

### Przepływ:

1. **Webhook Trigger**: Odbiera zgłoszenia z formularzy
2. **Extract Email**: Pobiera adres e-mail z danych formularza
3. **Verify**: Wywołuje Enrow `/email/verify/single`
4. **Decyzja**:
   * Poprawny → Zapisz w CRM (Salesforce, HubSpot itp.)
   * Niepoprawny → Wyślij odpowiedź z błędem lub oznacz do przeglądu

```javascript theme={null}
// 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'
      }
    }
  ];
}
```

Weryfikacja pojedynczego adresu korzysta z punktu końcowego [Weryfikacja pojedynczego e-maila](/pl/api-reference/email-verifier/verify-single). Aby przesyłać zaakceptowane leady do swojego CRM, zobacz integracje [HubSpot](/pl/integrations/crm/hubspot) i [Salesforce](/pl/integrations/crm/salesforce).

## Jak wyeksportować czystą listę?

Po skategoryzowaniu wyników możesz wyeksportować czystą listę w dowolnym formacie wymaganym przez Twój stos technologiczny.

### Opcja 1: Google Sheets

Już gotowe! Wyniki znajdują się w Twoim arkuszu.

### Opcja 2: Eksport do CSV

1. Dodaj węzeł **"Move Binary Data"**
2. Dodaj węzeł **"Write Binary File"**
3. Zapisz na dysku lub wyślij e-mailem

### Opcja 3: Wysyłka do platformy e-mail

1. Dodaj węzeł **"HTTP Request"** dla API swojej platformy e-mail
2. Przykłady:
   * **Mailchimp**: Dodaj do odbiorców
   * **SendGrid**: Zaktualizuj kontakty
   * **Customer.io**: Zsynchronizuj atrybuty

## Jak śledzić metryki weryfikacji?

Dodaj węzeł podsumowujący, aby obliczyć metryki dostarczalności dla każdego uruchomienia:

```javascript theme={null}
// 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 }];
```

Wyślij to podsumowanie do:

* **Slack**: Opublikuj podsumowanie na kanale
* **Email**: Raporty dzienne/tygodniowe
* **Baza danych**: Śledzenie w czasie

## Jak zmniejszyć zużycie kredytów?

Weryfikacja zużywa kredyty na każdy adres e-mail, więc ogranicz pracę przed każdym uruchomieniem. Trzy taktyki pozwalają utrzymać niskie koszty.

### Usuwanie duplikatów przed weryfikacją

```javascript theme={null}
// 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 } }));
```

Usuwanie duplikatów oszczędza kredyty, weryfikując każdy adres tylko raz.

### Buforowanie wyników

Przechowuj wyniki weryfikacji przez 30-90 dni:

```javascript theme={null}
// 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;
```

### Pomijanie już zweryfikowanych

Weryfikuj tylko adresy e-mail z pustym statusem:

```javascript theme={null}
// IF node
{{$json["Status"]}} === "" || {{$json["Status"]}} === null
```

Zobacz [Kredyty i rozliczenia](/pl/credits-billing), aby poznać koszt kredytów dla poszczególnych punktów końcowych.

## Najlepsze praktyki

<AccordionGroup>
  <Accordion title="Weryfikuj przed kampaniami">
    Zawsze weryfikuj swoją listę 24-48 godzin przed wysyłką. Ważność adresów e-mail może się zmienić.
  </Accordion>

  <Accordion title="Obsługa ryzykownych adresów e-mail">
    Zdecyduj na podstawie przypadku użycia:

    * **B2B**: Adresy funkcyjne (info@, support@) mogą być w porządku
    * **B2C**: Odrzucaj jednorazowe adresy e-mail
    * **Cold outreach**: Używaj tylko adresów e-mail o wysokiej pewności
  </Accordion>

  <Accordion title="Monitoruj dostarczalność">
    Śledź współczynnik odrzuceń po wysyłce. Jeśli jest wysoki, ponownie zweryfikuj swoją listę.
  </Accordion>

  <Accordion title="Regularne czyszczenie">
    Weryfikuj całą listę co 3-6 miesięcy, aby usunąć niepoprawne adresy e-mail.
  </Accordion>
</AccordionGroup>

## Rozwiązywanie problemów

**Weryfikacja trwa zbyt długo?**

* Zmniejsz rozmiar partii do 50-100 adresów e-mail
* Wydłuż czas oczekiwania między partiami

**Niektóre adresy e-mail wyświetlają się jako "risky"?**

* Sprawdź `metadata.is_disposable` - mogą to być tymczasowe adresy e-mail
* Przejrzyj `metadata.is_catch_all` - serwery typu accept-all

**Otrzymujesz ograniczenia liczby żądań?**

* Dodaj opóźnienia między partiami
* Zmniejsz rozmiar partii
* Zaktualizuj swój plan Enrow

Informacje o limitach żądań i obsłudze kodu `429` znajdziesz w [Limity zapytań](/pl/rate-limits). Kody statusu i formaty błędów opisano w [Obsługa błędów](/pl/error-handling).

## FAQ

<AccordionGroup>
  <Accordion title="Ile adresów e-mail mogę zweryfikować w jednej partii?">
    Użyj węzła Batch Emails, aby przetwarzać adresy e-mail w grupach (przykład używa rozmiaru partii 100). W przypadku bardzo dużych list podziel pracę na mniejsze partie i dodaj dłuższe oczekiwanie między żądaniami, aby uniknąć ograniczeń liczby żądań. Zobacz [Limity zapytań](/pl/rate-limits), aby poznać górne limity żądań.
  </Accordion>

  <Accordion title="Co oznaczają statusy valid, invalid i risky?">
    `valid` oznacza, że adres jest dostarczalny, `invalid` oznacza, że wysyłka zostałaby odrzucona, a `risky` obejmuje adresy typu catch-all, jednorazowe lub funkcyjne, gdzie dostarczalność jest niepewna. Użyj pól `metadata` (`is_disposable`, `is_role`, `is_catch_all`, `is_free`), aby zdecydować, jak traktować ryzykowne wyniki w swoim przypadku użycia.
  </Accordion>

  <Accordion title="Czy weryfikować pojedynczy e-mail, czy używać trybu masowego?">
    Używaj [Masowa weryfikacja e-maili](/pl/api-reference/email-verifier/verify-bulk) dla list i zaplanowanego czyszczenia oraz [Weryfikacja pojedynczego e-maila](/pl/api-reference/email-verifier/verify-single) dla sprawdzeń w czasie rzeczywistym, takich jak zgłoszenia z formularzy.
  </Accordion>

  <Accordion title="Jak uniknąć marnowania kredytów?">
    Usuwaj duplikaty adresów przed weryfikacją, buforuj wyniki przez 30-90 dni i pomijaj wiersze, które już mają status. Zobacz [Kredyty i rozliczenia](/pl/credits-billing), aby poznać koszty dla poszczególnych punktów końcowych.
  </Accordion>
</AccordionGroup>

## Następne kroki

<CardGroup cols={2}>
  <Card title="Wzbogacanie e-maili" icon="envelope-circle-check" href="/pl/playbooks/n8n/email-enrichment-workflow">
    Znajdź adresy e-mail dla swoich kontaktów za pomocą przepływu n8n.
  </Card>

  <Card title="Masowa weryfikacja e-maili" icon="code" href="/pl/api-reference/email-verifier/verify-bulk">
    Poznaj dokumentację punktu końcowego masowej weryfikacji.
  </Card>

  <Card title="Uwierzytelnianie" icon="key" href="/pl/authentication">
    Jak przekazać klucz API w nagłówku x-api-key.
  </Card>

  <Card title="Webhooki" icon="bell" href="/pl/how-webhooks-work">
    Otrzymuj automatyczne powiadomienia o zakończeniu partii.
  </Card>
</CardGroup>
