Módulo 6: CRM con HubSpot
Mini-Proyecto: El Flujo Lead → Contacto → Deal
Descripción de la cápsula
Hora de juntar el módulo en el workflow que la estrategia de esta guía señala como el proyecto de M06: el flujo lead → contacto → deal.
¿Por qué este flujo es el proyecto del módulo? Porque es el corazón de cualquier automatización de ventas. Llega una oportunidad cruda — un formulario lleno, un email de interesado, una fila en una hoja — y tiene que convertirse en algo accionable dentro del CRM: un contacto (la persona), asociado a una empresa, con un deal abierto en el pipeline, una nota que explica de dónde salió, y una tarea de seguimiento para el vendedor. Todo eso, sin que nadie lo capture a mano y sin duplicar nada.
Cuando termines, tendrás el esqueleto que toda PyME necesita: la captura de leads automatizada de punta a punta. Usa todo el módulo — contactos, deals, pipelines, empresas, asociaciones, actividades, tareas — encadenado en el patrón que practicaste en la cápsula 05.
Lo que vas a construir
Un workflow llamado Captura de Leads que, al recibir un lead crudo:
- Crea o actualiza la empresa (sin duplicar)
- Crea o actualiza el contacto (sin duplicar)
- Crea un deal en la primera etapa del pipeline
- Asocia el deal con el contacto y con la empresa
- Registra una nota explicando de dónde vino el lead
- Crea una tarea de seguimiento para el vendedor
Lo que vas a practicar
- ✅ Create or Update para contactos y empresas — deduplicación (cápsula 03, 05)
- ✅ Crear un deal en la etapa correcta del pipeline (cápsula 04)
- ✅ Asociaciones encadenadas con IDs (cápsula 05)
- ✅ Registrar actividad + crear tarea — la automatización visible (cápsula 06)
- ✅ El patrón "del nombre al ID a la asociación" completo (cápsula 05)
- ✅ Integrar el modelo completo de HubSpot en un solo flujo
El principio rector: idempotente de punta a punta
Antes de construir, fija el objetivo de calidad. Este workflow puede recibir el mismo lead varias veces — el usuario hace doble submit, el formulario reintenta, pruebas el workflow. El resultado correcto siempre debe ser:
- Una empresa (no una por ejecución)
- Un contacto (no uno por ejecución)
- Un deal por oportunidad real
Las herramientas para lograrlo ya las tienes: Create or Update para contacto y empresa (HubSpot deduplica por email y dominio — cápsula 03, 07), y claves normalizadas (email y dominio en minúsculas, sin espacios). El deal es el único objeto que podría duplicarse si no tienes cuidado — lo manejamos en el paso correspondiente.
Preparación
- Tu cuenta de HubSpot con el CRM gratuito y la app privada conectada (cápsula 02)
- Mira tu pipeline por defecto y anota cuál es su primera etapa
- Ten claro qué usuario de HubSpot será el responsable de las tareas de seguimiento
Arquitectura del workflow
Manual Trigger (o Webhook en producción)
│
▼
Set: normalizar el lead crudo (email y dominio en minúsculas)
│
▼
HubSpot (Company: Create or Update) → Company ID
│
▼
HubSpot (Contact: Create or Update) → Contact ID
│
▼
HubSpot (Deal: Create, primera etapa) → Deal ID
│
▼
HubSpot (Asociar: Deal ↔ Contact)
HubSpot (Asociar: Deal ↔ Company)
HubSpot (Asociar: Contact ↔ Company)
│
▼
HubSpot (registrar Nota, asociada al contacto)
│
▼
HubSpot (crear Tarea de seguimiento, asociada al contacto)
Paso 1: el trigger y el lead crudo
Manual Trigger → Set que simula el lead que llega:
name = Ana López
email = ANA@acme.com
company = Acme Corp
domain = acme.com
phone = 555-1234
interest = Plan anual de licencias
source = Formulario web
En producción, este Set se reemplaza por un Webhook Trigger conectado a tu formulario. El resto del workflow no cambia.
Paso 2: normalizar el lead
Amplía el Set (o agrega otro) — el diseño defensivo es crítico aquí porque de la normalización depende la deduplicación:
name = {{ $json.name.trim() }}
email = {{ $json.email.toLowerCase().trim() }}
company = {{ $json.company.trim() }}
domain = {{ $json.domain.toLowerCase().trim() }}
phone = {{ $json.phone || '' }}
interest = {{ $json.interest || 'Sin especificar' }}
source = {{ $json.source || 'Desconocido' }}
date = {{ $now.toFormat('yyyy-LL-dd HH:mm') }}
Email y dominio en minúsculas y sin espacios — sin esto, la deduplicación de HubSpot (cápsula 07) falla y se cuelan duplicados.
Paso 3: crear o actualizar la empresa
Un nodo HubSpot:
- Resource:
Company - Operation:
Create or Update - Clave de deduplicación: el dominio
- Propiedades:
name→{{ $json.company }},domain→{{ $json.domain }}
Renómbralo a Company. Su output te da el Company ID.
Paso 4: crear o actualizar el contacto
Un nodo HubSpot:
- Resource:
Contact - Operation:
Create or Update - Clave de deduplicación: el email
- Propiedades:
email,firstname/lastname(parte elnamesi hace falta),phone→{{ $('Set').item.json.phone }},lifecyclestage→lead
Renómbralo a Contact. Su output te da el Contact ID.
Paso 5: crear el deal
Un nodo HubSpot:
- Resource:
Deal - Operation:
Create dealname→ algo descriptivo:{{ $('Set').item.json.company }} — {{ $('Set').item.json.interest }}pipeline→ tu pipeline por defecto (usa el selector del nodo)dealstage→ la primera etapa (usa el selector — recuerda la cápsula 07: nombre ≠ ID)
Renómbralo a Deal. Su output te da el Deal ID.
Sobre la idempotencia del deal: a diferencia de contacto y empresa, el deal no tiene una "clave" natural que HubSpot deduplique. Para este proyecto, con Manual Trigger controlado, lo dejamos como
Createsimple. En producción (ver más abajo) añadirías un "buscar antes de crear" para el deal — pero no compliques el esqueleto ahora.
Paso 6: las asociaciones
Tres nodos HubSpot de asociación, encadenados — aquí se usa todo lo de la cápsula 05. Cada uno vincula dos registros por sus IDs:
- Deal ↔ Contacto: Deal ID
{{ $('Deal').item.json.id }}←→ Contact ID{{ $('Contact').item.json.id }} - Deal ↔ Empresa: Deal ID ←→ Company ID
{{ $('Company').item.json.id }} - Contacto ↔ Empresa: Contact ID ←→ Company ID
Después de esto, el deal en HubSpot muestra a su comprador y su organización; el contacto muestra su empresa. El CRM es una red, no tres listas (cápsula 05).
Paso 7: registrar la nota
Un nodo HubSpot que registra una nota asociada al contacto ({{ $('Contact').item.json.id }}):
Lead capturado automáticamente el {{ $('Set').item.json.date }}.
Origen: {{ $('Set').item.json.source }}.
Interés: {{ $('Set').item.json.interest }}.
Deal creado y asociado.
Esto es la automatización visible de la cápsula 06: cualquier vendedor que abra el contacto ve que vino de una automatización, de dónde, y qué se hizo. El workflow no trabaja "a escondidas".
Paso 8: crear la tarea de seguimiento
Un nodo HubSpot que crea una tarea asociada al contacto:
- Título:
Primer contacto: {{ $('Set').item.json.name }} ({{ $('Set').item.json.company }}) - Fecha de vencimiento:
{{ $now.plus({ days: 1 }).toISO() }}— mañana - Responsable: el usuario de HubSpot del vendedor de turno
- Estado: pendiente
El vendedor abre HubSpot y ya tiene su tarea. El workflow preparó; el humano ejecuta (cápsula 06).
Paso 9: probar el workflow
Prueba 1: lead nuevo
- Ejecuta el workflow con el lead de Ana López
- Verifica en HubSpot:
- Existe la empresa
Acme Corp, el contactoAna López, un deal en la primera etapa - El deal muestra a Ana y a Acme asociados; el contacto muestra Acme
- El contacto tiene la nota de origen y la tarea de seguimiento
- Existe la empresa
Prueba 2: el mismo lead otra vez (la prueba clave)
- Ejecuta otra vez, sin cambiar nada
- Verifica: sigue habiendo una sola empresa y un solo contacto —
Create or Updatelos actualizó, no los duplicó - (El deal sí se duplica con este esqueleto — es esperado; ver "a producción")
Prueba 3: lead con email "sucio"
- Cambia el email en el Set a
Ana@ACME.com(espacios y mayúsculas) - Ejecuta
- Verifica: no se creó un contacto nuevo — la normalización del paso 2 hizo que la deduplicación funcionara
Checklist de éxito
- El lead crea empresa, contacto y deal
- El deal queda asociado a contacto y empresa; el contacto a la empresa
- El contacto tiene una nota de origen — la automatización es visible
- Se creó una tarea de seguimiento con responsable y fecha
- Re-ejecutar no duplica contacto ni empresa (
Create or Update) - Un email "sucio" tampoco duplica (normalización)
- El workflow integra el modelo completo de HubSpot
Cómo llevar esto a producción
Lo que construiste es un esqueleto reutilizable. Para producción:
- Webhook en vez de Manual Trigger — conectado a tu formulario de captura real.
- Deal idempotente: añade un "buscar antes de crear" para el deal — busca si ya hay un deal abierto asociado a ese contacto para esa oportunidad; si lo hay, no crees otro. Es el patrón del Módulo 1, aplicado al deal.
- Enrutar al vendedor correcto: según el origen, el monto o la región, asignar la tarea (y el deal) a un vendedor distinto.
- Avisar por Slack: sumar un mensaje al canal de ventas cuando entra un lead — integra el Módulo 4. "Llegó un lead, asignado a @vendedor."
- Manejar el lead sin email: un IF al inicio — si no hay email, no hay clave de deduplicación; decide qué hacer (rechazar, mandar a revisión manual).
- Maneja errores: si HubSpot falla a mitad del flujo, quedas con un estado parcial (empresa sí, deal no). G10 (Production) cubre cómo hacer esto resiliente.
Resumen del módulo
Con este proyecto cierras el Módulo 6 — CRM HubSpot. Recapitulando lo que ahora dominas:
- Conectar HubSpot con una app privada y scopes (cápsula 02)
- Contactos — el objeto central, deduplicado por email (cápsula 03)
- Deals y pipelines — las oportunidades y su avance por etapas (cápsula 04)
- Empresas y asociaciones — el CRM como red relacional (cápsula 05)
- Actividades y tareas — el seguimiento que mueve la venta (cápsula 06)
- Diagnosticar propiedades, IDs y duplicados (cápsula 07)
- El flujo lead → contacto → deal — el corazón de la automatización de ventas (esta cápsula)
El patrón estrella del módulo: un CRM es una base de datos relacional con el proceso de venta ya modelado — automatizarlo es encadenar "buscar antes de actuar" para construir su red de objetos, sin duplicar.
Lo que sigue (Módulo 7):
Capturaste el lead y abriste el deal. El Módulo 7 — Calendly y scheduling cierra el ciclo comercial: cuando ese lead agenda una reunión, un workflow lo recibe, confirma, y dispara el seguimiento. Vas a conectar el agendamiento con todo lo que ya construiste.
Recursos adicionales
- n8n HubSpot node Docs - Todas las operaciones usadas en el proyecto.
- n8n Webhook Trigger Docs - Para llevar el proyecto a producción.
- HubSpot: el embudo de ventas - Cómo se modela el ciclo de vida lead → cliente.
Creado: Mayo 14, 2026 Versión: 1.0