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:
- Qué entidades tienen en común los dos sistemas. Casi siempre son menos de las que parece. Contacto, empresa, producto, pedido.
- Cuál es la clave estable de cada registro. El identificador que no cambia aunque cambien el nombre, el email o la dirección.
- 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.
- 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.
