Isabel Román
PPC & Digital Marketing Strategist
Contenido
No vamos a explicarte qué es n8n. Si estás aquí, ya lo sabes, ya lo has instalado, y probablemente tienes tres o cuatro workflows a medio construir pero que tal vez aún no han llegado a producción. ¿No? Ese es el problema: falta saber cómo hacerlo para que no se rompa.
En este artículo te compartimos una lista de 7 flujos que deberían estar corriendo en tu stack de marketing ahora mismo, con los nodos que necesitas, los errores típicos que puede hacer que fallen, y snippets que puedes adaptar rápidamente. Al final del todo, tienes las plantillas en JSON para importar.
Por qué n8n y no Zapier o Make (si eres técnico)
Si tu criterio de decisión es «que funcione sin tocar código», Zapier o Make te sirven. Pero si quieres y necesitas control sobre dónde viven tus datos o simplemente no quieres pagar por cada tarea que ejecutes, n8n es tu solución porque es: self-hosted, tiene nodos de código (JS y Python nativos), y tiene un modelo de coste que no escala con tu volumen de leads.
La diferencia no es «n8n es mejor». Es que resuelve un problema distinto al que resuelven Zapier o Make. Te lo mostramos:
| Característica | n8n | Zapier | Make |
|---|---|---|---|
| Hosting | Self-hosted o cloud | Solo cloud | Solo cloud |
| Código propio (JS/Python) | Sí, nativo | Limitado (código en pasos premium) | Limitado |
| Modelo de coste | Por ejecución (self-hosted: fijo/infra) | Por tarea | Por operación |
| Control de datos | Total (tus servidores) | Ninguno | Ninguno |
| Curva de entrada técnica | Media-alta | Baja | Baja-media |
| Ideal para | Equipos técnicos con volumen | No-técnicos, flujos simples | Punto intermedio |
Si tu volumen de automatizaciones crece rápido y tus datos son sensibles (CRM, leads cualificados, datos de cliente), el ahorro de coste y el control se vuelven argumento de negocio.
Las 7 automatizaciones
1. Captación y cualificación de leads (formulario → enriquecimiento IA → CRM → Slack)
Qué resuelve: el lead entra por un formulario y alguien tiene que copiarlo a mano al CRM, buscar la empresa en LinkedIn, y avisar al comercial. Ese «alguien» eres tú, o nadie, y entonces el lead se enfría.
Nodos/disparador:
- Trigger: Webhook (Typeform, formulario propio, o Form Triggernativo de n8n)
- HTTP Request a una API de enriquecimiento (Clearbit, Apollo, o un LLM con búsqueda web si no tienes presupuesto para APIs de enriquecimiento)
- Nodo de IA (OpenAI/Claude) para resumir la empresa y detectar sector/tamaño
- HTTP Request o nodo nativo del CRM (HubSpot, Pipedrive, Zoho)
- Slack (mensaje a canal de ventas con resumen)
Errores a vigilar:
- No poner un nodo IF que valide que el email no es corporativo/basura antes de gastar llamadas de enriquecimiento
- Enriquecimiento síncrono que bloquea la respuesta al usuario (usa Respond to Webhook inmediato y procesa el resto en background)
- No tener fallback si la API de enriquecimiento falla (el lead debe entrar al CRM igualmente, aunque sea sin enriquecer)
Snippet (nodo Function, validación de email corporativo):
javascript
const freeDomains = [‘gmail.com’,’hotmail.com’,’outlook.com’,’yahoo.com’];
const domain = $json.email.split(‘@’)[1];
return [{ json: { …$json, is_corporate: !freeDomains.includes(domain) } }];
2. Lead scoring automático con IA
Qué resuelve: el equipo comercial pierde tiempo llamando a leads fríos porque no hay o una priorización o cuesta hacerla. Un score automático te permitirá ordenar esa cola y así tener un procedimiento.
Nodos/disparador:
- Trigger: cada vez que el lead se actualiza en el CRM (webhook o polling)
- Nodo de código: cálculo de score por reglas duras (cargo, tamaño de empresa, fuente)
- Nodo de IA: score cualitativo sobre el contenido del formulario o del email (intención de compra, urgencia)
- Combinación de ambos scores → actualización del campo en CRM
- Condicional: si score > umbral, trigger de notificación inmediata
Errores a vigilar:
- Dejar que el score de IA sea el único criterio: combínalo siempre con reglas duras verificables para que el score no se convierta en ese parámetro que nadie confía
- No versionar el prompt de scoring: si cambias el prompt sin registrar cuándo, no puedes explicar por qué el histórico de scores no es comparable
- Rate limits del LLM en picos de tráfico: añade cola (nodo Wait + reintento) en vez de dejar que falle el workflow entero
Snippet:
// Recuperar datos del webhook/CRM y respuesta de la IA
const lead = $input.item.json;
const aiResponse = $node[«OpenAI»].json.message.content; // O payload de Claude
let hardScore = 0;
// 1. Reglas Duras (Verificables)
const cSuiteTitles = [‘ceo’, ‘cto’, ‘cmo’, ‘cio’, ‘founder’, ‘director’];
const currentTitle = (lead.job_title || »).toLowerCase();
if (cSuiteTitles.some(title => currentTitle.includes(title))) {
hardScore += 40;
}
if (lead.company_size && lead.company_size > 50) {
hardScore += 30;
}
// 2. Score de IA (Parseo seguro del JSON que devuelve el LLM)
let aiScore = 0;
try {
const parsedAi = typeof aiResponse === ‘string’ ? JSON.parse(aiResponse) : aiResponse;
aiScore = parsedAi.intent_score || 0; // Espera un entero de 0 a 30
} catch (error) {
aiScore = 0; // Fallback si el LLM no devolvió un JSON válido
}
// 3. Score Total
const totalScore = hardScore + aiScore;
return [{
json: {
…lead,
score_breakdown: {
hard_score: hardScore,
ai_score: aiScore,
total_score: totalScore
},
is_hot_lead: totalScore >= 70
}
}];
3. Nurturing y email marketing multicanal (email + WhatsApp)
Qué resuelve: las secuencias de nurturing paran en email porque montar WhatsApp a mano en cada herramienta puede ser algo tedioso. Con n8n podrás orquestar ambos canales desde una única lógica de negocio.
Nodos/disparador:
- Trigger: Schedule o evento del CRM (lead entra en etapa X)
- Nodo Switch: decide canal según preferencia del lead o comportamiento (abrió el último email? → WhatsApp; si no → email)
- Nodo de email transaccional (SendGrid, Postmark, SMTP)
- Nodo HTTP a la API de WhatsApp Business (o Twilio/360dialog)
- Nodo de espera + condición de salida (si responde, sale de la secuencia)
Errores a vigilar:
- No respetar ventanas de plantilla de WhatsApp Business (fuera de las 24h de conversación, necesitas plantillas pre-aprobadas, no texto libre)
- Duplicar envíos si el workflow se reejecuta tras un fallo, usa un nodo de idempotencia (comprobar en una base de datos/Airtable si ya se envió antes de disparar)
- Secuencias que no tienen salida por respuesta: el lead contesta y sigue recibiendo el paso 4 de la secuencia igualmente
Snippet:
// Evitar duplicados comprobando ejecuciones o registros previos
const lead = $input.item.json;
const now = new Date();
const lastContacted = lead.last_contacted_at ? new Date(lead.last_contacted_at) : null;
// Validar ventana de 24 horas para WhatsApp o cooldown general
const hoursSinceLastContact = lastContacted
? Math.abs(now – lastContacted) / 36e5
: 999;
let channel = ‘email’; // Canal por defecto
// Si prefiere WhatsApp y está dentro del rango seguro
if (lead.preferred_channel === ‘whatsapp’ && lead.phone_valid) {
channel = ‘whatsapp’;
}
// Lógica de salida / Idempotencia
const shouldSkip = hoursSinceLastContact < 24 || lead.has_replied === true;
return [{
json: {
lead_id: lead.id,
email: lead.email,
phone: lead.phone,
selected_channel: channel,
skip_execution: shouldSkip,
reason: shouldSkip ? ‘Respondió previamente o enfriamiento activo (<24h)’ : ‘OK’
}
}];
4. Sincronización de datos entre herramientas (source of truth)
Qué resuelve: el mismo dato de cliente vive en el CRM, en la plataforma de email, en la hoja de facturación y en el soporte; y cada uno tiene una versión distinta. ¿Es muy común, verdad? Sin una fuente que realmente lo aglutine todo, cada equipo trabaja con datos diferentes.
Nodos/disparador:
- Trigger: webhook o polling en la herramienta que designas como source of truth (normalmente el CRM)
- Nodo de transformación (Set/Function) que normaliza el esquema de campos
- Nodos de escritura hacia cada sistema destino (email marketing, facturación, soporte)
- Nodo de log (Airtable/Postgres) que registra cada sincronización para auditoría
Errores a vigilar:
- Sincronización bidireccional sin control de conflictos: dos sistemas editando el mismo campo genera bucles infinitos de actualización
- No normalizar formatos (teléfono, fecha, país) antes de escribir: cada herramienta tiene su propio estándar y los rechazos silenciosos son el fallo más común
- No loguear qué se sincronizó y cuándo
Snippet:
// Recibe datos en bruto de cualquier CRM y los estandariza antes de escribir
const rawData = $input.item.json;
// Función de limpieza de teléfono (ISO E.164 básico)
function normalizePhone(phone) {
if (!phone) return null;
const cleaned = phone.replace(/[^\d+]/g, »);
return cleaned.startsWith(‘+’) ? cleaned : `+34${cleaned}`; // Ejemplo prefijo España
}
// Normalización de campos
const normalizedLead = {
crm_id: rawData.id || rawData.lead_id,
email: (rawData.email || »).trim().toLowerCase(),
first_name: rawData.first_name || rawData.name?.split(‘ ‘)[0] || ‘Cliente’,
last_name: rawData.last_name || rawData.name?.split(‘ ‘).slice(1).join(‘ ‘) || »,
phone: normalizePhone(rawData.phone || rawData.mobile),
country_code: (rawData.country || ‘ES’).toUpperCase(),
synced_at: new Date().toISOString()
};
return [{ json: normalizedLead }];
5. Cross-posting y distribución de contenido (RSS/YouTube → redes con resumen IA)
Qué resuelve: publicas en el blog o subes un vídeo y luego tienes que trocearlo a mano para LinkedIn, Instagram, newsletter. Ese trabajo manual suele ser de los primeros que, cuando hay más carga de trabajo, se abandona.
Nodos/disparador:
- Trigger: RSS Feed Read (blog) o YouTube Data API (nuevo vídeo)
- Nodo de IA: genera resumen adaptado por plataforma (no el mismo texto para todas. LinkedIn pide ángulo profesional, Instagram pide gancho emocional)
- Nodo HTTP hacia cada API social (LinkedIn API, Buffer/Metricool como intermediario si prefieres no pelear con las APIs nativas)
- Nodo de aprobación humana antes de publicar (Slack con botones de aprobar/editar). No lo publiques todo en automático
Errores a vigilar:
- Publicar sin revisión humana: el resumen de IA a veces sesga el mensaje o pierde matices de marca
- No diferenciar el prompt por plataforma: un mismo texto genérico en las tres redes es justo lo que este queremos transmitirte en este artículo que hay que evitar
- No controlar duplicados si el RSS reordena entradas: usa un nodo que registre IDs ya procesados
Snippet:
// Previene volver a publicar contenido procesado recientemente
const newItem = $input.item.json;
// Simulación de lectura de IDs procesados (p. ej. traídos de un nodo Postgres/Airtable previo)
const processedIds = $node[«Get Processed IDs»].json.map(row => row.item_id);
const currentId = newItem.guid || newItem.id || newItem.link;
const isDuplicate = processedIds.includes(currentId);
if (isDuplicate) {
// Retornar vacío o flag para detener la rama sin romper el workflow
return [];
}
return [{
json: {
item_id: currentId,
title: newItem.title,
link: newItem.link,
published_date: newItem.pubDate || newItem.isoDate,
ready_for_ai: true
}
}];
6. Reporting automatizado (GA4 → dashboard / informe semanal)
Qué resuelve: cada lunes alguien exporta GA4 a mano, monta una tabla en Sheets y escribe un resumen para dirección. Es un trabajo mecánico que no debería necesitar un recurso físico.
Nodos/disparador:
- Trigger: Schedule (cron, cada lunes 8:00)
- Nodo HTTP: Google Analytics Data API (GA4)
- Nodo de código: cálculo de variaciones semana contra semana
- Nodo de IA: redacta el resumen ejecutivo en lenguaje de negocio (no jerga de métricas)
- Salida: Google Sheets/Notion (dashboard vivo) + email o Slack con el resumen
Errores a vigilar:
- No manejar el refresco de tokens de la API de Google (OAuth expira, y si no hay refresh automático el flujo puede fallar sin que nadie se entere cada pocas semanas)
- Confundir «informe automatizado» con «informe sin contexto»: sin un umbral de qué variación merece alerta, generas ruido que nadie lee
- No versionar el histórico: sobrescribir la misma hoja cada semana te deja sin serie temporal para comparar tendencias
Snippet:
// Procesa datos de la API de GA4 para comparar dos rangos temporales
const currentPeriod = $input.item.json.current_week; // p. ej. { sessions: 1200, leads: 45 }
const previousPeriod = $input.item.json.previous_week; // p. ej. { sessions: 1000, leads: 50 }
function calculateVariation(current, previous) {
if (!previous || previous === 0) return 100;
return Number((((current – previous) / previous) * 100).toFixed(2));
}
const metrics = {
sessions: {
current: currentPeriod.sessions,
previous: previousPeriod.sessions,
variation_pct: calculateVariation(currentPeriod.sessions, previousPeriod.sessions)
},
conversions: {
current: currentPeriod.leads,
previous: previousPeriod.leads,
variation_pct: calculateVariation(currentPeriod.leads, previousPeriod.leads)
}
};
// Generar una alerta interna si la caída es superior al 15%
const alertTriggered = metrics.conversions.variation_pct < -15;
return [{
json: {
metrics,
alertTriggered,
summary_text: `Sesiones: ${metrics.sessions.variation_pct}% | Conversiones: ${metrics.conversions.variation_pct}%`
}
}];
7. Agente de IA para soporte y clasificación de correo
Qué resuelve: el buzón de soporte o de contacto general mezcla consultas comerciales, quejas, spam o peticiones de prensa. Clasificar a mano cuesta tiempo y genera respuestas tardías, fueras de lugar.
Nodos/disparador:
- Trigger: IMAP/Gmail Trigger (nuevo correo)
- Nodo de IA: clasifica intención (comercial, soporte técnico, queja, spam) y extrae entidades clave
- Nodo Switch: enruta según categoría a distinto canal/persona
- Nodo de respuesta automática (solo para categorías de bajo riesgo, tipo FAQ) o creación de ticket (Zendesk/Freshdesk) para el resto
Errores a vigilar:
- Dejar que la IA responda automáticamente a todo: reserva la respuesta automática a categorías de bajo riesgo (horarios, FAQ) y deriva a humano el resto
- No filtrar spam/phishing antes de pasar el correo al LLM: malgastas tokens y, peor aún, puede haber intentos de inyección de instrucciones dentro del cuerpo del correo
- No dar visibilidad del «por qué» de la clasificación: añade el razonamiento de la IA como nota interna en el ticket para que el humano no parta de cero
Snippet:
// Desinfecta el correo recibido para evitar Prompt Injections antes de ir al LLM
const rawEmail = $input.item.json;
let bodyContent = rawEmail.bodyText || rawEmail.snippet || »;
// 1. Limpieza básica de scripts o patrones sospechosos de inyección
const sanitizedBody = bodyContent
.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, ») // Elimina etiquetas HTML peligrosas
.replace(/(ignore previous instructions|system prompt|override rules)/gi, ‘[REDACTED_ATTEMPT]’) // Mitiga prompt injection clásico
.substring(0, 2000); // Trunca texto para controlar costes de tokens
// 2. Extraer datos del remitente
const senderDomain = rawEmail.from.split(‘@’)[1] || »;
return [{
json: {
message_id: rawEmail.id,
from_email: rawEmail.from,
subject: rawEmail.subject,
clean_body: sanitizedBody,
is_suspicious: sanitizedBody.includes(‘[REDACTED_ATTEMPT]’),
safe_for_llm: !sanitizedBody.includes(‘[REDACTED_ATTEMPT]’)
}
}];
Self-hosted vs Cloud: qué elegir y cómo dejarlo en producción (backups, SSL, seguridad, coste real)
Si vas a usar self-hosted es la diferencia entre tener una automatización de marketing y tener un incidente próximo:
- Backups: snapshot diario de la base de datos de n8n (workflows + credenciales cifradas) y de los volúmenes de Docker. Sin esto, un fallo de servidor te puede borrar meses de lógica de negocio.
- SSL: reverse proxy (Traefik, Nginx) con certificados Let’s Encrypt renovados automáticamente. Los webhooks de formularios y CRMs no deben viajar sin cifrar.
- Seguridad: variables de entorno para credenciales (nunca hardcodeadas en nodos), autenticación básica o SSO delante del editor, y N8N_ENCRYPTION_KEY respaldada fuera del propio servidor.
- Coste real: un VPS modesto (2-4GB RAM) cubre la mayoría de estos 7 flujos sin problema. El coste real está en el tiempo de mantenimiento, no está en la infraestructura. Eso si, alguien tiene que vigilar logs de error y actualizar versiones.
Mientras que, si vas con cloud (n8n.cloud), te quitas backups y SSL de la lista, pero mantienes el mismo criterio en variables de entorno y control de acceso.
Entonces, no debes preguntarte si la mejor opción es self-hosted o cloud. Es quién puede asumir el mantenimiento y si tu dato es lo bastante sensible como para justificar el esfuerzo de tenerlo en tu propia infraestructura.
Plantillas de marketing en n8n listas para importar
A continuación puedes descargar las 7 automatizaciones en JSON, listas para importar a n8n, con algunas recomendaciones antes de importarlas.
1. Plantilla n8n: Captación y cualificación de leads
Antes de importar: el disparador es un trigger manual con datos de ejemplo, no es un formulario real. Sustitúyelo por tu Webhook o Form Trigger, y conecta los tres nodos grises (enriquecimiento, CRM, Slack) con tus propias credenciales. La validación de dominio corporativo sí funciona.
Descarga aquí.
2. Plantilla n8n: Lead scoring automático con IA
Antes de importar: el score por reglas (cargo, tamaño de empresa, fuente) es real y lo puedes probar sin necesidad de tocar nada. El score cualitativo de IA está simulado con un valor fijo. Conéctalo a tu proveedor de IA antes de fiarte del score total.
Descarga aquí.
3. Plantilla n8n: Nurturing multicanal (email + WhatsApp)
Antes de importar: cambia manualmente el campo abrio_ultimo_email en el nodo Mock para ver cómo el flujo decide el canal. Los nodos de envío de email y WhatsApp son placeholders (el de WhatsApp, en concreto, necesita plantillas pre-aprobadas de Meta si vas a usarlo fuera de la ventana de 24h).
Descarga aquí.
4. Plantilla n8n: Sincronización de datos (source of truth)
Antes de importar: la normalización de teléfono y país es ejecutable. Los tres destinos (email marketing, facturación, soporte) y el log de auditoría están vacíos. Decide primero cuál va a ser tu fuente de verdad antes de conectar nada, o vas a acabar sincronizando en bucle.
Descarga aquí.
5. Plantilla n8n: Cross-posting y distribución de contenido
Antes de importar: el paso de aprobación humana está simulado como si siempre se aprobara. No actives la publicación automática en LinkedIn/Instagram sin haber conectado antes ese control real porque es la parte que evita que un resumen de IA mal generado se publique solo.
Descarga aquí.
6. Plantilla n8n: Reporting automatizado (GA4)
Antes de importar: el cálculo de variación semanal es real. El nodo de GA4 trae datos de ejemplo fijos pweo, cuando conectes tu cuenta real de Google, revisa que los nombres de campo de tu respuesta coincidan con los que usa el flujo (sesiones_semana_actual, etc.), o sino puede fallar sin que te enteres.
Descarga aquí.
7. Plantilla n8n: Agente de IA para soporte y clasificación
Antes de importar: el filtro básico de spam se ejecuta antes de la IA a propósito, para no gastar tokens en correos maliciosos. La clasificación y el enrutamiento están simulados, por lo que no actives la respuesta automática hasta haber probado la clasificación con correos reales, porque sino lo más seguro es que contestes solo cosas que no debías.
Descarga aquí.
Preguntas frecuentes
¿Necesito saber programar para usar n8n?
No para lo básico, pero para algunas de las automatizaciones que te hemos comentado en este artículo sí que ayuda a tener nociones de JavaScript. Los nodos de código son opcionales, pero son los que pueden hacer de tu flujo uno más robusto.
¿n8n puede sustituir a mi CRM?
No, y no debería. n8n es la capa de orquestación entre herramientas, no un sistema de registro. Tu CRM sigue siendo la fuente de verdad, donde almacenas todos tus datos e información de tus clientes. n8n simplemente es el encargado de mover y transformar los datos entre sistemas.
¿Qué pasa si un workflow falla a mitad de ejecución?
Depende de si tienes gestión de errores configurada. n8n permite definir un workflow de error que se dispara ante cualquier fallo, notificando por Slack o email. Sin esto configurado, el fallo puede pasar desapercibido hasta que alguien nota que faltan leads.
¿Es seguro conectar n8n con IA (OpenAI, Claude) para procesar datos de clientes?
Depende del proveedor y de qué datos envías. Revisa la política de retención de datos de la API que uses y evita enviar información identificable innecesaria en los prompts. Este es justo el tipo de decisión que conviene documentar bajo un marco de gobernanza de IA y no dejarlo al criterio de quien monte el flujo ese día.
¿Cuánto tiempo lleva montar estas 7 automatizaciones desde cero?
Con las plantillas, entre 2 y 4 horas por flujo para adaptarlas a tu stack concreto. Desde cero, sin plantilla ni experiencia previa, cada una puede llevarte una semana de prueba y error.
