Se abre en una pestaña nueva
Logotipo de We Love SEO
Menú

Automatización y agentes · 30 de septiembre de 2026 · 10 min

Conectar Shopify con HubSpot (o Holded) sin pagar una app por cada cosa

Cómo integrar Shopify con HubSpot y Holded con un flujo de n8n: pedidos al CRM, facturas automáticas, stock único, sin duplicados y sin una app por cada cosa.

DiegoAutomatización
Portada del artículo de Automatización y agentes «Conectar Shopify con HubSpot (o Holded) sin pagar una app por cada cosa», firmado por Diego en We Love SEO
Imagen: We Love SEO

Integrar Shopify con HubSpot o con Holded sin una app por cada cosa se hace con un flujo de n8n que escucha los webhooks de la tienda (pedido creado, pedido pagado, cliente nuevo, stock actualizado) y escribe en el CRM y en el programa de facturación con sus APIs. Un flujo, sin cuota mensual por tienda, con los datos deduplicados y los errores controlados.

Es para quien tiene una tienda Shopify que vende, un HubSpot o un Holded que paga, y entre medias copia pedidos a mano o paga tres apps que no se hablan entre sí. Vas a encontrar qué conectar y en qué orden, cuándo el flujo gana a la app y cuándo no, el montaje nodo a nodo, cómo evitar duplicados, qué hacer con los errores y lo que cuesta.

Es una de las integraciones que hacemos cuando montamos flujos de automatización con n8n para una tienda, y la que más horas de administración quita desde el primer día.

¿Qué conviene conectar entre Shopify, HubSpot y Holded?

Cuatro cosas, en este orden: cada pedido crea o actualiza el contacto y abre un negocio en HubSpot; cada pedido pagado genera su factura en Holded; el stock se mantiene igual en Shopify y en Holded; y cada cliente nuevo entra en una secuencia de bienvenida del CRM. Los dos primeros ahorran horas desde el primer día; los otros dos, después.

QuéOrigenDestinoPara qué sirve
Pedido → contacto y negocioShopify orders/createHubSpotHistorial de compra en la ficha; segmentar por qué compra y cuánto
Pedido pagado → facturaShopify orders/paidHoldedFactura emitida sin teclear; contabilidad al día
StockShopify inventory_levels/update y cambios en HoldedLos dosUn solo stock para tienda y almacén
Cliente nuevo → secuenciaShopify customers/createWorkflow de HubSpotBienvenida, segunda compra, petición de reseña

Lo que no conviene conectar al principio: devoluciones, descuentos por cliente, catálogo completo. Son los casos con más excepciones y los que más errores generan. Mejor que el primer mes el flujo solo haga pedidos y facturas, y que una persona revise la cola de errores que describo más abajo.

Y la decisión previa. Si solo necesitas contactos y pedidos en HubSpot, la integración oficial de HubSpot para Shopify es gratuita y sincroniza contactos, pedidos y productos: instálala y no montes nada. El flujo propio empieza a tener sentido cuando entra Holded, cuando el stock tiene que ir en los dos sentidos o cuando quieres reglas tuyas (qué pedidos abren negocio, cómo se nombra la factura, qué cliente entra en qué secuencia). Lo que incluye y lo que no el plan de entrada está en HubSpot Starter para pymes.

¿Por qué no una app por cada cosa?

Porque cada app cobra una cuota mensual por tienda, muchas además por volumen de pedidos, y cada una guarda su propia copia de los datos: tres apps son tres cuotas, tres copias del cliente y tres sitios donde buscar cuando un pedido no aparece. Un flujo en n8n se paga una vez, escribe en tus herramientas (no en las suyas) y aplica tus reglas.

El problema de las copias es el más caro y el menos visible. Cuando el cliente cambia de correo o de dirección fiscal, cada app lo actualiza (o no) cuando le toca. A los seis meses tienes el mismo cliente tres veces en HubSpot y una factura en Holded con la dirección antigua. Ninguna app tiene la culpa: ninguna sabe que las otras existen.

El segundo problema son las reglas. Una app sincroniza «todos los pedidos». Tú quieres que un pedido de 15 € no abra un negocio en el CRM pero sí sume al historial; que la factura lleve la referencia del pedido en el concepto; que un cliente B2B vaya a una secuencia distinta. En una app, eso son opciones que existen o no. En un flujo, son nodos IF.

Cuando sí compensa la app: tiendas sin nadie que pueda abrir n8n una vez al mes, o una app gratuita que hace exactamente lo que necesitas. El criterio completo de app contra flujo está en la guía de automatización de marketing con n8n.

¿Cómo se monta el flujo en n8n con los webhooks de Shopify?

Con un Webhook de n8n por evento de Shopify, una verificación de firma, un nodo que normaliza el pedido y las escrituras en HubSpot (nodo propio) y en Holded (HTTP Request contra su API). Shopify envía el pedido en el momento en que se crea; el flujo responde en menos de cinco segundos y procesa después. Son tres flujos de unos diez nodos cada uno.

  1. Suscribir los webhooks. En la API de Shopify (en inglés) se registran los temas orders/create, orders/paid, customers/create e inventory_levels/update apuntando a la URL del Webhook de n8n. Shopify espera una respuesta 200 en cinco segundos; si no la recibe, reintenta hasta 19 veces durante 48 horas y, si sigue fallando, elimina la suscripción. Por eso el nodo Webhook responde al instante (Respond Immediately) y el trabajo viene detrás.
  2. Verificar la firma. Cada envío lleva la cabecera X-Shopify-Hmac-Sha256. Un nodo Crypto calcula el HMAC del cuerpo con el secreto de la app y un IF lo compara; si no coincide, se descarta. Sin esto, cualquiera que conozca la URL puede inventarte pedidos.
  3. Normalizar. Un nodo Edit Fields saca lo que importa: identificador del pedido, correo, nombre, NIF si lo pides en el checkout, dirección de facturación, líneas con SKU, cantidad, precio e impuestos, total y estado de pago.
  4. HubSpot. El nodo HubSpot de n8n con la operación de crear o actualizar contacto por correo (HubSpot deduplica contactos por email); después, crear el negocio con nombre «Pedido #1234», importe, etapa «Pagado» y una propiedad propia shopify_order_id; por último, asociar negocio y contacto. Si el pedido ya existe, se actualiza en vez de crear.
  5. Holded. Holded no tiene nodo propio en n8n; se usa HTTP Request contra la API de Holded con la clave en la cabecera key. Primero se busca el contacto por NIF o correo y se crea si no existe; después se crea el documento de tipo factura con las líneas, los impuestos y la referencia del pedido en el concepto. La factura la numera y la emite Holded, que es quien cumple la normativa de facturación; el flujo solo le pasa los datos.
  6. Secuencia. Para el cliente nuevo, el flujo pone en HubSpot la propiedad origen = shopify y la fecha de primera compra. El resto lo hace un workflow de HubSpot (en inglés) que se dispara con esa propiedad: bienvenida, petición de reseña a los 15 días, recordatorio de segunda compra. Las secuencias viven en HubSpot, no en n8n, para que marketing las cambie sin tocar el flujo.

El stock va aparte y en los dos sentidos. De Shopify a Holded, el webhook inventory_levels/update dispara una actualización del producto en Holded por SKU. De Holded a Shopify, un flujo cada 15 minutos pide a Holded los productos modificados y ajusta las cantidades en Shopify con la API de administración en GraphQL, que es la que Shopify mantiene (la REST está en modo heredado). La regla que evita el bucle: cada lado solo escribe si la cantidad es distinta y anota de dónde vino el último cambio.

Este flujo comparte Webhook y normalización con el de recuperar carritos sin app de pago, que escucha checkouts/create. Y los datos que deja en Holded (coste por SKU, factura por pedido) son los que necesita el panel de margen por producto.

¿Cómo se evitan los pedidos duplicados y los clientes repetidos?

Con una tabla de correspondencias que el flujo consulta antes de escribir nada: para cada shopify_order_id, el identificador del negocio en HubSpot y el de la factura en Holded. Si el pedido ya está, se actualiza; si no, se crea y se anota. Shopify puede enviar el mismo webhook dos veces y el flujo tiene que soportarlo sin crear dos facturas.

Los duplicados vienen de tres sitios. Shopify reenvía un webhook cuando no recibe el 200 a tiempo, aunque tu flujo lo haya procesado; orders/create y orders/paid llegan para el mismo pedido con segundos de diferencia; y una persona reenvía un pedido desde el panel. La cabecera X-Shopify-Webhook-Id identifica cada envío; guardarla y descartar la repetida es la primera línea de defensa.

La segunda es la tabla de correspondencias: una Data Table de n8n o una hoja de Google Sheets con pedido, negocio, factura, fecha y estado. Antes de crear en HubSpot o en Holded, el flujo busca el pedido en la tabla.

Para los clientes, la clave es el correo en HubSpot (lo deduplica solo) y el NIF en Holded; si no se pide en el checkout, el correo, con el riesgo de que el mismo cliente con dos correos sean dos contactos. Normalizar antes de buscar (minúsculas, sin espacios, NIF sin guiones) evita buena parte de los duplicados.

¿Qué pasa cuando falla la API de HubSpot o de Holded?

El flujo reintenta y, si sigue fallando, guarda el pedido en una cola de errores y avisa a una persona. Nunca se pierde un pedido en silencio. En n8n esto son tres cosas: la opción Retry On Fail del nodo, un flujo con Error Trigger que recoge lo que falla, y una conciliación nocturna que compara los pedidos del día en Shopify con los negocios y las facturas creadas.

  • Reintentos en el nodo. Cada nodo de HubSpot y cada HTTP Request a Holded con Retry On Fail activado: tres intentos con unos segundos de espera entre ellos. Cubre los errores temporales (límite de peticiones, un 502 puntual).
  • Error Trigger. Un flujo aparte que se dispara cuando cualquier ejecución falla: escribe el pedido, el nodo y el mensaje de error en la tabla de cola, y manda un aviso a Slack con el enlace a la ejecución. Quien lo revisa la relanza desde n8n cuando el problema se arregla.
  • Conciliación. Cada noche, un flujo pide a Shopify los pedidos pagados del día y los compara con la tabla de correspondencias. Lo que falta, se procesa; lo que sobra, se avisa. Es la red para el caso que los reintentos no cubren: que n8n estuviera caído cuando llegó el webhook y Shopify dejara de reintentar.

Los errores que más se repiten no son técnicos: un NIF mal escrito que Holded rechaza, un SKU que existe en Shopify y no en Holded, un impuesto que no cuadra. Por eso la cola de errores la revisa alguien de administración, no de sistemas, y el mensaje se traduce («falta el NIF del cliente del pedido #1234») en vez de pegar el JSON.

En una marca que venda online con almacén propio y facture con Holded, estos tres flujos sustituirían a la persona que pasa pedidos a facturas cada mañana. Es la parte de integraciones del marketing para ecommerce y marcas DTC, junto con el carrito abandonado y el panel de margen.

¿Cuánto cuesta integrar Shopify con HubSpot y Holded?

Desde 450 € por flujo si lo montamos nosotros, con el mapa de procesos previo de 290 € que se descuenta del primero, documentación y 60 días de soporte. Los tres flujos de este artículo (pedido a HubSpot, factura a Holded, stock) entran en el pack de tres desde 1.400 €, que incluye el panel de errores y alertas y dos horas de formación. Mantenimiento opcional desde 90 € al mes.

Las licencias no cambian: HubSpot y Holded ya los pagas; n8n cuesta cero en tu servidor o entre 20 y 60 € al mes en la nube. Shopify no cobra por webhooks ni por llamadas a su API dentro de los límites normales de una tienda. Frente a dos o tres apps con cuota mensual, el flujo se amortiza en meses; la cifra exacta depende de las apps que sustituyas y sale en el mapa de procesos con tus facturas delante.

Lo que sube el precio: herramientas sin API (un ERP antiguo), reglas con muchas excepciones, varias tiendas o varios idiomas, y cualquier paso que necesite revisión humana en medio. Lo que lo baja: pedir el NIF en el checkout, tener los SKU iguales en las dos herramientas y una lista escrita de qué pedido debe hacer qué.

Si quieres seguir por aquí, tienes más en nuestros artículos de automatización y agentes.

Preguntas frecuentes

¿Funciona con WooCommerce en vez de Shopify?

Sí. WooCommerce tiene webhooks equivalentes (pedido creado, pedido completado, cliente creado) y nodo propio en n8n. Cambia el disparador; HubSpot, Holded y la lógica de deduplicación son los mismos.

¿Y si uso Pipedrive, Zoho u otro programa de facturación?

El patrón vale para cualquier herramienta con API. Pipedrive y Zoho tienen nodo en n8n; para facturación, Quipu, por ejemplo, se conecta con HTTP Request igual que Holded. Lo que cambia es el nombre de los campos, no el flujo.

¿Hace falta saber programar?

No para montarlo con nodos: el tutorial oficial de n8n (en inglés) se hace en una hora y enseña lo básico. Sí hace falta entender qué es un webhook y leer la documentación de las APIs. La verificación de firma y la conciliación son los dos puntos donde conviene que lo mire alguien que lo haya hecho antes.

¿Qué pasa si Holded o HubSpot cambian su API?

El paso afectado falla, el Error Trigger lo avisa el mismo día y la conciliación nocturna señala los pedidos que faltan. Arreglarlo suele ser cambiar un campo o una URL en un nodo; es lo que cubre el mantenimiento opcional.

—

Diego lleva las automatizaciones de We Love SEO: conecta formularios, CRM, tiendas e informes con n8n, y documenta lo que falla. Más sobre él en el equipo.

Escrito por Diego

Automatización

Conecta tu formulario con tu CRM, tu CRM con tu calendario y tu calendario contigo.

Todos sus artículosQuién es

Seguir leyendo

Sin Humo · un correo cada quince días

Un análisis con números, un recurso y lo que ha cambiado en buscadores e IA. Tres minutos de lectura.

WhatsApp