Deduplicar contactos CRM

Busca duplicados por email y fusiona o marca en CRM.
Deduplica contactos CRM por email con n8n. Workflow JSON para limpiar leads duplicados en ventas B2B ES. Logixb2b España. Para España y la UE. Sin SaaS caro.
Descarga el workflow
JSON listo para importar en n8n (Import from File). Sustituye solo REEMPLAZA_* y credenciales.
Qué es y para qué sirve
Este workflow revisa periódicamente los contactos de tu CRM y detecta posibles duplicados a partir del correo electrónico normalizado. No borra ni fusiona nada automáticamente: solo lista los casos sospechosos y avisa por Slack para que una persona del equipo decida cómo actuar. Es la forma más segura de empezar a limpiar un CRM que lleva tiempo acumulando registros de formularios, importaciones manuales y integraciones distintas.
Los duplicados en el CRM son un problema silencioso: dos fichas para el mismo contacto reparten el histórico de interacciones, confunden a los comerciales sobre quién ha hablado con quién, y distorsionan los informes de conversión porque un mismo lead cuenta dos veces. Detectarlos pronto evita que el problema crezca cuando el volumen de leads aumenta.
Cuándo usarlo (y cuándo no)
Actívalo si tu CRM recibe leads desde varias fuentes (formularios web, importaciones de eventos, altas manuales del equipo comercial, integraciones con terceros) porque esa combinación es la receta habitual para que un mismo contacto acabe registrado con variaciones de mayúsculas, espacios o alias de correo. También es útil como paso previo a cualquier proyecto de limpieza masiva de datos.
No lo actives con la fusión automática habilitada la primera vez que lo despliegues: la detección por correo puede dar falsos positivos en cuentas compartidas (por ejemplo, info@empresa.com usado por varias personas), así que la primera fase siempre debe ser de revisión manual antes de automatizar cualquier acción destructiva.
Requisitos previos
Necesitas acceso de lectura a la API de tu CRM (HubSpot, Pipedrive, Salesforce o similar) mediante una API key o token OAuth con permisos de solo lectura sobre contactos, y un Incoming Webhook de Slack para recibir los avisos.
También conviene tener claro, antes de configurar nada, cuál es vuestra definición interna de "duplicado": si solo cuenta el correo exacto, si se normalizan mayúsculas y espacios, o si además se considera el mismo teléfono. Esa decisión determina cómo ajustar el nodo de código del flujo, y conviene dejarla por escrito en un documento breve que el equipo pueda consultar cuando surjan dudas sobre un caso concreto.
Cómo funciona el flujo paso a paso
El flujo comienza con un Schedule Trigger diario que dispara la revisión. Un nodo Config centraliza la URL de la API de contactos, la clave de acceso y el webhook de Slack. Un nodo HTTP Request (GET) descarga el listado de contactos. Un nodo Code normaliza cada correo (minúsculas, sin espacios) y agrupa los contactos que comparten el mismo valor normalizado. Un nodo IF filtra los grupos con más de un contacto, es decir, los duplicados reales. Por último, un nodo de Slack construye y envía un mensaje con el correo afectado, el número de fichas repetidas y sus identificadores, para que el equipo pueda abrirlas directamente en el CRM. Si tu CRM permite paginar los resultados, el flujo recorre todas las páginas antes de agrupar, para no dejar fuera contactos que quedaron en una página posterior de la respuesta.
Configuración detallada en n8n
Descarga el JSON e impórtalo en n8n desde ⋯ a Import from File. Verás en el lienzo el Schedule, el nodo Config dedupe, la llamada HTTP de contactos, el Code de normalización y agrupación, el filtro IF de duplicados y el nodo final de Slack.
En el nodo Config dedupe rellena tres campos: crmContactsUrl con el endpoint de listado de contactos de tu CRM, crmApiKey con la credencial de acceso (mejor como credencial cifrada que como texto plano) y slackWebhookUrl con la URL de entrada de Slack. Deja desactivada cualquier rama de fusión o borrado automático: en esta versión del flujo esa rama ni siquiera existe, por diseño.
Antes de activarlo en real, crea en un entorno de pruebas dos contactos con el mismo correo escrito de forma distinta (mayúsculas, con y sin espacios) y un tercero completamente diferente, y ejecuta el flujo manualmente: Slack debe listar únicamente el par duplicado, no el contacto distinto. Repite la prueba con un correo compartido de tipo genérico para decidir si necesitas excluirlo manualmente de la regla.
Operación, monitorización y errores comunes
El error más grave que puede cometer un equipo con este tipo de flujo es activar el borrado o la fusión automática desde el primer día: aunque técnicamente es sencillo añadir esa rama, la recomendación firme es mantener siempre una revisión humana antes de eliminar o combinar fichas, porque un falso positivo mal gestionado puede borrar el histórico de un cliente real.
Otro fallo común es no fijar un responsable de la revisión: si el mensaje llega a Slack pero nadie lo procesa, los duplicados se acumulan igual que antes, solo que ahora además generas ruido en el canal.
En materia de RGPD, este flujo trata datos personales de contactos reales, así que aplica el principio de exactitud y minimización: no dupliques la información en Slack más allá de lo necesario para identificar el caso (correo e identificadores), evita exponer teléfonos o direcciones completas en el mensaje, y limita el acceso al canal de alertas al personal que gestiona el CRM.
Alternativas y extensión del flujo
En Make, sustituye el bloque de código por un módulo de agregación que agrupe registros por el mismo valor de correo normalizado, seguido de un filtro que descarte los grupos de un único elemento, y cierra con un mensaje de Slack; en Zapier, la aproximación habitual es programar una búsqueda periódica y usar un paso de formateo antes de enviar el aviso, aunque la lógica de agrupación suele requerir un paso de código o una herramienta auxiliar como Formatter.
Si más adelante decides automatizar la fusión, hazlo en una segunda fase, con reglas explícitas por campo (por ejemplo, conservar siempre la ficha con más actividad reciente) y manteniendo un registro de auditoría de cada fusión realizada, de forma que cualquier decisión automática se pueda revertir si resulta incorrecta.
Importar, configurar y producción 24/7
En n8n: ⋯ → Import from File → el JSON de este recurso. El flujo llega inactive. Abre el sticky INSTRUCCIONES del lienzo y el nodo Config/Set: URLs, umbrales y placeholders. Enlaza credenciales reales (HTTP Header Auth, OAuth Google Sheets, Slack Incoming Webhook, CRM Private App) — nunca dejes tokens en el archivo versionado.
Prueba una ejecución Manual o un evento de test (formulario, webhook, cron forzado). Revisa CRM, Sheets o Slack. Solo entonces Active. Timezone del workflow: Europe/Madrid.
Para que corra solo hace falta n8n online. Self-hosted UE: VPS Hetzner/OVH/IONOS (o panel con Docker) → Ubuntu → Docker Compose (n8n + Postgres) → HTTPS con Caddy/Nginx → N8N_HOST, WEBHOOK_URL, GENERIC_TIMEZONE=Europe/Madrid, N8N_ENCRYPTION_KEY. Alternativa: n8n Cloud (importas, conectas credenciales y Active; vigila límites). Make/Zapier: mismo mapa mental; este JSON es el esqueleto n8n.
EU AI Act y RGPD: qué es y por qué tu empresa debe aplicarlo
El Reglamento (UE) 2024/1689 (EU AI Act) ya está en vigor. Si tu empresa usa n8n con nodos de IA (Gemini, OpenAI, Claude, etc.) en ventas o operaciones, actuáis como desplegadores (deployers): no hace falta ser el fabricante del modelo. Desde el 2 de febrero de 2025 el Artículo 4 exige alfabetización en IA del personal que opera estos sistemas; en agosto de 2026 se refuerza la supervisión (AESIA en España) y la trazabilidad.
En paralelo, el RGPD (AEPD) aplica porque el flujo trata datos de contacto B2B. Base jurídica, minimización y, si hay perfiles automatizados a escala, evaluación de impacto. AI Act y RGPD se acumulan: un fallo puede implicar ambas autoridades.
Este recurso ayuda en la práctica: placeholders sin secretos, Europe/Madrid, opción self-hosted en VPS UE (soberanía de datos), registro de ejecuciones en n8n (logs) y espacio para human-in-the-loop (aprobación antes de acciones sensibles). Detalle: /uso-responsable-de-ia-y-transparencia. Texto informativo, no asesoramiento legal.
Preguntas frecuentes
¿Este flujo borra o fusiona duplicados automáticamente?
No, por diseño. Solo detecta y avisa; la fusión o el borrado los decide siempre una persona, revisando cada caso en el CRM.
¿Qué se considera un duplicado en este flujo?
Por defecto, dos contactos con el mismo correo normalizado (minúsculas, sin espacios). Puedes ampliar la regla para incluir también coincidencia de teléfono si lo necesitáis.
¿Qué pasa con correos compartidos como info@empresa.com?
Pueden generar falsos positivos. Revísalos manualmente y decide si excluirlos de la regla de detección para evitar ruido innecesario.
¿Con qué frecuencia debería ejecutarse la revisión?
Diariamente suele ser suficiente para la mayoría de equipos; si el volumen de altas es muy alto, puedes ejecutarlo varias veces al día.
¿Funciona con cualquier CRM?
Sí, siempre que tengas una API de contactos accesible con lectura; solo cambia el endpoint y la forma de autenticación en el nodo Config.
¿Qué datos debería incluir el aviso de Slack?
Lo mínimo para actuar: el correo, el número de fichas repetidas y sus identificadores. Evita incluir teléfonos o direcciones completas.
¿Cómo evito perder el histórico al fusionar manualmente?
Documenta un criterio claro (por ejemplo, conservar la ficha con más actividad reciente) y registra cada fusión realizada para poder revertirla si hace falta.