🚀 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.
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:
(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)
- Ve a la Consola de Google Cloud Platform.
- Crea un nuevo proyecto o selecciona uno existente.
- Habilita la "Gmail API" y la "Google Sheets API" para tu proyecto.
- Ve a "Credenciales", haz clic en "Crear credenciales" y selecciona "ID de cliente de OAuth".
- Configura el tipo de aplicación como "Aplicación web".
- 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. - Guarda el ID de cliente y el Secreto del cliente. Los necesitarás en n8n.
Configuración de Credenciales en n8n
- En n8n, ve a "Credentials" en el menú lateral izquierdo.
- Haz clic en "Add credential".
- Busca "Google OAuth2 API" y selecciónala.
- Ingresa el ID de cliente y el Secreto del cliente obtenidos de GCP.
- Define los scopes necesarios. Para Gmail:
https://mail.google.com/ohttps://www.googleapis.com/auth/gmail.readonly. Para Google Sheets:https://www.googleapis.com/auth/spreadsheets. - 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.
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(oListen versiones antiguas,Get Manytambié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.
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 Rowes la opción (en versiones más recientes, puede serRow -> 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.
Hoja1oSheet1). - 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 }}
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)
Explora Más Posibilidades
Si deseas profundizar o explorar automatizaciones relacionadas, considera estas búsquedas:
- ¿Cómo puedo automatizar el guardado de archivos adjuntos de Gmail a Google Drive usando n8n?
- ¿Es posible crear respuestas automáticas en Gmail basadas en el contenido del correo utilizando n8n y alguna herramienta de IA?
- ¿Cómo utilizar n8n para sincronizar contactos entre Google Contacts y una hoja de Google Sheets?
- ¿Cuál es la mejor manera de generar informes diarios desde datos en Google Sheets y enviarlos por correo electrónico usando n8n?
Referencias
Last updated May 12, 2025