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

# Arricchimento email (n8n)

> Crea un workflow n8n che arricchisce i contatti di Google Sheets con email verificate usando le API Email Finder e Email Verifier di Enrow

Questa guida ti accompagna nella creazione di un workflow n8n che legge i contatti da un foglio Google, trova le email professionali con l'endpoint [Email Finder](/it/api-reference/email-finder/find-single), le verifica con l'endpoint [Email Verifier](/it/api-reference/email-verifier/verify-single) e riscrive i risultati nel foglio — automaticamente, secondo una pianificazione. Sei alle prime armi con n8n e Enrow? Inizia con la [guida introduttiva a n8n](/it/playbooks/n8n/getting-started).

## Cosa costruirai?

Costruirai un workflow automatizzato che:

1. **Legge i contatti** da un foglio Google
2. **Trova le email** usando Enrow Email Finder
3. **Verifica le email** per la recapitabilità con Enrow Email Verifier
4. **Riscrive i risultati** nel foglio Google

**Tempo di realizzazione**: 15 minuti
**Difficoltà**: Intermedia

## Di cosa hai bisogno prima di iniziare?

Prima di costruire il workflow, assicurati di avere quanto segue:

* n8n installato ([scarica n8n](https://n8n.io))
* Una chiave API Enrow — consulta [Autenticazione](/it/authentication) per scoprire come ottenere e usare la tua chiave
* Un account Google con un foglio di contatti

Ogni ricerca consuma crediti, quindi controlla prima il tuo saldo. Consulta [Crediti e fatturazione](/it/credits-billing) per i costi per endpoint.

## Come si configura il foglio Google?

Crea un foglio Google con queste colonne:

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

**Nome del foglio**: "Contacts"
**URL**: Salva e copia l'URL del foglio

## Che aspetto ha il workflow?

Il workflow viene eseguito secondo una pianificazione, legge ogni contatto, trova e verifica l'email, quindi aggiorna il foglio:

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

## Come si costruisce il workflow passo dopo passo?

Segui questi passaggi per assemblare ogni nodo in n8n.

### Passaggio 1: Configura la connessione a Google Sheets

1. Aggiungi il nodo **"Google Sheets"**
2. Operazione: **"Read"**
3. Autenticati con Google
4. Seleziona il tuo foglio di calcolo
5. Nome del foglio: **"Contacts"**
6. Intervallo: **"A:F"** (tutte le colonne)

### Passaggio 2: Aggiungi il trigger Cron

1. Aggiungi il nodo **"Cron"** come trigger
2. Modalità: **"Every Hour"** (o pianificazione personalizzata)
3. Collega al nodo Google Sheets

In questo modo le nuove righe verranno elaborate automaticamente ogni ora.

### Passaggio 3: Filtra le email vuote

1. Aggiungi il nodo **"IF"** dopo Google Sheets
2. Condizione:
   * **Value 1**: `{{$json["Email"]}}`
   * **Operation**: `Is Empty`
3. Instrada "true" al passaggio successivo (elabora solo i contatti senza email)

### Passaggio 4: Trova l'email con Enrow

Invia ogni contatto all'endpoint Email Finder. Autenticati con la tua chiave API nell'header `x-api-key`.

1. Aggiungi il nodo **"HTTP Request"**
2. Configura:

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

### Passaggio 5: Attendi il risultato

Email Finder viene eseguito in modo asincrono, quindi puoi attendere un webhook oppure interrogare l'endpoint GET per ottenere il risultato.

**Opzione A: Webhook (consigliata)**

1. Aggiungi il nodo **"Webhook"**
2. Path: `enrow-email-webhook`
3. Copia l'URL del webhook
4. Aggiorna il corpo JSON di Find Email:

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

Per il payload che Enrow invia e per sapere come registrare gli endpoint, consulta [Come funzionano i webhook](/it/how-webhooks-work).

**Opzione B: Attendi e interroga**

1. Aggiungi il nodo **"Wait"**: 5 secondi
2. Aggiungi il nodo **"HTTP Request"**:
   * Method: `GET`
   * URL: `https://api.enrow.io/email/find/single?id={{$json["id"]}}`
3. Aggiungi il nodo **"IF"** per controllare lo stato
4. Torna indietro nel ciclo se ancora `ongoing`

Consulta l'endpoint [Get Single Result](/it/api-reference/email-finder/get-single-result) per il formato completo della risposta.

### Passaggio 6: Verifica l'email

Passa l'email trovata a Email Verifier per confermarne la recapitabilità prima di riscriverla.

1. Aggiungi il nodo **"HTTP Request"** dopo che l'email è stata trovata
2. Configura:

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

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

### Passaggio 7: Aggiorna il foglio Google

1. Aggiungi il nodo **"Google Sheets"**
2. Operazione: **"Update"**
3. Seleziona lo stesso foglio di calcolo
4. Nome del foglio: **"Contacts"**
5. Intervallo: **Match row** (usa l'indice di riga dei dati originali)
6. Mappa i campi:
   * **Email**: `{{$json["email"]}}`
   * **Status**: `{{$json["confidence"]}}`
   * **Verified**: `{{$json["status"]}}`

## Dove si trova il JSON completo del workflow?

Importa il JSON qui sotto per ottenere l'intero workflow in un solo passaggio.

<Note>
  Importa questo workflow per iniziare subito. Devi solo aggiornare le tue chiavi API!
</Note>

<details>
  <summary>Clicca per visualizzare il JSON completo del 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>

## Come puoi migliorare il workflow?

Una volta che il workflow di base è in esecuzione, queste aggiunte lo rendono più robusto ed efficiente in termini di costi.

### Aggiungi la gestione degli errori

1. Aggiungi il nodo **"Error Trigger"**
2. Aggiungi il nodo **"Send Email"** o **"Slack"** per ricevere notifiche in caso di errori
3. Registra le righe non riuscite in un foglio separato

Per i codici di stato che potresti incontrare e per sapere come reagire, consulta [Gestione degli errori](/it/error-handling) e [Codici di stato](/it/status-codes).

### Elabora in blocco

Per prestazioni migliori con molti contatti, passa dalle ricerche singole a un batch:

1. Modifica il nodo Find Email per usare `/email/find/bulk`
2. Raggruppa i contatti in gruppi da 100
3. Elaborali tutti insieme invece di uno alla volta

Esempio di richiesta in blocco:

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

L'endpoint [Find Bulk Emails](/it/api-reference/email-finder/find-bulk) accetta fino a 5.000 ricerche per batch.

### Aggiungi la verifica condizionale

Verifica solo le email ad alta affidabilità per risparmiare crediti:

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

In questo modo si risparmiano crediti saltando la verifica delle email incerte.

## Quando dovresti usare questo workflow?

Questo workflow è adatto a:

* **Team di vendita**: Arricchire le liste di prospect prima dell'outreach
* **Recruiter**: Trovare le informazioni di contatto dei candidati
* **Marketer**: Creare liste di email dai database aziendali
* **Team dati**: Pulire e arricchire i dati del CRM

## Quali sono le best practice?

<AccordionGroup>
  <Accordion title="Limiti di frequenza">
    Se elabori liste di grandi dimensioni (oltre 1000 contatti):

    * Usa gli endpoint in blocco
    * Aggiungi ritardi tra i batch
    * Oppure effettua l'upgrade del tuo piano Enrow

    Consulta [Limiti di frequenza](/it/rate-limits) per le soglie di richieste attuali.
  </Accordion>

  <Accordion title="Qualità dei dati">
    * Verifica sempre le email prima di usarle
    * Controlla i punteggi di affidabilità
    * Rimuovi i risultati di bassa qualità
  </Accordion>

  <Accordion title="Ottimizzazione dei costi">
    * Deduplica i contatti prima dell'elaborazione
    * Memorizza in cache i risultati per evitare nuove ricerche
    * Usa la logica condizionale per saltare le chiamate API non necessarie
  </Accordion>

  <Accordion title="Recupero dagli errori">
    * Registra tutte le risposte delle API
    * Tieni traccia degli arricchimenti non riusciti
    * Riprova automaticamente le ricerche non riuscite
  </Accordion>
</AccordionGroup>

## Come si risolvono i problemi più comuni?

**Il workflow non viene eseguito automaticamente?**

* Verifica che il trigger Cron sia attivato
* Verifica che la pianificazione sia corretta

**Nessuna email trovata?**

* Verifica che i domini aziendali siano corretti
* Verifica che i nomi siano scritti correttamente
* Prova solo con il dominio aziendale (senza i nomi)

**Il foglio non si aggiorna?**

* Verifica le autorizzazioni di Google Sheets
* Verifica che l'intervallo corrisponda ai tuoi dati
* Testa manualmente il nodo Update

## FAQ

<AccordionGroup>
  <Accordion title="Ho bisogno di un webhook o posso semplicemente interrogare i risultati?">
    Entrambi funzionano. Email Finder viene eseguito in modo asincrono, quindi puoi registrare un webhook nel campo `settings.webhook` (Opzione A) oppure interrogare l'endpoint [Get Single Result](/it/api-reference/email-finder/get-single-result) a intervalli regolari (Opzione B). I webhook sono consigliati perché evitano richieste di polling inutili e restituiscono i risultati non appena la ricerca è completata. Consulta [Come funzionano i webhook](/it/how-webhooks-work).
  </Accordion>

  <Accordion title="Quanti crediti consuma il workflow?">
    Ogni ricerca di Email Finder e ogni controllo di Email Verifier consuma crediti per chiamata. Eseguire entrambi su ogni contatto consuma più crediti rispetto alla sola ricerca, quindi aggiungi la verifica condizionale per saltare le email incerte. Per i costi esatti per endpoint, consulta [Crediti e fatturazione](/it/credits-billing).
  </Accordion>

  <Accordion title="Come autentico i nodi HTTP Request?">
    Usa la credenziale Header Auth di n8n con il nome dell'header `x-api-key` e la tua chiave API Enrow come valore, quindi riutilizza la stessa credenziale in ogni nodo Enrow. Tutti i dettagli si trovano in [Autenticazione](/it/authentication).
  </Accordion>

  <Accordion title="E se ho migliaia di contatti?">
    Passa il nodo Find Email all'endpoint [Find Bulk Emails](/it/api-reference/email-finder/find-bulk), che accetta fino a 5.000 ricerche per batch, e rimani entro i [limiti di frequenza](/it/rate-limits) del tuo piano.
  </Accordion>
</AccordionGroup>

## Passaggi successivi

<CardGroup cols={2}>
  <Card title="Workflow di verifica" icon="shield-check" href="/it/playbooks/n8n/lead-verification-workflow">
    Verifica le liste di email esistenti con n8n ed Enrow.
  </Card>

  <Card title="Trova email" icon="envelope" href="/it/api-reference/email-finder/find-single">
    Esplora l'endpoint Email Finder usato in questo workflow.
  </Card>

  <Card title="Verifica email" icon="circle-check" href="/it/api-reference/email-verifier/verify-single">
    Controlla se un indirizzo email è valido e recapitabile.
  </Card>

  <Card title="Webhook" icon="bell" href="/it/how-webhooks-work">
    Ricevi notifiche automatiche al completamento di una ricerca.
  </Card>
</CardGroup>
