Chat
Ask me anything
Ithy Logo
Sign in to save

🚀 Automatiza Gmail y Google Sheets: ¡Tu Guía Definitiva con n8n y JSON!

Aprende a extraer remitentes de correos diarios y registrarlos automáticamente con la fecha actual usando n8n.

automatizar-gmail-google-sheets-n8n-rbs8pslp

En la era digital, la eficiencia es clave. Gestionar manualmente la información de correos electrónicos puede consumir un tiempo valioso. Afortunadamente, herramientas como n8n permiten automatizar estos procesos. Esta guía te mostrará cómo configurar un flujo de trabajo (workflow) en n8n para acceder a tu cuenta de Gmail, revisar los correos recibidos en el día (por ejemplo, hoy, 12 de mayo de 2025), extraer las direcciones de los remitentes y guardar esta información, junto con la fecha actual en formato día/mes/año, en una hoja de Google Sheets. ¡Todo esto con un "clic" o de forma programada!

Principales Ventajas de Esta Automatización

  • Automatización Completa: Configura un flujo que se ejecute automáticamente para procesar tus correos de Gmail y actualizar Google Sheets sin intervención manual.
  • Extracción Precisa: Aprende a aislar las direcciones de correo de los remitentes y a formatear la fecha actual para un registro ordenado y coherente.
  • Control Flexible: Utiliza disparadores manuales para pruebas o programados para una operación diaria, adaptando n8n a tus necesidades específicas de flujo de trabajo.

Entendiendo el Flujo de Trabajo en n8n

n8n es una poderosa herramienta de automatización de flujos de trabajo de código abierto que te permite conectar diferentes aplicaciones y servicios para realizar tareas complejas sin necesidad de escribir código extenso. Nuestro objetivo es crear un workflow que consista en los siguientes nodos principales:

mindmap root["Automatización Gmail a Google Sheets con n8n"] Disparador["1. Configurar Disparador
(Manual o Programado)"] Manual["Pruebas y Ejecución Bajo Demanda"] Programado["Ejecución Diaria Automática
(Recomendado)"] Gmail["2. Acceder a Correos de Gmail"] CredencialesG["Autenticación OAuth2 con Google"] FiltroFecha["Buscar correos del día actual
(ej. 12/05/2025)"] Procesamiento["3. Procesar Datos de Correos"] Extraccion["Extraer dirección de email del remitente"] FormatoFecha["Obtener fecha actual (dd/mm/aaaa)"] GoogleSheets["4. Guardar en Google Sheets"] CredencialesS["Autenticación OAuth2 con Google"] Escritura["Añadir remitente y fecha
como nueva fila en la hoja"]

Este diagrama ilustra la secuencia de operaciones: el flujo se inicia con un disparador, luego accede a Gmail para obtener los correos, procesa la información para extraer los datos relevantes y finalmente los escribe en una hoja de Google Sheets.


Configuración Paso a Paso del Workflow en n8n

A continuación, detallamos cada paso para construir este flujo de trabajo en tu instancia de n8n.

Paso 1: Configuración de Credenciales

Antes de empezar, asegúrate de tener configuradas las credenciales OAuth2 tanto para Gmail como para Google Sheets en n8n. Esto requiere tener un proyecto en Google Cloud Platform con las APIs de Gmail y Google Sheets habilitadas.

Creación de Credenciales en Google Cloud Platform (GCP)

  1. Ve a la Consola de Google Cloud Platform.
  2. Crea un nuevo proyecto o selecciona uno existente.
  3. Habilita la "Gmail API" y la "Google Sheets API" para tu proyecto.
  4. Ve a "Credenciales", haz clic en "Crear credenciales" y selecciona "ID de cliente de OAuth".
  5. Configura el tipo de aplicación como "Aplicación web".
  6. Añade los URIs de redireccionamiento autorizados. Para n8n, usualmente es la URL de tu instancia de n8n seguida de /rest/oauth2-credential/callback. Por ejemplo: https://tu-dominio-n8n.com/rest/oauth2-credential/callback.
  7. Guarda el ID de cliente y el Secreto del cliente. Los necesitarás en n8n.

Configuración de Credenciales en n8n

  1. En n8n, ve a "Credentials" en el menú lateral izquierdo.
  2. Haz clic en "Add credential".
  3. Busca "Google OAuth2 API" y selecciónala.
  4. Ingresa el ID de cliente y el Secreto del cliente obtenidos de GCP.
  5. Define los scopes necesarios. Para Gmail: https://mail.google.com/ o https://www.googleapis.com/auth/gmail.readonly. Para Google Sheets: https://www.googleapis.com/auth/spreadsheets.
  6. Guarda las credenciales. Repite el proceso para ambas (puedes usar la misma credencial de Google OAuth2 si los scopes son compatibles o crear dos separadas).

Paso 2: Nodo Disparador (Trigger)

El flujo de trabajo necesita un disparador para iniciarse. Tienes varias opciones:

  • Manual Trigger: Ideal para pruebas o si deseas ejecutar el flujo bajo demanda ("trigger click"). Simplemente añade un nodo "Manual Trigger".
  • Schedule Trigger: Recomendado para esta tarea, ya que permite ejecutar el flujo automáticamente en intervalos regulares (por ejemplo, una vez al día para revisar los correos del día). Configura la expresión CRON para la frecuencia deseada (ej. 0 0 * * * para ejecutar todos los días a medianoche).

Para este ejemplo, nos enfocaremos en el Schedule Trigger para una automatización diaria.

Comparativa de Tipos de Disparadores en n8n

El gráfico de radar anterior compara tres tipos de disparadores comunes en n8n según varios criterios. Para nuestra tarea de revisar correos diarios, el "Schedule Trigger" ofrece el mejor balance entre automatización y configuración para ejecuciones recurrentes.

Paso 3: Nodo Gmail

Añade un nodo "Gmail" a tu flujo de trabajo.

Interfaz de Gmail mostrando una bandeja de entrada organizada

Ejemplo de una bandeja de entrada de Gmail, de donde extraeremos los correos.

Configuración del Nodo Gmail:

  • Credential for Google OAuth2 API: Selecciona las credenciales de Gmail que configuraste.
  • Resource: Selecciona Message.
  • Operation: Selecciona Search (o List en versiones antiguas, Get Many también puede ser una opción). Esto te permitirá buscar correos.
  • Query: Aquí es donde filtras los correos del día actual. Usa una expresión de n8n para la fecha dinámica. Una consulta robusta para obtener correos recibidos "hoy" (por ejemplo, el 12 de mayo de 2025) sería: after:{{ $today.toFormat('yyyy/MM/dd') }} before:{{ $today.plus({days:1}).toFormat('yyyy/MM/dd') }} Esto buscará correos recibidos desde el inicio del día actual hasta antes del inicio del día siguiente.
  • Return All: Actívalo si esperas muchos correos y quieres que el nodo los devuelva todos (ten en cuenta los límites de la API).
  • Options -> Simplify Output: Puedes activarlo para obtener una salida más limpia.

Paso 4: Nodo de Función (Function)

El nodo Gmail devolverá una lista de correos. Ahora necesitas procesar esta lista para extraer la dirección del remitente de cada correo y obtener la fecha actual en el formato deseado (dd/mm/aaaa).

Configuración del Nodo Function:

Añade un nodo "Function". En el campo "Function Code" (JavaScript), introduce el siguiente código:


// 'items' es el array de objetos de correo provenientes del nodo Gmail
const resultados = [];
// Obtener la fecha actual en formato dd/mm/yyyy. Para hoy 12 de mayo de 2025, será "12/05/2025"
const fechaActual = new Date().toLocaleDateString('es-ES', { day: '2-digit', month: '2-digit', year: 'numeric' });

for (const item of items) {
  // El campo 'from' usualmente contiene "Nombre del Remitente <email@ejemplo.com>"
  // o solo "email@ejemplo.com"
  let remitenteEmail = item.json.from;

  if (remitenteEmail) {
    const match = remitenteEmail.match(/<(.+?)>/);
    if (match && match[1]) {
      remitenteEmail = match[1]; // Extrae solo la dirección de correo
    }
    // Opcional: convertir a minúsculas para evitar duplicados por mayúsculas/minúsculas
    remitenteEmail = remitenteEmail.toLowerCase();
    resultados.push({ email: remitenteEmail, fecha: fechaActual });
  }
}

// Opcional: Si solo quieres una entrada por remitente único por día
const uniqueResultados = [];
const seenEmails = new Set();
for (const res of resultados) {
  if (!seenEmails.has(res.email)) {
    uniqueResultados.push({ json: res }); // Asegúrate de que la salida sea {json: {campo1: valor1, ...}}
    seenEmails.add(res.email);
  }
}
return uniqueResultados; // O 'return resultados.map(r => ({json: r}));' si no necesitas únicos
    

Este código itera sobre cada correo, extrae la dirección del remitente del campo from, la formatea si es necesario, y la combina con la fecha actual. Finalmente, devuelve una lista de objetos, cada uno conteniendo un email y una fecha.

Paso 5: Nodo Google Sheets

El último paso es enviar estos datos a tu hoja de Google Sheets.

Ejemplo de una hoja de Google Sheets con columnas para Email y Fecha

Hoja de Google Sheets donde se registrarán los remitentes y las fechas.

Configuración del Nodo Google Sheets:

  • Credential for Google OAuth2 API: Selecciona tus credenciales de Google Sheets.
  • Operation: Elige Append or Update Row. Si solo quieres añadir nuevas filas, Append Row es la opción (en versiones más recientes, puede ser Row -> Append / Update).
  • Spreadsheet ID: Introduce el ID de tu hoja de Google Sheets. Puedes encontrarlo en la URL de la hoja (ej. https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit).
  • Sheet Name: Especifica el nombre de la hoja dentro del archivo (ej. Hoja1 o Sheet1).
  • Columns / Fields: Mapea los datos. Si tu hoja tiene columnas tituladas "EmailRemitente" y "FechaRegistro", puedes mapear los campos del nodo Function:
    • EmailRemitente: {{ $json.email }}
    • FechaRegistro: {{ $json.fecha }}
    Asegúrate de que los nombres de las columnas en la hoja de cálculo coincidan con los que configuras aquí o que la opción "Map Columns By Header" esté activa si es aplicable.

Ejemplo de JSON para el Workflow en n8n

Puedes importar el siguiente JSON en n8n para obtener una plantilla base de este workflow. Recuerda reemplazar los placeholders como TU_ID_CREDENCIALES_GMAIL, TU_ID_CREDENCIALES_GOOGLE_SHEETS, y TU_ID_HOJA_CALCULO con tus propios valores.


{
  "name": "Gmail Remitentes a Google Sheets Diario",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "mode": "cron",
          "value": "0 1 * * *"
        }
      },
      "id": "0c6f4f8c-8275-4f55-826a-7a7e1b7d3d5f",
      "name": "Schedule Trigger (Diario 1 AM)",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.1,
      "position": [
        480,
        300
      ]
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "operation": "search",
        "query": "after:{{ $today.toFormat('yyyy/MM/dd') }} before:{{ $today.plus({days:1}).toFormat('yyyy/MM/dd') }}",
        "returnAll": true,
        "options": {}
      },
      "id": "c8e4a1b2-3f7d-4a9b-8c1e-5d0f2a9b3c4d",
      "name": "Gmail - Buscar Correos Hoy",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 3,
      "position": [
        720,
        300
      ],
      "credentials": {
        "googleOAuth2Api": {
          "id": "TU_ID_CREDENCIALES_GMAIL",
          "name": "Credencial Gmail"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const resultados = [];\nconst fechaActual = new Date().toLocaleDateString('es-ES', { day: '2-digit', month: '2-digit', year: 'numeric' }); // Formato dd/mm/aaaa para hoy 12/05/2025\n\nfor (const item of items) {\n  let remitenteEmail = item.json.from;\n  if (remitenteEmail) {\n    const match = remitenteEmail.match(/<(.+?)>/);\n    if (match && match[1]) {\n      remitenteEmail = match[1];\n    }\n    remitenteEmail = remitenteEmail.toLowerCase();\n    resultados.push({ json: { email_remitente: remitenteEmail, fecha_registro: fechaActual } });\n  }\n}\n\n// Para evitar duplicados de remitentes en la misma ejecución\nconst uniqueEmails = new Set();\nconst itemsUnicos = resultados.filter(item => {\n  const isDuplicate = uniqueEmails.has(item.json.email_remitente);\n  uniqueEmails.add(item.json.email_remitente);\n  return !isDuplicate;\n});\n\nreturn itemsUnicos;"
      },
      "id": "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d",
      "name": "Function - Extraer Remitente y Fecha",
      "type": "n8n-nodes-base.function",
      "typeVersion": 2,
      "position": [
        960,
        300
      ]
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "documentId": {
          "__rl": true,
          "value": "TU_ID_HOJA_CALCULO",
          "mode": "url"
        },
        "sheetName": {
          "__rl": true,
          "value": "Hoja1",
          "mode": "list"
        },
        "operation": "appendSheet",
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "A": "={{ $json.email_remitente }}",
            "B": "={{ $json.fecha_registro }}"
          }
        },
        "options": {
          "valueInputMode": "USER_ENTERED"
        }
      },
      "id": "b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e",
      "name": "Google Sheets - Añadir Fila",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4,
      "position": [
        1200,
        300
      ],
      "credentials": {
        "googleOAuth2Api": {
          "id": "TU_ID_CREDENCIALES_GOOGLE_SHEETS",
          "name": "Credencial Google Sheets"
        }
      }
    }
  ],
  "connections": {
    "Schedule Trigger (Diario 1 AM)": {
      "main": [
        [
          {
            "node": "Gmail - Buscar Correos Hoy",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gmail - Buscar Correos Hoy": {
      "main": [
        [
          {
            "node": "Function - Extraer Remitente y Fecha",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Function - Extraer Remitente y Fecha": {
      "main": [
        [
          {
            "node": "Google Sheets - Añadir Fila",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {},
  "versionId": "1.0",
  "meta": {
    "templateCredsSetupCompleted": true
  }
}
    

Nota Importante sobre el JSON: El formato exacto del JSON puede variar ligeramente entre versiones de n8n. Este es un ejemplo funcional basado en estructuras comunes. Asegúrate de que el id de las credenciales en el JSON coincida con el ID de tus credenciales configuradas en n8n.


Visualización del Proceso con un Video Tutorial

Para complementar esta guía, el siguiente video muestra un ejemplo de cómo crear un flujo de trabajo en n8n para conectar Gmail con Google Sheets. Aunque los detalles específicos pueden variar, te dará una idea visual del proceso de construcción de workflows en n8n.

Este video, "27 Workflow gmail to sheets | N8N | BOTS AND AUTOMATIONS", ofrece una demostración práctica que puede ser de gran utilidad para entender cómo se conectan los nodos y se configuran las operaciones entre Gmail y Google Sheets en n8n.


Resumen de Nodos y Configuraciones Clave

La siguiente tabla resume los nodos utilizados en este workflow y sus parámetros más importantes:

Nodo n8n Descripción Parámetros Clave
Schedule Trigger Inicia el flujo de trabajo de forma programada (ej. diariamente). Modo: cron, Valor: expresión CRON (ej. "0 1 * * *" para la 1 AM).
Gmail Accede a Gmail para leer correos electrónicos. Credenciales, Operación: Search, Consulta: para filtrar por fecha actual (ej. after:{{ $today.toFormat('yyyy/MM/dd') }} before:{{ $today.plus({days:1}).toFormat('yyyy/MM/dd') }}).
Function Procesa los datos: extrae la dirección de email del remitente y formatea la fecha actual. Código JavaScript: lógica para la extracción y formato de datos.
Google Sheets Escribe los datos extraídos en una hoja de cálculo de Google. Credenciales, Operación: Append/Update Row, ID de Hoja de Cálculo, Nombre de Hoja, Mapeo de Columnas/Valores.

Preguntas Frecuentes (FAQ)

¿Cómo configuro el Schedule Trigger para que se ejecute a una hora específica todos los días?

En el nodo Schedule Trigger, selecciona "CRON" como modo. Luego, en el campo "Valor", introduce una expresión CRON. Por ejemplo, para ejecutarlo todos los días a las 8:00 AM, usa 0 8 * * *. Puedes usar un generador de CRON online para crear la expresión que necesites.

¿Cómo obtengo el ID de mi hoja de Google Sheets?

Abre tu hoja de Google Sheets en el navegador. La URL tendrá un formato similar a https://docs.google.com/spreadsheets/d/AQUI_VA_EL_ID_LARGO/edit#gid=0. La cadena de caracteres larga entre /d/ y /edit es el ID de tu hoja de cálculo.

¿Qué hago si tengo problemas con las credenciales de Gmail o Google Sheets?

Asegúrate de que:

  1. Las APIs de Gmail y Google Sheets estén habilitadas en tu proyecto de Google Cloud Platform.
  2. El ID de cliente y el secreto del cliente sean correctos en n8n.
  3. Los URIs de redireccionamiento autorizados en GCP incluyan la URL correcta de tu instancia de n8n.
  4. Los scopes solicitados en n8n sean los adecuados para las operaciones que deseas realizar (leer correos, escribir en hojas).
  5. Si tu aplicación en GCP está en modo "Pruebas", añade tu cuenta de Google como usuario de prueba. Si está en "Producción", debe estar verificada por Google si es para uso externo.
¿Puedo extraer otra información del correo además del remitente?

¡Sí! El nodo Gmail devuelve mucha información sobre cada correo (asunto, cuerpo, fecha de recepción, archivos adjuntos, etc.). Puedes modificar el código del nodo Function para extraer cualquier campo que necesites del objeto JSON del correo (item.json) y añadirlo a los datos que se envían a Google Sheets.


Explora Más Posibilidades

Si deseas profundizar o explorar automatizaciones relacionadas, considera estas búsquedas:


Referencias


Last updated May 12, 2025

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI
Download Article
Delete Article