Evitar la sobreventa multicanal en Odoo
Por qué vendes unidades que ya no tienes cuando estás en varios marketplaces, cómo reconocer el problema y cómo cerrarlo de raíz con sincronización de stock en tiempo real.
La sobreventa (vender una unidad que ya no está en almacén) no suele venir de un error humano puntual: es un problema estructural de cómo se sincroniza el stock entre Odoo y los canales de venta. Mientras vendes solo en tu propia web el riesgo es bajo, porque hay una única fuente de verdad. En cuanto añades Amazon, un marketplace Mirakl o ManoMano, aparecen varias copias del stock que tienen que mantenerse iguales, y ahí empiezan los problemas.
Síntomas: ¿estás sobrevendiendo?
Si reconoces dos o más de estos, tienes un problema de sincronización, no de mala suerte:
- Recibes pedidos de un marketplace de un producto que en Odoo aparece a 0 o en negativo.
- Tienes que cancelar pedidos ya confirmados y reembolsar al cliente porque no puedes servir.
- Amazon te penaliza por Order Defect Rate o Cancellation Rate alto, o te suspende un ASIN.
- En marketplaces Mirakl ves incidents por entregas fuera de plazo derivadas de roturas de stock.
- Tu equipo dedica horas a cuadrar stock a mano entre el panel de cada canal y Odoo.
- El mismo SKU muestra cantidades distintas en cada canal a la misma hora.
Por qué ocurre: las tres causas reales
Cada canal guarda su propia cantidad disponible. Si la venta en el canal A no descuenta inmediatamente del canal B, durante esos segundos o minutos ambos pueden vender la misma unidad. Es la causa raíz del 90% de los casos.
Aunque envíes la actualización al instante, el marketplace tarda en procesarla. Amazon, por ejemplo, encola los feeds de inventario y puede tardar de minutos a más de media hora en aplicarlos en picos de carga. Esa ventana es suficiente para vender de más.
Subir un CSV cada mañana, o un cron que sincroniza "cada hora", garantiza que durante todo ese intervalo el stock publicado está desfasado. En productos de 1-2 unidades y alta rotación, una hora es una eternidad.
El mecanismo, paso a paso
Imagina un producto con 1 unidad publicado en Amazon y en un marketplace Mirakl:
- 10:00:00 — Un cliente compra la unidad en Amazon.
- 10:00:02 — Odoo recibe el pedido (si el conector es por webhook) o no se entera hasta el próximo ciclo (si es por polling).
- 10:00:05 — Otro cliente compra la misma unidad en Mirakl, porque allí todavía figura disponible.
- 10:00:30 — Odoo intenta empujar "stock 0" a Mirakl, pero ya es tarde: tienes dos pedidos y una sola unidad.
El resultado es un pedido que tendrás que cancelar. Cuanto mayor sea cualquiera de esos retardos, más probable es el choque. Por eso el objetivo no es "sincronizar más a menudo", sino reducir la ventana a su mínimo.
Qué NO arregla el problema del todo (sé honesto contigo mismo)
- Buffers de stock. Publicar 8 cuando tienes 10 reduce el riesgo, pero te deja inventario sin vender y no sirve en referencias de pocas unidades. Útil como parche temporal, no como solución.
- Sincronizar "más rápido" por lotes. Pasar de 1 hora a 5 minutos ayuda mucho, pero la ventana sigue existiendo. En alta rotación seguirás teniendo choques ocasionales.
- Revisar a mano cada mañana. No escala, se rompe con vacaciones o picos, y siempre llega tarde.
La solución: sincronización por evento en tiempo real
Para cerrar la sobreventa de raíz necesitas que Odoo sea la única fuente de verdad del stock y que cada cambio se propague a todos los canales por evento, no por reloj. En la práctica un conector bien hecho hace tres cosas:
- 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, en el mismo flujo, recalcula la cantidad disponible.
- Empuja el nuevo disponible a todos los demás canales de forma inmediata, no en el próximo lote.
Importante y honesto: ningún conector elimina la latencia interna del marketplace (causa nº 2). Lo que sí elimina es la latencia que depende de ti (causas 1 y 3), que es la mayoritaria. Combinado con un buffer mínimo de 1 unidad en tus referencias más críticas, la sobreventa pasa de ser semanal a ser anecdótica.
Webhook vs. polling: qué exigirle a tu conector
No todos los marketplaces ofrecen avisos en tiempo real. Conviene saber con qué juegas:
- Webhook (push): el marketplace te avisa al instante de cada pedido. Es lo ideal, pero no todos lo soportan para todo.
- Polling (pull): tu conector pregunta cada X segundos/minutos. Funciona en todos lados, pero la frecuencia define tu ventana de riesgo. Pregunta siempre cada cuánto sincroniza un conector antes de comprarlo.
En Mirakl (Decathlon, Leroy Merlin, El Corte Inglés, etc.) se trabaja sobre todo con su API de ofertas y pedidos; en Amazon, con SP-API y sus feeds de inventario. Cada uno tiene sus tiempos, y un conector serio debe documentarlos en vez de prometerte "tiempo real" sin matices.
Resumen de causas y solución
| Causa | Síntoma típico | Solución |
|---|---|---|
| Stock no sincronizado en tiempo real | Dos canales venden la misma unidad | Sincronización por evento, Odoo como fuente única |
| Latencia del marketplace | El feed tarda en aplicarse | Buffer mínimo en referencias críticas (no se elimina) |
| Actualizaciones manuales / por lotes | Stock desfasado durante todo el intervalo | Conector automático, sin CSV ni crons horarios |
Alternativas: ¿hay módulos OCA gratis?
Sí, conviene saberlo. La comunidad OCA mantiene el repositorio connector 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 y mantener un job-queue, son una opción perfectamente válida y honesta.
El límite práctico: para Amazon, Mirakl o ManoMano no hay conector OCA mantenido y listo para producción, y montar la sincronización por evento con manejo de errores, reintentos y mapeo de SKUs lleva trabajo real. Ahí es donde un conector propietario probado te ahorra semanas. No es magia: es código que alguien ya ha escrito, testeado y mantiene.
Sincroniza el stock por evento y deja de cancelar pedidos
Conector Mirakl para Odoo 17, 18 y 19. Lee pedidos, descuenta en Odoo y empuja el disponible a todos los canales. Desarrollado y mantenido por ingenieros en Barcelona.
Ver el conector Mirakl (100 €)¿No sabes qué conector necesitas para tus canales? Te lo decimos en 1 minuto, gratis y sin registro:
Hacer el test del conectorFAQ
¿Por qué se produce la sobreventa con varios marketplaces?
Cada canal guarda su propia copia del stock. Si las ventas no se descuentan al instante en el resto, hay una ventana en la que dos canales venden la misma unidad. La causa raíz es la latencia entre la venta real y la actualización del disponible en los demás canales.
¿Cada cuánto hay que sincronizar para evitarla?
Lo ideal es por evento (cuando cambia el quant en Odoo), no por intervalo fijo. Si solo cabe por intervalo, cada 5-15 minutos reduce mucho el riesgo, pero no lo elimina en referencias de poco stock y alta rotación. Solo el tiempo real cierra la ventana del todo.
¿Los buffers de stock son suficientes?
Reducen la probabilidad pero no la eliminan, y dejan inventario sin vender. Sirven como parche temporal o como red de seguridad en tus 5-10 referencias más críticas, no como solución única. En productos de 1-2 unidades el buffer te impide venderlas.
¿Me vale el Inventory estándar de Odoo?
Odoo Inventory gestiona el stock interno, pero no habla solo con Amazon, Mirakl o ManoMano. Necesitas un conector que lea las ventas de cada canal, las registre en Odoo y empuje el disponible de vuelta a todos. Sin esa capa, ni Odoo ni los marketplaces saben lo que se vende fuera.