Listas ICP con juez en n8n

Filtra leads brutos con juez ICP, rate limit y upsert HubSpot/Pipedrive solo si superan el umbral (Europe/Madrid).
Construye listas de leads B2B con juez ICP umbral HubSpot o Pipedrive Sheets y Slack. Filtra brutos antes del outbound bajo RGPD.
Descarga el workflow
JSON listo para importar en n8n (Import from File). Sustituye solo REEMPLAZA_* y credenciales.
Qué problema resuelve este constructor de listas ICP
Una lista de prospección no es un CSV largo: es el filtro entre ruido y conversaciones reales.
Este workflow de n8n no scrapea LinkedIn ni envía emails. Toma leads brutos —el payload de prueba de 5 filas @example.
Los descartes no desaparecen en silencio: caen en Append Sheets (fuera ICP) con icpReasons y complianceFlag. Así puedes recalibrar el umbral sin perder el histórico. La guía educativa completa —ICP escrito, pipeline enriquecer → score → umbral, HITL y checklist RGPD— vive en /como-construir-listas-leads-b2b-cualificados-con-ia. Este recurso es la mitad operativa: el JSON importable que convierte ese método en un lote repetible Europe/Madrid.
Qué necesitas antes de importar el JSON
Una instancia de n8n (local para probar, Cloud o VPS en la UE) y un ICP escrito de verdad: cargos que quieres, sectores, países, tamaño mínimo y máximo de empresa, y títulos que nunca deben entrar (becario, estudiante, intern, prácticas). Sin ese documento, el juez solo repite intuición suelta en JavaScript.
También una fuente de leads brutos. Este flujo no sustituye a Clay, Apollo ni Cognism: empieza donde tu export o tabla termina. Sirve un CSV limpio, un Webhook que entregue una fila por lead, una hoja Sheets o un lote que ya hayas enriquecido en otra herramienta. Campos mínimos útiles: email, title, company, sector, country, employees, signals, source.
CRM con API: Private App de HubSpot con scopes de contactos, o api_token de Pipedrive. No hace falta tener ambos: eliges con crmProvider y el mismo nodo Upsert construye URL y cuerpo. Opcional pero recomendable: pestaña Google Sheets Listas_ICP y un Incoming Webhook de Slack. Decide scoreThreshold (65 de partida), maxBatchPerRun (40) y listName antes de Active. El JSON llega con REEMPLAZA_* y emails @example.com a propósito.
Cómo está construido el workflow (mapa del lienzo)
El lienzo abre con el sticky INSTRUCCIONES (conectar + VPS) y Manual Trigger listas.
Desde Config sale Payload de prueba (5 leads brutos): Lucía Vega (CEO SaaS ES), Diego Ferrer (Head of Sales logística ES), Nora Sanz (intern retail US), Hugo Mena (estudiante ES) e Irene Costa (Director Comercial industrial PT). Ese payload alimenta Limitar lote (maxBatch), que recorta el input al techo diario/ejecución para no saturar CRM ni Slack.
Juez ICP lista (score) calcula icpScore, icpReasons, qualified y complianceFlag por fila. IF entra en lista cualificada separa dos caminos: true → Upsert Lead CRM (HubSpot/Pipedrive) → Append Sheets (lista OK) → Slack resumen lista; false → Skip fuera de ICP → Append Sheets (fuera ICP). El workflow llega inactive y en timezone Europe/Madrid.
Cómo se calcula el score ICP y el complianceFlag
El nodo Juez ICP lista suma señales objetivas y legibles en JavaScript: +15 si el email tiene formato válido; +30 si el cargo (title) contiene alguna de tus icpTitles y no cae en excludeTitles; +20 si el sector encaja con icpSectors; +15 si el país se normaliza a UE (España, Portugal, Francia, Alemania, Italia, Países Bajos, Bélgica…); +10 si employees está entre minEmployees y maxEmployees; +10 si signals menciona pistas de compra (Serie A/B/C, contratando SDR, RFP, cambio ERP, HubSpot/Pipedrive, expansión). El resultado se acota entre 0 y 100.
Un título excluido (becario, intern, estudiante, prácticas…) no solo deja de sumar el bonus de cargo: el Code baja el techo del score a 25 para que casi nunca pase el umbral por accidente. qualified exige, además: email OK si requireEmailOk está activo, no excluido, score ≥ scoreThreshold, tamaño en banda y país UE. Si cambias el ICP, editas pesos y CSV en Config/Code sin rehacer el resto del lienzo.
complianceFlag es un aviso operativo, no un veredicto legal: ok_ue_minimizar_datos_hitl_antes_outreach para contactos UE (igual minimizas campos y revisas HITL) o revisar_base_juridica_extra_ue cuando el país queda fuera. Úsalo en Sheets para filtrar lotes dudosos antes del outreach humano.
Payload de prueba: quién entra, quién no y cómo calibrar
Los cinco leads demo están pensados para forzar ramas distintas. Lucía (CEO, SaaS, España, 38 empleados, señales Serie A + contratando SDR) y Diego (Head of Sales, logística B2B, España, expansión flota) suelen superar 65 con holgura.
Nora (Marketing Intern, retail US) cae por título excluido, país fuera de UE y sector B2C. Hugo (estudiante, empleados=1) cae por exclusión, tamaño fuera de banda y señales sin presupuesto. Ejecuta Manual Trigger sin CRM real primero: mira icpScore e icpReasons en cada item y anota qué cambiarías a mano.
Ajusta scoreThreshold, icpTitles, excludeTitles y la banda de empleados hasta que el resultado del demo coincida con tu criterio humano. Solo entonces crea Credentials reales y sustituye placeholders. Si el demo ya te parece demasiado permisivo o demasiado duro, no conectes datos reales: recalibra Config otra vez.
HubSpot o Pipedrive con el mismo nodo de Upsert
Upsert Lead CRM (HubSpot/Pipedrive) es un único HTTP Request que decide URL, Authorization y cuerpo según crmProvider. En HubSpot hace batch upsert de contactos con email como idProperty: repetir el mismo lote actualiza en vez de duplicar.
Pipedrive no ofrece upsert nativo por email en una sola llamada, así que el nodo crea la persona vía /persons.
Cambiar de CRM no exige rehacer el juez ni las hojas: basta cambiar crmProvider en Config y rellenar las credenciales del proveedor elegido. El resto del flujo (score, IF, Sheets, Slack) permanece igual.
Sheets, Slack, importar y sustituir el payload demo
Crea la pestaña Listas_ICP con columnas: fecha, batchLabel, listName, company, email, title, sector, country, icpScore, icpReasons, complianceFlag, crmProvider, estado. estado valdrá lista_cualificada o fuera_icp. Comparte la hoja con la cuenta OAuth de Google Sheets en n8n y pega el Spreadsheet ID en sheetsId.
Slack resumen lista envía un mensaje por lead cualificado con listName, empresa, email, score, crmProvider, reasons y complianceFlag.
Import: n8n → ⋯ → Import from File → assets/workflows/listas-leads-b2b-ia-n8n.json. En producción sustituye Payload de prueba por Webhook, Schedule o lectura Sheets que entregue el mismo shape de campos. Mientras migras, no mezcles filas demo @example.com con leads reales en la misma ejecución.
Producción 24/7 (VPS UE, Docker, Make, Zapier)
Un juez ICP que solo corre en el portátil no construye listas de forma continua. Dos caminos: (1) n8n Cloud —importas, credenciales, Active— vigilando el límite de ejecuciones; (2) self-hosted en VPS UE (Hetzner, OVH, IONOS…
Pasos habituales en VPS: máquina en región UE → SSH → Docker → compose up → 443 → usuario owner → Import from File → Credentials HubSpot/Pipedrive, Sheets y Slack → una corrida Manual con el payload demo → Active con fuente real. Firewall solo 80/443 (+ SSH). Backups del volumen Postgres y export periódico de workflows.
Make o Zapier siguen el mismo mapa mental: Webhook de leads brutos → Router/Formatter con el criterio de score → create-or-update en HubSpot/Pipedrive → Google Sheets → Slack. Este JSON es el esqueleto n8n; replica la lógica sin copiar secretos entre plataformas.
RGPD, interés legítimo B2B, HITL y EU AI Act
El flujo trata datos de personas físicas (email, cargo, empresa, a veces señales). En B2B la base jurídica habitual es el interés legítimo, siempre documentado: mensaje relevante al cargo, minimización de columnas y vía clara de baja en el outreach humano posterior. El complianceFlag te recuerda revisar contactos fuera de la UE antes de subirlos o escribirles.
Revisa humanamente los lista_cualificada del día (15–20 minutos) antes de meterlos en secuencias de email o LinkedIn. Ese HITL es el colchón frente a homónimos, sectores mal etiquetados y alucinaciones si más adelante sustituyes el juez por un LLM.
Si el scoring alimenta campañas automatizadas o usáis un modelo generativo como juez, sois deployers bajo el Reglamento (UE) 2024/1689 (EU AI Act). Desde el 2 de febrero de 2025 el Artículo 4 exige alfabetización en IA para quien opera estos flujos. Detalle en /uso-responsable-de-ia-y-transparencia. Texto informativo; no sustituye asesoramiento legal.
Preguntas frecuentes
¿Este flujo sustituye a Clay, Apollo o Cognism?
No. Esas herramientas (o tu CSV) aportan filas brutas o enriquecidas. Este JSON decide quién entra en la lista cualificada y el CRM según tu ICP escrito, con log de descartes en Sheets.
¿Necesito OpenAI u otro LLM para que funcione?
No para la demo ni para producción básica. El juez es Code heurístico editable. Puedes sustituirlo por HTTP a tu modelo más adelante, siempre con HITL y alfabetización Art. 4 documentadas.
¿Qué scoreThreshold debería usar al empezar?
Empieza en 65 con el payload de 5 leads. Revisa quién pasa y por qué (icpReasons). Súbelo si entran demasiados perfiles flojos; bájalo solo si tu ICP es muy estrecho y pierdes perfiles válidos de forma sistemática.
¿Puedo enviar la lista a Pipedrive en vez de HubSpot?
Sí. Cambia crmProvider en Config Listas ICP/CRM (hubspot|pipedrive). El nodo Upsert ya elige URL, auth y cuerpo. En HubSpot el upsert por email evita duplicados; en Pipedrive crea persona —añade búsqueda previa si necesitas dedup.
¿Para qué sirve maxBatchPerRun?
Es el rate limit por ejecución. Limitar lote recorta el input a ese techo (40 por defecto) para no volcar cientos de filas de golpe al CRM, Sheets o Slack. Sube o baja según tu cupo diario de revisión humana.
¿Qué columnas debe tener la pestaña Listas_ICP?
fecha, batchLabel, listName, company, email, title, sector, country, icpScore, icpReasons, complianceFlag, crmProvider y estado (lista_cualificada o fuera_icp). Sin esa pestaña, los Append Sheets fallarán al autenticarse.
¿Dónde van mis tokens de HubSpot, Pipedrive y Slack?
Nunca en el JSON descargado. Ese archivo trae REEMPLAZA_* a propósito. Crea Credentials dentro de n8n y enlázalas en los nodos HTTP/Sheets antes de Active.
¿Dónde está la guía larga de este recurso?
En el artículo companion /como-construir-listas-leads-b2b-cualificados-con-ia. Esta página es la mitad de implementación (JSON + pasos). El artículo cubre ICP escrito, riesgos, HITL y RGPD con más contexto.