Hay un momento en la vida de todo PM en consultoría en que dices: "necesito conectar estas 4 herramientas y no puedo pedirle a ingeniería una integración custom." Tienes datos en un Google Sheet, hay que enviarlos a un CRM, después a emails, después a Slack.
Podrías usar Zapier — pero cobra por tarea: un flujo de 500 leads con 10 pasos te quema el plan mensual en un día. Make cobra por operación; mejor, pero su plan gratis da 1.000 al mes. Y luego está n8n: la alternativa open-source que instalas en tu propia máquina. Sin costo por tarea, sin límite de pasos.
En este módulo instalas n8n con Docker —sí, un PM puede instalar Docker— y construyes tu primer workflow de enriquecimiento de leads. Y tus datos nunca salen de tu computadora.
Vamos.
2.1. ¿Qué es n8n y Por Qué Self-Hosted?
n8n es una plataforma de automatización visual que conecta aplicaciones mediante nodos. Cada nodo hace una acción: leer un email, consultar una API, enviar un mensaje, transformar datos.
Comparativa de modelos de negocio (la decisión económica para el PM):
| Plataforma | Modelo de Cobro | Costo para 500 leads/mes con 10 pasos c/u |
|---|---|---|
| Zapier | Por tarea (5,000 tareas/mes) | $30/mes (plan básico, se queda corto) |
| Make | Por operación (10,000 ops/mes) | $9/mes (plan básico, justo) |
| n8n Cloud | Por workflow activo | $20/mes (ilimitado en pasos) |
| n8n Self-Hosted | Solo tu electricidad | $0/mes |
Por qué self-hosted es la decisión correcta para un PM:
- Sin límites artificiales. Tu workflow puede tener 50 pasos sin que el precio cambie.
- Tus datos no salen de tu red. Clientes de consultoría con datos sensibles no deberían pasar por servidores de terceros.
- Puedes experimentar sin pedir presupuesto. Abres tu laptop, instalas Docker, y estás corriendo en 15 minutos. Sin tarjeta de crédito.
- Escala contigo. Cuando el workflow crece, migras a un servidor dedicado. El mismo software.
n8n self-hosted = $0 al mes y tus datos nunca salen de tu red. La única inversión es la configuración inicial de este módulo.
2.2. ¿Qué es Docker? (La Explicación que un PM Necesita)
Docker es una plataforma que empaqueta software en "contenedores".
Un contenedor es una caja de zapatos donde todo lo que el programa necesita está dentro: código, configuración, dependencias, sistema operativo mínimo. La caja se ve igual sin importar dónde la abras — tu laptop, un servidor en GCP, la máquina de un compañero.
| Sin Docker | Con Docker |
|---|---|
| "En mi máquina funciona" es la excusa más común de ingeniería. | El contenedor es idéntico en todas partes. Si funciona local, funciona en producción. |
| Instalar n8n requiere Node.js, npm, configurar variables de entorno, resolver conflictos de versiones. | Un solo comando y n8n corre aislado, sin tocar nada más de tu sistema. |
| Desinstalar n8n deja archivos, dependencias, configuraciones regadas. | Borras el contenedor y no queda rastro. |
Conceptos clave para entender los comandos:
docker pull n8nio/n8n descarga el plano. No estás ejecutando nada aún.docker run o docker compose up construye la casa y la enciende../n8n-data) los datos persisten aunque borres el contenedor.5678:5678 = "lo que entre por el puerto 5678 de tu PC, pásalo al contenedor".docker compose up -d y listo.Sin volumen, si borras el contenedor pierdes TODOS tus workflows. La línea ./n8n-data:/home/node/.n8n del compose es la diferencia entre un sistema y un juguete.
¿Por qué debería importarle a un PM?
Porque Docker es el estándar de la industria para desplegar software. Cuando le pidas a tu equipo de ingeniería que te ayude a poner n8n en un servidor, te van a pedir "un Dockerfile" o "un docker-compose.yml". Saber leer ese archivo y entender qué hace cada línea te da credibilidad técnica sin necesidad de saber programar.
Además, Docker te permite probar herramientas como si fueran apps en tu celular: descargas, pruebas, y si no te gustan, las borras sin ensuciar tu computadora. Quieres probar Supabase, Metabase, Airbyte, o cualquier herramienta open-source? Casi siempre hay un docker compose up -d y en 2 minutos la tienes corriendo.
Para instalar n8n con Docker, solo necesitas estos 3 movimientos:
docker pull n8nio/n8n # Descargar la imagen de n8n
docker run ... # Crear y ejecutar el contenedor
docker compose up -d # La forma correcta con persistencia de datos
No necesitas ser ingeniero para esto. Solo copiar, pegar, y ejecutar. Lo que sigue es el paso a paso exacto.
2.3. Anatomía de un Workflow en n8n
2.4. El Caso de Uso: Enriquecimiento de Leads para Consultoría
Una consultora recibe leads desde un formulario web. Cada lead necesita:
- Ser enriquecido con datos públicos (LinkedIn, web de la empresa).
- Categorizado según industria y tamaño (Small/Medium/Enterprise).
- Asignado a un vendedor específico según categoría.
- Registrado en el CRM.
- Notificado al equipo en Slack.
-
Instalar Docker (lo que el PM necesita)
Docker Desktop es una aplicación que corre en tu computadora y gestiona los contenedores. Piensa en ella como el "panel de control" de tus contenedores: puedes ver cuáles están corriendo, cuánta memoria usan, y encenderlos/apagarlos con un clic.
Requisitos del sistema (verifica antes de empezar)
- Windows: 8 GB RAM mínimo (16 GB ideal), WSL 2 habilitado
- macOS: Apple Silicon (M1/M2/M3) o Intel, 4 GB RAM mínimo
- Linux: 2 GB RAM mínimo
- Espacio en disco: ~3 GB libres
Windows
- Pre-requisito: habilita WSL 2. Abre PowerShell como administrador y ejecuta:
Esto instala un kernel de Linux ligero dentro de Windows. Docker lo necesita para correr contenedores de forma eficiente (más rápido que Hyper-V y con menos memoria).
# Habilita el subsistema de Linux wsl --install # Configura WSL 2 como versión predeterminada wsl --set-default-version 2 - Descargar e instalar: ve a docker.com/products/docker-desktop/ y descarga el instalador para Windows.
- Durante la instalación: marca "Use WSL 2 instead of Hyper-V" si te lo pregunta.
- Abrir Docker Desktop: búscalo en el menú Inicio y ábrelo. Acepta los términos. Si ves "Docker Desktop is running" y el ícono de la ballena en la barra de tareas, Docker está activo.
- Verificar con PowerShell:
docker --version— deberías verDocker version 27.x.x, build xxxxx.
Problema comúnSi
docker --versionno se reconoce, cierra y vuelve a abrir tu terminal: necesitas una sesión nueva para que el PATH se actualice.macOS
- Descarga Docker Desktop desde docker.com (versión Apple Silicon si tienes M1/M2/M3, Intel si tienes Mac antiguo).
- Arrastra la aplicación a la carpeta Applications y ábrela.
- Acepta los términos de servicio. Espera a que la ballena aparezca en la barra de menú.
- Verifica en terminal:
bash docker --version
Linux (Ubuntu/Debian)
En Linux no usas Docker Desktop. Usas la versión nativa (más ligera):
# Actualiza la lista de paquetes sudo apt update # Instala Docker Engine y Compose sudo apt install docker.io docker-compose-v2 # Habilita Docker para que arranque automáticamente al prender el equipo sudo systemctl enable --now docker # Agrega tu usuario al grupo docker (para no tener que usar sudo en cada comando) sudo usermod -aG docker $USER # Cierra sesión y vuelve a entrar, o ejecuta: newgrp docker # Verifica docker --version -
¿Qué es Docker Compose y por qué usarlo?
Docker Compose te permite definir y ejecutar múltiples contenedores con un solo archivo. En lugar de escribir comandos largos cada vez, escribes un
docker-compose.ymlcon toda la configuración y ejecutasdocker compose up -d.¿Por qué es mejor que
docker run?- Reproducible: el archivo YAML es tu "receta". Lo compartes con un compañero y obtiene exactamente la misma configuración.
- Persistente: los datos se guardan en una carpeta local. Si el contenedor se cae o lo borras, tus workflows sobreviven.
- Portable: el mismo archivo funciona en tu laptop y en un servidor en la nube sin cambios.
-
Instalar n8n con Docker Compose
Crea una carpeta para n8n (por ejemplo
C:\n8nen Windows o~/n8nen Mac/Linux) y dentro de ella crea un archivodocker-compose.yml:# docker-compose.yml # Este archivo le dice a Docker cómo ejecutar n8n con persistencia de datos version: "3.8" services: n8n: image: n8nio/n8n # La imagen oficial de n8n (qué programa correr) container_name: n8n # El nombre del contenedor (para referirte a él) restart: unless-stopped # Política de reinicio automático ports: - "5678:5678" # Mapeo de puertos: [tuPC:contenedor] volumes: - ./n8n-data:/home/node/.n8n # Persistencia de datos: [carpetaLocal:carpetaContenedor] environment: - N8N_SECURE_COOKIE=false # Desactivado para uso local (HTTP, no HTTPS) - N8N_METRICS=false # Desactiva métricas innecesarias - N8N_SKIP_WEBHOOK_DEREGISTRATION_ON_SHUTDOWN=true # Mantiene webhooks al reiniciarQué hace cada línea explicado para un PM:
Línea ¿Qué significa? ¿Qué pasa si la cambias o la quitas? image: n8nio/n8nLe dice a Docker: "descarga el programa n8n de la tienda oficial" Si la cambias por otra imagen (ej. n8nio/n8n:2.0), obtienes una versión específicacontainer_name: n8nLe pone nombre al contenedor para identificarlo fácilmente Si no la pones, Docker le asigna un nombre aleatorio como n8n_xyz123restart: unless-stopped"Si n8n se cae, reinícialo automáticamente, a menos que yo lo detenga explícitamente" Sin esto, si tu compu se reinicia, n8n queda apagado y tienes que iniciarlo manual ports: "5678:5678""Todo lo que entre al puerto 5678 de tu compu, pásalo al puerto 5678 del contenedor donde n8n está escuchando" Si cambias el puerto izquierdo a 8080:5678, accedes a n8n enhttp://localhost:8080volumes: ./n8n-data:/home/node/.n8n"Crea un vínculo entre la carpeta ./n8n-datade tu compu y la carpeta interna de n8n donde guarda sus datos"Sin esto, si borras el contenedor, pierdes todos tus workflows y configuraciones N8N_SECURE_COOKIE=false"No exijas HTTPS para las cookies de sesión" En producción deberías ponerlo en true, pero en local sin HTTPS no funcionaGuarda el archivo
docker-compose.ymly en la terminal (asegúrate de estar en la misma carpeta donde lo guardaste):# Crea la carpeta donde n8n guardará sus datos (tu "sótano") mkdir n8n-data # Inicia n8n en segundo plano (-d = "detached", se ejecuta sin bloquear la terminal) docker compose up -d¿Qué acaba de pasar?
- Docker descargó la imagen de n8n (la primera vez toma ~1 minuto).
- Docker creó un contenedor a partir de esa imagen.
- Docker vinculó la carpeta
./n8n-datacon la carpeta interna de n8n. - Docker abrió el puerto 5678 de tu compu.
- Todo está corriendo en segundo plano.
Si todo salió bien, ves algo como
[+] Running 2/2 - Container n8n Started.Verificar que n8n está corriendo:
# Lista los contenedores activos docker ps # Deberías ver algo como: # CONTAINER ID IMAGE ... PORTS NAMES # abc123def456 n8nio/n8n ... 0.0.0.0:5678->5678/tcp n8nAbre tu navegador y ve a
http://localhost:5678. Deberías ver la pantalla de bienvenida de n8n. Si ves "This site can't be reached", espera 10 segundos y recarga —a veces tarda un poco en arrancar.Si algo sale mal:
# Ver los logs de n8n para entender qué falló docker compose logs --tail 20 # Detener y volver a empezar docker compose down docker compose up -d -
Para detener y reiniciar n8n
# Detener n8n (los datos se conservan) docker compose stop # Iniciar de nuevo docker compose start # Ver los logs en vivo docker compose logs -f # Detener y borrar el contenedor (datos se conservan en n8n-data/) docker compose down -
Construir el workflow de enriquecimiento de leads
Escenario: una consultora de servicios TI recibe leads desde un formulario de Google Forms. Quiere enriquecerlos con información de la empresa del lead y categorizarlos automáticamente.
Paso 1 — Trigger: Manual (para pruebas). En el panel de n8n:
- Haz clic en "New Workflow".
- Nómbralo:
Enriquecimiento de Leads. - Agrega un nodo "Manual Trigger" (el que tiene una mano como icono).
- Define los datos de entrada que simularán un lead:
[ { "nombre": "Carlos Pérez", "email": "carlos@techcorp.com", "empresa": "TechCorp SAS", "cargo": "CTO", "pais": "Colombia", "empleados": 120, "industria": "Tecnología", "fecha": "2026-06-03" } ]Paso 2 — Enriquecer: Categorizar por tamaño de empresa
Agrega un nodo "IF" (condicional) después del trigger:
Condición: {{ $json.empleados > 500 }} → Sí: "Enterprise" → No: → Siguiente condiciónAgrega otro "IF" anidado para el rango medio:
Condición: {{ $json.empleados >= 50 && $json.empleados <= 500 }} → Sí: "Medium" → No: "Small"Paso 3 — Crear el registro en un Google Sheet
- Agrega un nodo "Google Sheets".
- Conéctalo después de las condiciones.
- Configura:
- Operación: "Append"
- Sheet ID: el ID de tu Google Sheet (lo sacas de la URL:
docs.google.com/spreadsheets/d/[ID]/edit). - Datos a escribir:
Nombre: {{ $json.nombre }} Email: {{ $json.email }} Empresa: {{ $json.empresa }} Categoría: {{ $json.categoria }} (la variable que definiste en el IF) Fecha: {{ $json.fecha }}Para conectar n8n con Google Sheets necesitas autenticarte. n8n te guía con OAuth. El proceso es: autorizar, pegar el código, listo.
Paso 4 — Enviar notificación a Slack
- Agrega un nodo "Slack" después de Google Sheets.
- Conecta tu espacio de trabajo de Slack.
- Configura:
- Canal:
#leads-entrantes - Mensaje:
- Canal:
📩 Nuevo lead: {{ $json.nombre }} de {{ $json.empresa }} Categoría: {{ $json.categoria }} ({{ $json.empleados }} empleados) Email: {{ $json.email }}Paso 5 — Conectar los nodos
La lógica ramificada de tu workflow:
⚡ Manual Trigger — entra el lead
IF: empleados > 500
✅ Sí → Asignar "Enterprise" → Google Sheets → SlackNo → IF: empleados entre 50 y 500
✅ Sí → Asignar "Medium" → Google Sheets → Slack❌ No → Asignar "Small" → Google Sheets → SlackLas tres ramas convergen en el mismo destino: Google Sheets registra y Slack notifica. En el canvas de n8n se ve como un diagrama de flujo visual con esta misma lógica.Paso 6 — Ejecutar y probar
- Haz clic en "Execute Workflow" (el botón de play).
- Revisa los logs de cada nodo. n8n te muestra qué datos entraron y salieron de cada paso.
- Verifica que el Google Sheet tiene el nuevo registro.
- Verifica que el mensaje llegó a Slack.
-
Workflow completo: el código JSON
Puedes importar este workflow directamente en n8n (Settings → Import). Es el mismo workflow descrito arriba pero en formato JSON (también viene en el kit:
workflow-enriquecimiento-leads.json):{ "name": "Enriquecimiento de Leads", "nodes": [ { "parameters": {}, "name": "Manual Trigger", "type": "n8n-nodes-base.manualTrigger", "position": [250, 300] }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" }, "conditions": [ { "id": "e3e3c416-f652-4e93-b5f8-6c184a5b7a3a", "leftValue": "={{ $json.empleados }}", "rightValue": "500", "operator": { "type": "number", "operation": "larger" } } ] } }, "name": "¿Es Enterprise?", "type": "n8n-nodes-base.if", "position": [450, 300] }, { "parameters": { "conditions": { "options": { "caseSensitive": true, "typeValidation": "strict" }, "conditions": [ { "id": "b7b7a416-f652-4e93-b5f8-6c184a5b7a3a", "leftValue": "={{ $json.empleados }}", "rightValue": "50", "operator": { "type": "number", "operation": "largerEqual" } }, { "id": "c7c7a416-f652-4e93-b5f8-6c184a5b7a3a", "leftValue": "={{ $json.empleados }}", "rightValue": "500", "operator": { "type": "number", "operation": "smallerEqual" } } ] } }, "name": "¿Es Medium?", "type": "n8n-nodes-base.if", "position": [450, 500] }, { "parameters": { "keepOnlySet": true, "values": [ { "name": "categoria", "value": "Enterprise" } ] }, "name": "Categoría: Enterprise", "type": "n8n-nodes-base.set", "position": [650, 200] }, { "parameters": { "keepOnlySet": true, "values": [ { "name": "categoria", "value": "Medium" } ] }, "name": "Categoría: Medium", "type": "n8n-nodes-base.set", "position": [650, 400] }, { "parameters": { "keepOnlySet": true, "values": [ { "name": "categoria", "value": "Small" } ] }, "name": "Categoría: Small", "type": "n8n-nodes-base.set", "position": [650, 600] }, { "parameters": { "sheetId": "TU_SHEET_ID", "options": {}, "operation": "append", "columns": { "mappingMode": "defineBelow", "value": [ { "key": "Nombre", "value": "={{ $json.nombre }}" }, { "key": "Email", "value": "={{ $json.email }}" }, { "key": "Empresa", "value": "={{ $json.empresa }}" }, { "key": "Categoría", "value": "={{ $json.categoria }}" }, { "key": "Fecha", "value": "={{ $json.fecha }}" } ] } }, "name": "Guardar en Google Sheets", "type": "n8n-nodes-base.googleSheets", "position": [850, 300] } ], "connections": { "Manual Trigger": { "main": [[{ "node": "¿Es Enterprise?", "type": "main", "index": 0 }]] }, "¿Es Enterprise?": { "main": [ [{ "node": "Categoría: Enterprise", "type": "main", "index": 0 }], [{ "node": "¿Es Medium?", "type": "main", "index": 0 }] ] }, "¿Es Medium?": { "main": [ [{ "node": "Categoría: Medium", "type": "main", "index": 0 }], [{ "node": "Categoría: Small", "type": "main", "index": 0 }] ] }, "Categoría: Enterprise": { "main": [[{ "node": "Guardar en Google Sheets", "type": "main", "index": 0 }]] }, "Categoría: Medium": { "main": [[{ "node": "Guardar en Google Sheets", "type": "main", "index": 0 }]] }, "Categoría: Small": { "main": [[{ "node": "Guardar en Google Sheets", "type": "main", "index": 0 }]] } } }Para importarlo: Settings → Import → Pegar este JSON.
-
Migrar de trigger manual a trigger programado
Para que el workflow se ejecute automáticamente cada hora (en lugar de manual):
- Reemplaza el nodo "Manual Trigger" por un nodo "Schedule Trigger" (reloj).
- Configura: intervalo "Minutes", cada 60.
O si tienes un formulario real:
- Reemplaza por "Webhook Trigger".
- n8n genera una URL tipo
https://localhost:5678/webhook/xyz. - Configura tu formulario para que envíe los datos a esa URL.
4.1. Lo que Debe Estar Corriendo Siempre
# Verificar que n8n está activo
docker ps | findstr n8n # Windows
docker ps | grep n8n # macOS/Linux
# Ver logs
docker compose logs -f --tail 50
Si n8n no está corriendo, ningún workflow se ejecuta. Pon Docker Desktop para que arranque con tu sistema operativo.
4.2. Ideas de Workflows para tu Consultoría
| Workflow | Disparador | Acción | Ahorro Semanal |
|---|---|---|---|
| Enriquecimiento de leads | Forms / Webhook | Categorizar → CRM → Slack | 2h |
| Facturación recurrente | Cada mes | Buscar contratos activos → Generar factura → Enviar email | 3h |
| Seguimiento de proyectos | Cada lunes | Consultar estado en Jira → Resumir → Enviar a Slack | 1h |
| Onboarding de clientes | Forms llenado | Crear carpeta Drive → Docs → Calendar → Email | 1h |
| Alertas de presupuesto | Cada hora | Consultar gasto en herramienta → Si > 80% → Alerta a Slack | 30min |
4.3. Diagnóstico Rápido
- Autodiagnóstico: ¿n8n self-hosted es para ti?
- ¿Pagas por Zapier o Make hoy? → Multiplica tu gasto mensual × 12. Eso es lo que ahorrarías en un año con n8n self-hosted.
- ¿Pasas datos de una herramienta a otra manualmente? → Si son más de 2 horas a la semana, un workflow de n8n se paga solo en tiempo ahorrado.
- ¿Manejas datos sensibles de clientes que no deberían pasar por servidores de terceros? → n8n self-hosted mantiene todo en tu red.
4.4. Entregable del Módulo
Parte A — n8n funcionando localmente:
- Docker Desktop instalado y funcionando.
- n8n corriendo en
http://localhost:5678(usa eldocker-compose.ymldel kit). - Captura de pantalla del panel de n8n mostrando los workflows.
Parte B — Workflow de enriquecimiento de leads:
- Trigger manual que recibe datos de un lead simulado.
- Lógica condicional que categoriza por tamaño de empresa (Enterprise/Medium/Small).
- Google Sheets como destino (o archivo local si no conectaste Sheets).
- Al menos una notificación (Slack o email).
Parte C — Documentación del workflow:
- Captura de pantalla del canvas (el diagrama visual).
- Breve explicación de qué hace cada nodo, qué trigger usa y qué produce.
- Los datos de prueba que usaste y el resultado en el Google Sheet.
Formato de entrega: capturas del workflow funcionando + el JSON de exportación (Settings → Export). Si no puedes instalar Docker, usa n8n cloud gratis 14 días en app.n8n.cloud.
- Error: levantar n8n con
docker run"para probar rápido" y construir workflows sin volumen. Corrección: usa siempre eldocker-compose.ymlcon./n8n-data: sin volumen, borrar el contenedor borra tus workflows. - Error: ejecutar
docker compose up -den una carpeta distinta a la del archivo compose. Corrección: verifica conpwd/lsque estás en la carpeta donde guardastedocker-compose.yml. - Error: condiciones IF que dejan huecos (¿qué pasa con exactamente 500 empleados?). Corrección: prueba el workflow con valores frontera (49, 50, 500, 501) y revisa los logs de cada nodo.
- Error: abandonar la conexión con Google Sheets cuando OAuth pide autorización. Corrección: el flujo es normal: autorizar → pegar el código → listo. n8n te guía paso a paso.
- Error: esperar que los workflows corran con la laptop apagada o Docker detenido. Corrección: n8n local solo corre si Docker está activo; para 24/7 necesitas el hosting del módulo 10.1.
| Criterio | No Aprobado (0) | Aprobado (1) | Sobresaliente (2) |
|---|---|---|---|
| 1. n8n está instalado y corriendo localmente | No instaló Docker, no puede acceder a localhost:5678, o el contenedor no arranca | n8n está instalado pero corre en modo temporal (sin docker compose, los datos se pierden al reiniciar) |
n8n está instalado con docker compose, persiste datos, y el PM puede detener/iniciar el servicio con comandos básicos |
| 2. El workflow tiene lógica condicional funcionando | El workflow no tiene condiciones o ejecuta todas las ramas sin importar los datos de entrada | El workflow tiene condiciones pero no maneja correctamente los 3 casos (Enterprise/Medium/Small) o el caso "Small" nunca se ejecuta | El workflow clasifica correctamente los 3 niveles según el número de empleados, cada rama produce el resultado esperado, y los logs de cada nodo muestran datos coherentes |
| 3. El workflow produce un resultado verificable | No hay destino configurado (ni Sheets, ni Slack, ni archivo) o el destino no recibe datos | El destino recibe datos pero faltan campos (categoría vacía, nombre mal formateado) o hay duplicados | El destino recibe datos correctamente, todos los campos están completos, y el PM puede demostrar que ejecutar el workflow con datos diferentes produce resultados diferentes en el destino |
Aprobación: 2 de 3 criterios en "Aprobado" o superior.
- n8n self-hosted elimina el costo por tarea: $0 al mes y sin límite de pasos.
- Docker empaqueta n8n en una caja idéntica en cualquier máquina:
docker compose up -dy está corriendo. - El volumen (
./n8n-data) es lo único que separa tus workflows de la pérdida total. - Todo workflow es TRIGGER → FILTRO → ACCIÓN → SALIDA; la lógica condicional hace el trabajo de clasificación.
- 500 leads/mes a 15 minutos cada uno son 125 horas: ese es el tamaño del premio.
Kit: n8n Self-Hosted
| Archivo | Descripción |
|---|---|
| ⬇ docker-compose.yml | Docker Compose para n8n local con persistencia de datos |
| ⬇ workflow-enriquecimiento-leads.json | Workflow JSON importable en n8n: enriquecimiento de leads |