Sincronizar stock entre marketplaces y Odoo
Cómo mantener una única fuente de verdad del inventario entre Amazon, Mirakl, ManoMano, Shopify y Odoo: por qué el CSV y las actualizaciones a mano siempre van por detrás, y cómo resolverlo con un conector.
Cuando vendes el mismo producto en varios canales, el problema central no es tener stock, es tener una sola cifra de stock que todos respeten. En cuanto Amazon, un marketplace Mirakl (Decathlon, Leroy Merlin, El Corte Inglés…), ManoMano, tu Shopify y tu Odoo manejan cada uno su propia copia del inventario, esas copias empiezan a divergir. Esta guía explica cómo montar una fuente de verdad en Odoo, por qué los métodos manuales no aguantan, y qué le tienes que exigir a un conector para que la sincronización sea fiable. Sin promesas vacías: también te decimos dónde un conector no puede ayudarte.
El concepto clave: una única fuente de verdad
"Fuente de verdad" (single source of truth) significa que hay un solo sitio que decide cuántas unidades hay, y todo lo demás obedece. En un setup de e-commerce con Odoo, ese sitio debe ser Odoo, por una razón sencilla: es el único punto donde confluyen todos los eventos que cambian el stock.
- Las compras a proveedor entran como recepciones en Odoo.
- Los ajustes de inventario (mermas, roturas, recuentos) se registran en Odoo.
- Las devoluciones de cualquier canal vuelven a sumar en Odoo.
- Las ventas de cada marketplace se traen a Odoo y descuentan.
La regla de oro: el stock se calcula en Odoo y se empuja hacia fuera; nunca se deja que un marketplace mande sobre la cantidad. El sentido de la información del stock es siempre Odoo → canal. (El sentido contrario, canal → Odoo, es solo para pedidos y devoluciones.)
Por qué fallan el CSV y las actualizaciones manuales
Casi todo el mundo empieza igual: exportando un CSV de stock de Odoo y subiéndolo al panel de cada marketplace, o ajustando cantidades a mano. Funciona con 30 referencias y un canal. Se rompe en cuanto creces. Estos son los fallos concretos que verás:
Es una foto del stock en el segundo en que lo exportas. Entre generarlo, subirlo y que el marketplace lo procese pasan minutos u horas. Cuando se aplica, la cifra ya no es real porque has seguido vendiendo.
Un SKU que no coincide, una columna desplazada, un decimal con coma en vez de punto, o una codificación rara y publicas cantidades equivocadas en cientos de referencias a la vez, sin que nadie se entere hasta que llega la queja.
Con 4 canales y 500 SKUs, cuadrar a mano son horas diarias. Se rompe en vacaciones, en bajas o en picos de Black Friday, justo cuando más caro sale equivocarse.
Y los errores no son cosméticos. Si subes de más, vendes lo que no tienes (sobreventa, cancelaciones, penalización). Si subes de menos por miedo, dejas inventario muerto sin vender. El CSV te obliga a elegir entre las dos cosas malas.
El choque típico, paso a paso
Producto con 3 unidades, publicado en Amazon y en un marketplace Mirakl, sincronizado por CSV cada hora:
- 09:00 — Subes el CSV. Amazon y Mirakl muestran 3 unidades.
- 09:20 — Vendes 2 en Amazon. Odoo (si el conector lee Amazon) queda en 1. Mirakl sigue mostrando 3.
- 09:40 — Vendes 2 en Mirakl, porque allí aún figuran 3. Acabas de vender 4 unidades teniendo 3.
- 10:00 — Subes el siguiente CSV con "1 unidad". Demasiado tarde: ya tienes un pedido que cancelar.
El intervalo del CSV es exactamente tu ventana de riesgo. Cuanto más largo, más probable el choque. Por eso el objetivo no es "subir el CSV más a menudo", sino eliminar el CSV y sincronizar por evento.
El enfoque correcto: sincronización por evento
La alternativa fiable es que cada cambio de stock se propague por evento, no por reloj. Con Odoo como fuente de verdad, un conector bien hecho hace tres cosas en un único flujo:
- Lee las ventas de cada canal en cuanto ocurren (por webhook donde el marketplace lo permite, o por polling muy frecuente donde no) y crea el pedido en Odoo.
- Descuenta el stock en Odoo y recalcula la cantidad disponible (libre de reservas) en el momento.
- Empuja el nuevo disponible a todos los demás canales de inmediato, no en el próximo lote.
Así el CSV desaparece, el mapeo de SKUs se configura una vez, y la cifra que ve cada canal sale siempre del mismo cálculo. La ventana de riesgo se reduce de "una hora" a "los segundos que tarde el marketplace en aplicar el cambio".
Qué exigirle a un conector (lista de comprobación honesta)
No todos los conectores son iguales. Antes de comprar uno, pregunta:
- ¿Cada cuánto sincroniza? ¿Por evento/webhook o por intervalo? Si es por intervalo, ¿cuál? Esa cifra es tu ventana de riesgo.
- ¿Qué empuja exactamente? Debe enviar el disponible (stock libre, descontadas reservas), no el stock físico bruto, o seguirás vendiendo unidades ya comprometidas.
- ¿Cómo mapea los SKUs entre Odoo y cada canal? ¿Por referencia interna, por código de barras, por un mapa manual?
- ¿Qué hace si una llamada falla? Un conector serio reintenta, registra el error y no deja el stock a medio actualizar (idempotencia y cola de trabajos).
- ¿Soporta multi-almacén y reglas de stock por canal (por ejemplo, reservar parte del inventario para tu web)?
- ¿Para qué versiones de Odoo está mantenido? (17, 18, 19.)
Desconfía de cualquiera que prometa "tiempo real" sin matizar la latencia del marketplace. Un proveedor honesto te dice dónde puede y dónde no puede cerrar la ventana del todo.
Lo que un conector NO arregla (sé honesto)
- La latencia interna del marketplace. Amazon encola los feeds de inventario y puede tardar de minutos a más de media hora en aplicarlos en picos. Ningún conector elimina eso; lo que sí elimina es el retardo que depende de ti (el CSV, el cron horario, el ajuste manual).
- Los datos de partida malos. Si tu stock en Odoo no cuadra con el almacén real, el conector propagará fielmente una cifra equivocada. Primero ordena el inventario, luego sincroniza.
- Las roturas de stock reales. Si no tienes producto, no hay sincronización que lo invente. Para referencias muy críticas y de pocas unidades, un buffer mínimo de seguridad sigue teniendo sentido como red.
Comparativa de métodos de sincronización
| Método | Latencia / ventana de riesgo | Esfuerzo de mantenimiento | ¿Para quién? |
|---|---|---|---|
| CSV / manual | Horas. Caducado al subirlo. | Alto y diario. No escala. | Pocas referencias, un solo canal. |
| Cron por lotes (cada X min) | El intervalo del cron. | Medio. Hay que vigilarlo. | Volumen medio, baja rotación. |
| Conector por evento | Segundos (+ latencia del canal). | Bajo tras configurarlo. | Varios canales, alta rotación. |
¿Hay alternativas OCA gratis?
Sí, y conviene saberlo. La comunidad OCA mantiene el repositorio connector (el framework de colas y jobs) y conectores como connector_woocommerce o piezas para prestashop, gratuitos y con licencia AGPL. Si vendes en esos canales y tienes equipo técnico para instalar, configurar el job-queue y mantenerlo, son una opción perfectamente válida y honesta. La sincronización por evento se puede montar con ellos.
El límite práctico: para Amazon, Mirakl o ManoMano no hay un conector OCA mantenido y listo para producción. Montar la lectura de pedidos, el empuje del disponible, el manejo de errores, los reintentos y el mapeo de SKUs lleva semanas de trabajo real. Ahí es donde un conector propietario probado ahorra tiempo. No es magia: es código que alguien ya ha escrito, testeado y mantiene para cada versión de Odoo.
Una sola cifra de stock, en todos tus canales
Conector Mirakl para Odoo 17, 18 y 19: lee pedidos de cada marketplace, descuenta en Odoo como fuente única y empuja el disponible recalculado a todos los canales. Desarrollado y mantenido por ingenieros en Barcelona.
Ver el conector Mirakl (100 €)¿Vendes en Amazon, Shopify o ManoMano y no sabes qué conector necesitas? Te lo decimos en 1 minuto, gratis y sin registro:
Hacer el test del conectorFAQ
¿Cuál debe ser la fuente de verdad del stock?
Odoo. Es el único sitio donde confluyen compras, ajustes, devoluciones y ventas de todos los canales, así que es el único que conoce la cantidad real. La regla: el stock se calcula en Odoo y se empuja a cada marketplace, nunca al revés.
¿Por qué falla el CSV o el ajuste manual?
El CSV es una foto caducada: entre exportarlo, subirlo y que el canal lo procese pasan minutos u horas durante los que la cifra ya no es válida. Además es propenso a errores de mapeo (SKU, columnas, decimales) que publican cantidades equivocadas a la vez. No escala más allá de unas decenas de productos.
¿Y si se vende a la vez en Amazon y Mirakl?
Sin sincronización por evento, ambos pueden vender la misma unidad antes de que Odoo descuente y avise al otro canal: sobreventa, cancelación y penalización. La solución es que cada venta descuente en Odoo al instante y el nuevo disponible se empuje de inmediato al resto.
¿Me vale el Inventory estándar de Odoo?
Odoo Inventory gestiona el stock interno, pero no habla solo con Amazon, Mirakl, ManoMano o Shopify. Necesitas un conector que lea las ventas de cada canal, las registre en Odoo y empuje el disponible de vuelta. Sin esa capa, ni Odoo ni los marketplaces saben lo que se vende fuera.