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

# Enriquecimiento de correos (n8n)

> Crea un flujo de trabajo de n8n que enriquece los contactos de Google Sheets con correos verificados usando las APIs Email Finder y Email Verifier de Enrow

Esta guía te muestra cómo crear un flujo de trabajo de n8n que lee contactos desde una hoja de Google Sheets, encuentra correos profesionales con el endpoint [Email Finder](/es/api-reference/email-finder/find-single), los verifica con el endpoint [Email Verifier](/es/api-reference/email-verifier/verify-single) y escribe los resultados de vuelta en la hoja, de forma automática y programada. ¿Eres nuevo en n8n con Enrow? Comienza con la [guía de introducción a n8n](/es/playbooks/n8n/getting-started).

## ¿Qué vas a crear?

Vas a crear un flujo de trabajo automatizado que:

1. **Lee contactos** desde una hoja de Google Sheets
2. **Encuentra correos** usando Email Finder de Enrow
3. **Verifica correos** para comprobar su entregabilidad con Email Verifier de Enrow
4. **Escribe resultados** de vuelta en la hoja de Google Sheets

**Tiempo de creación**: 15 minutos
**Dificultad**: Intermedia

## ¿Qué necesitas antes de empezar?

Antes de crear el flujo de trabajo, asegúrate de tener lo siguiente:

* n8n instalado ([obtener n8n](https://n8n.io))
* Una clave de API de Enrow — consulta [Autenticación](/es/authentication) para saber cómo obtener y usar tu clave
* Una cuenta de Google con una hoja de contactos

Cada búsqueda consume créditos, así que confirma tu saldo primero. Consulta [Créditos y facturación](/es/credits-billing) para conocer los costos por endpoint.

## ¿Cómo se configura la hoja de Google Sheets?

Crea una hoja de Google Sheets con estas columnas:

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

**Nombre de la hoja**: "Contacts"
**URL**: Guarda y copia la URL de la hoja

## ¿Cómo se ve el flujo de trabajo?

El flujo de trabajo se ejecuta de forma programada, lee cada contacto, encuentra y verifica el correo, y luego actualiza la hoja:

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

## ¿Cómo se crea el flujo de trabajo paso a paso?

Sigue estos pasos para ensamblar cada nodo en n8n.

### Paso 1: Configura la conexión con Google Sheets

1. Añade el nodo **"Google Sheets"**
2. Operación: **"Read"**
3. Autentícate con Google
4. Selecciona tu hoja de cálculo
5. Nombre de la hoja: **"Contacts"**
6. Rango: **"A:F"** (todas las columnas)

### Paso 2: Añade el disparador Cron

1. Añade el nodo **"Cron"** como disparador
2. Modo: **"Every Hour"** (o programación personalizada)
3. Conéctalo al nodo de Google Sheets

Esto procesará automáticamente las nuevas filas cada hora.

### Paso 3: Filtra los correos vacíos

1. Añade el nodo **"IF"** después de Google Sheets
2. Condición:
   * **Value 1**: `{{$json["Email"]}}`
   * **Operation**: `Is Empty`
3. Enruta "true" al siguiente paso (procesa solo los contactos sin correos)

### Paso 4: Encuentra el correo con Enrow

Envía cada contacto al endpoint de Email Finder. Autentícate con tu clave de API en el encabezado `x-api-key`.

1. Añade el 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"]}}"
}
```

### Paso 5: Espera el resultado

Email Finder se ejecuta de forma asíncrona, por lo que debes esperar a un webhook o consultar el endpoint GET para obtener el resultado.

**Opción A: Webhook (Recomendada)**

1. Añade el nodo **"Webhook"**
2. Path: `enrow-email-webhook`
3. Copia la URL del webhook
4. Actualiza el cuerpo JSON de Find Email:

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

Para conocer el payload que envía Enrow y cómo registrar endpoints, consulta [Cómo funcionan los webhooks](/es/how-webhooks-work).

**Opción B: Esperar y consultar**

1. Añade el nodo **"Wait"**: 5 segundos
2. Añade el nodo **"HTTP Request"**:
   * Method: `GET`
   * URL: `https://api.enrow.io/email/find/single?id={{$json["id"]}}`
3. Añade el nodo **"IF"** para comprobar el estado
4. Repite el ciclo si sigue en `ongoing`

Consulta el endpoint [Obtener resultado](/es/api-reference/email-finder/get-single-result) para conocer el formato completo de la respuesta.

### Paso 6: Verifica el correo

Pasa el correo encontrado a Email Verifier para confirmar su entregabilidad antes de escribirlo de vuelta.

1. Añade el nodo **"HTTP Request"** después de encontrar el correo
2. Configura:

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

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

### Paso 7: Actualiza la hoja de Google Sheets

1. Añade el nodo **"Google Sheets"**
2. Operación: **"Update"**
3. Selecciona la misma hoja de cálculo
4. Nombre de la hoja: **"Contacts"**
5. Rango: **Match row** (usa el índice de fila de los datos originales)
6. Mapea los campos:
   * **Email**: `{{$json["email"]}}`
   * **Status**: `{{$json["confidence"]}}`
   * **Verified**: `{{$json["status"]}}`

## ¿Dónde está el JSON completo del flujo de trabajo?

Importa el JSON de abajo para obtener el flujo de trabajo completo en un solo paso.

<Note>
  Importa este flujo de trabajo para empezar de inmediato. ¡Solo actualiza tus claves de API!
</Note>

<details>
  <summary>Haz clic para ver el JSON completo del flujo de trabajo</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>

## ¿Cómo puedes mejorar el flujo de trabajo?

Una vez que el flujo de trabajo base funcione, estas adiciones lo hacen más robusto y eficiente en costos.

### Añade manejo de errores

1. Añade el nodo **"Error Trigger"**
2. Añade el nodo **"Send Email"** o **"Slack"** para notificar cuando haya errores
3. Registra las filas fallidas en una hoja separada

Para conocer los códigos de estado que puedes encontrar y cómo reaccionar ante ellos, consulta [Manejo de errores](/es/error-handling) y [Códigos de estado](/es/status-codes).

### Procesa en lotes

Para un mejor rendimiento con muchos contactos, cambia de búsquedas individuales a un lote:

1. Cambia el nodo Find Email para usar `/email/find/bulk`
2. Agrupa los contactos en grupos de 100
3. Procésalos todos a la vez en lugar de uno por uno

Ejemplo de solicitud en lote:

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

El endpoint [Encontrar correos](/es/api-reference/email-finder/find-bulk) acepta hasta 5.000 búsquedas por lote.

### Añade verificación condicional

Verifica solo los correos de alta confianza para ahorrar créditos:

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

Esto ahorra créditos al omitir la verificación de los correos inciertos.

## ¿Cuándo deberías usar este flujo de trabajo?

Este flujo de trabajo es ideal para:

* **Equipos de ventas**: Enriquecer listas de prospectos antes de la prospección
* **Reclutadores**: Encontrar la información de contacto de los candidatos
* **Especialistas en marketing**: Crear listas de correo a partir de bases de datos de empresas
* **Equipos de datos**: Limpiar y enriquecer datos del CRM

## ¿Cuáles son las mejores prácticas?

<AccordionGroup>
  <Accordion title="Límites de tasa">
    Si procesas listas grandes (más de 1000 contactos):

    * Usa los endpoints en lote
    * Añade retrasos entre lotes
    * O actualiza tu plan de Enrow

    Consulta [Límites de tasa](/es/rate-limits) para conocer los umbrales de solicitudes actuales.
  </Accordion>

  <Accordion title="Calidad de los datos">
    * Verifica siempre los correos antes de usarlos
    * Comprueba las puntuaciones de confianza
    * Elimina los resultados de baja calidad
  </Accordion>

  <Accordion title="Optimización de costos">
    * Elimina los contactos duplicados antes de procesarlos
    * Almacena en caché los resultados para evitar volver a buscar
    * Usa lógica condicional para omitir llamadas innecesarias a la API
  </Accordion>

  <Accordion title="Recuperación ante errores">
    * Registra todas las respuestas de la API
    * Haz seguimiento de los enriquecimientos fallidos
    * Reintenta automáticamente las búsquedas fallidas
  </Accordion>
</AccordionGroup>

## ¿Cómo se solucionan los problemas comunes?

**¿El flujo de trabajo no se ejecuta automáticamente?**

* Comprueba que el disparador Cron esté activado
* Verifica que la programación sea correcta

**¿No se encuentran correos?**

* Comprueba que los dominios de las empresas sean correctos
* Verifica que los nombres estén escritos correctamente
* Prueba solo con el dominio de la empresa (sin nombres)

**¿La hoja no se actualiza?**

* Comprueba los permisos de Google Sheets
* Verifica que el rango coincida con tus datos
* Prueba el nodo Update manualmente

## FAQ

<AccordionGroup>
  <Accordion title="¿Necesito un webhook o puedo simplemente consultar los resultados?">
    Ambos funcionan. Email Finder se ejecuta de forma asíncrona, por lo que puedes registrar un webhook en el campo `settings.webhook` (Opción A) o consultar el endpoint [Obtener resultado](/es/api-reference/email-finder/get-single-result) con un temporizador (Opción B). Se recomiendan los webhooks porque evitan solicitudes de consulta innecesarias y devuelven los resultados en cuanto la búsqueda se completa. Consulta [Cómo funcionan los webhooks](/es/how-webhooks-work).
  </Accordion>

  <Accordion title="¿Cuántos créditos usa el flujo de trabajo?">
    Cada búsqueda de Email Finder y cada comprobación de Email Verifier consume créditos por llamada. Ejecutar ambos en cada contacto usa más créditos que solo buscar, así que añade verificación condicional para omitir los correos inciertos. Para conocer los costos exactos por endpoint, consulta [Créditos y facturación](/es/credits-billing).
  </Accordion>

  <Accordion title="¿Cómo autentico los nodos HTTP Request?">
    Usa la credencial Header Auth de n8n con el nombre de encabezado `x-api-key` y tu clave de API de Enrow como valor, y luego reutiliza la misma credencial en todos los nodos de Enrow. Encontrarás todos los detalles en [Autenticación](/es/authentication).
  </Accordion>

  <Accordion title="¿Qué pasa si tengo miles de contactos?">
    Cambia el nodo Find Email al endpoint [Encontrar correos](/es/api-reference/email-finder/find-bulk), que acepta hasta 5.000 búsquedas por lote, y mantente dentro de los [límites de tasa](/es/rate-limits) de tu plan.
  </Accordion>
</AccordionGroup>

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Flujo de verificación" icon="shield-check" href="/es/playbooks/n8n/lead-verification-workflow">
    Verifica listas de correos existentes con n8n y Enrow.
  </Card>

  <Card title="Encontrar correo" icon="envelope" href="/es/api-reference/email-finder/find-single">
    Explora el endpoint de Email Finder usado en este flujo de trabajo.
  </Card>

  <Card title="Verificar correo" icon="circle-check" href="/es/api-reference/email-verifier/verify-single">
    Comprueba si una dirección de correo es válida y entregable.
  </Card>

  <Card title="Webhooks" icon="bell" href="/es/how-webhooks-work">
    Recibe notificaciones automáticas cuando una búsqueda se completa.
  </Card>
</CardGroup>
