Servicios profesionales

Cómo conectamos HubSpot y Holded con un orquestador propio

Caso real: conectamos HubSpot y Holded con un orquestador en n8n y automatizamos la captación de leads de la web. El alta manual pasó de 10 minutos a cero.

Orquestador que conecta el formulario de la web con HubSpot y Holded, sincronizando contactos y empresas entre el CRM y el ERP

10 min → 0

Alta de un cliente en HubSpot y Holded

En el mismo envío

Del formulario web a HubSpot

Ninguno

Datos que se teclean dos veces

El punto de partida

Este caso es nuestro. El mismo dato, tecleado tres veces.

Alguien rellena el formulario de la web y nos escribe. Ese contacto hay que crearlo en HubSpot para seguir la conversación comercial. Si la cosa avanza, hay que crearlo otra vez en Holded, ahora con el NIF y la dirección fiscal, para poder emitir una factura. Tres sitios, dos altas manuales, el mismo nombre.

Diez minutos por cliente nuevo: buscar los datos fiscales, comprobar que no estuviera ya en ninguno de los dos sistemas y rellenar las dos fichas. Y a partir de la segunda semana, el problema de fondo: dos versiones del mismo cliente separándose poco a poco. El teléfono actualizado en HubSpot y el antiguo en Holded. El nombre comercial en uno y la razón social en el otro. Cuando dos fichas dicen cosas distintas, alguien acaba trabajando con la equivocada.

Vendemos automatización de procesos. Tenía poco sentido seguir así.

Qué construimos

Un orquestador con tres piezas, montado encima de las herramientas que ya usábamos:

  • Captación. Un endpoint en nuestra propia web que recibe el formulario, nos avisa por email y crea el contacto en HubSpot.
  • CRM. HubSpot, donde vive el ciclo comercial: estado del lead, conversaciones y seguimiento.
  • Sincronización. Un flujo de n8n autoalojado que mantiene alineadas las entidades que HubSpot y Holded tienen en común.

Ninguna de las tres sustituye nada. HubSpot sigue siendo el CRM y Holded sigue siendo el ERP. Lo que cambia es que dejan de ser dos islas.

La captación: del formulario a HubSpot en el mismo envío

La primera pieza vive en el código de esta web. Cuando envías el formulario de contacto, el servidor hace tres cosas antes de responderte:

  • Valida. Nombre, formato del email, mensaje y consentimiento de privacidad, todo comprobado en servidor. Lo que valida el navegador no cuenta.
  • Filtra el spam. Un campo oculto que un humano nunca ve y que los bots rellenan. Si viene con contenido, la petición se descarta en silencio. Además hay un límite de cinco envíos por minuto y dirección IP.
  • Avisa y da de alta. Nos llega un email con los datos del formulario, con la dirección del remitente puesta como responder-a, así que se contesta desde el propio correo. En paralelo se crea el contacto en HubSpot con el estado de lead nuevo.

Un detalle de diseño que ahorra problemas: los campos cualificadores del formulario (sector, tamaño de la empresa, plazo y cómo nos conoció) se adjuntan al cuerpo del mensaje en lugar de crear una propiedad personalizada en HubSpot para cada uno. Menos superficie que mantener y una integración que no se rompe cada vez que alguien toca la configuración del CRM.

La sincronización entre HubSpot y Holded

La segunda pieza es un flujo de n8n en un servidor propio, no en la nube pública. Corre de forma programada, compara los dos lados y propaga las diferencias en ambos sentidos.

Sincroniza dos entidades, las únicas que HubSpot y Holded tienen realmente en común:

  • El contacto, la persona con la que hablas.
  • La empresa o cliente, la entidad a la que facturas.

Lo demás se queda donde está. Las facturas y los asientos contables viven en Holded. El pipeline comercial y las conversaciones viven en HubSpot. Sincronizar más de lo necesario multiplica los puntos de fallo sin aportar nada.

La pieza crítica es cómo se reconoce que dos fichas son la misma. Si el flujo compara por nombre, cualquier variación —una S.L. de más, un acento distinto— crea un duplicado. Cada registro tiene que reconocerse por un identificador estable, y esa decisión hay que tomarla antes de escribir la primera línea del flujo.

Por qué mantener HubSpot y Holded a la vez

Holded incluye su propio módulo de CRM, así que la pregunta razonable es por qué no usarlo y quitarse HubSpot de encima. O al revés.

Porque cada herramienta gana en su terreno. HubSpot lleva el ciclo comercial y el marketing con una profundidad que un módulo de CRM dentro de un ERP no cubre. Holded lleva la facturación, la contabilidad y los impuestos en España, que es exactamente donde una herramienta internacional se queda corta. Quedarse con una sola obliga a renunciar a algo concreto.

El orquestador quita la necesidad de elegir. Cada equipo trabaja en la herramienta que le sirve y los datos se mantienen alineados por debajo.

Lo que esto no resuelve: si tu equipo comercial lleva los clientes en una hoja de cálculo y no en un CRM, conectar dos sistemas no arregla nada. Primero hay que tener el dato en un sitio.

Cómo se lleva esto a cualquier sistema con API

El valor de este caso está en el patrón, que no depende de HubSpot ni de Holded. Son cuatro decisiones, y ninguna es técnica:

  1. Qué entidades tienen en común los dos sistemas. Casi siempre son menos de las que parece. Contacto, empresa, producto, pedido.
  2. Cuál es la clave estable de cada registro. El identificador que no cambia aunque cambien el nombre, el email o la dirección.
  3. Quién manda en cada campo. Campo a campo, no sistema a sistema. El teléfono comercial puede mandarlo el CRM y el domicilio fiscal el ERP.
  4. Qué pasa si el flujo se ejecuta dos veces. Un flujo que duplica registros al repetirse no está terminado.

Resueltas esas cuatro, la implementación es leer una API y escribir en otra. Y por eso el mismo esquema sirve para el ERP, la plataforma de facturación o el sistema de tickets que ya uses, siempre que publique una API.

Qué aprendimos

Llamar a dos APIs es la parte fácil. El trabajo de verdad estuvo en dos sitios.

El primero, los duplicados que ya existían. Antes de conectar nada hubo que limpiar las fichas que estaban repetidas o desalineadas en los dos sistemas. Conectar sobre datos sucios propaga la suciedad más rápido.

El segundo, decidir quién gana cuando el mismo campo cambia en los dos lados el mismo día. Es una decisión de negocio disfrazada de decisión técnica, y hasta que no está tomada por escrito el flujo no se puede escribir.

Lo montamos por fases, como hacemos siempre: primero la captación desde la web hacia HubSpot, después la sincronización con Holded. Cada pieza en producción antes de empezar la siguiente.

Si tienes el mismo problema

Si tecleas los mismos clientes en dos programas distintos, ya tienes el caso de negocio hecho: cuenta las altas al mes y multiplica por los minutos que te lleva cada una. Así abordamos la automatización de procesos, y por qué somos Solution Partner de Holded. Si el problema es más de papeleo que de integración, empieza por automatización de procesos administrativos.

Cuéntanos tu caso y te decimos qué sistemas conectaríamos primero. Estamos en Murcia y trabajamos en remoto para toda España.

Dudas frecuentes

Preguntas frecuentes

Sí, a través de las APIs de las dos plataformas. No existe un conector nativo entre HubSpot y Holded, así que la integración se construye a medida: un flujo intermedio lee los contactos y las empresas de cada lado y propaga las diferencias. Es el mismo planteamiento que sirve para cualquier par de sistemas con API pública.

No. Cada uno publica su propia API y su catálogo de integraciones, pero no se hablan entre sí de fábrica. Por eso la conexión hay que montarla, y por eso conviene decidir antes qué entidades se sincronizan y en qué dirección viaja cada campo.

Solo las entidades que los dos sistemas tienen en común: el contacto (la persona) y la empresa o cliente. Las facturas, los presupuestos y el pipeline comercial se quedan cada uno en su sitio. Sincronizar de más es la forma más rápida de romper una integración.

Ese es el caso que hay que resolver antes de conectar nada. El flujo reconoce cada registro por un identificador estable en lugar de por el nombre, y así detecta que las dos fichas son la misma persona en vez de crear una tercera. Los duplicados que ya existían se limpian antes de arrancar.

Depende de cada cuánto se ejecute el flujo. En nuestro caso corre de forma programada, compara los dos lados y propaga las diferencias sin que nadie lo lance a mano. Los leads nuevos que entran por el formulario de la web sí llegan a HubSpot en el mismo envío del formulario.

Sí. El patrón no depende de las dos herramientas: identificar las entidades comunes, fijar una clave estable, decidir la dirección de cada campo y hacer el flujo repetible sin duplicar. Con eso, el mismo esquema vale para el ERP, el CRM, la plataforma de facturación o el sistema de tickets que ya uses, siempre que tenga API pública.

¿Tienes un reto parecido?

Cuéntanos tu caso y te decimos cómo lo abordaríamos.