Mercado Libre + Shopify: sincronización de stock y emisión automática de boletas
Muchas tiendas tienen su tienda principal en Shopify, pero también venden a través de Mercado Libre. Este modelo multicanal trae dos problemas muy comunes:
- Inventario desincronizado: cuando se vende en Mercado Libre, Shopify sigue mostrando stock. Para la mayoría de los comercios, Shopify es el sistema maestro de inventario, por lo que cada venta debe reflejarse ahí.
- Emisión manual de boletas: tras cada venta en Mercado Libre, alguien debe emitir la boleta en un sistema de facturación electrónica y luego subirla manualmente al portal de Mercado Libre. Un proceso lento, propenso a errores y poco escalable.
La solución: automatizar ambos pasos usando Appwrite y Make, integrando las APIs de Mercado Libre, Shopify y tu emisor de factura electrónica.
1) Arquitectura general
👉 Mercado Libre dispara un webhook cuando hay novedades en una orden.
👉 Una función en Appwrite recibe este webhook, lo valida, renueva el token si es necesario y reenvía la orden a Make sólo cuando es una venta en la que se debe sincronizar inventario o emitir boleta o factura.
👉 Make se encarga de orquestar la lógica de negocio:
- Descuenta inventario en Shopify y deja el producto en borrador si no tiene stock.
- Emite la boleta (en nuestro caso Haulmer vía API de Open Factura)
- Subir el PDF de la boleta (o factura) a Mercado Libre.
- Además, registra todo en Google Sheets y notifica por correo en caso de errores.
Para que Mercado Libre dispare un webhook con cada evento, debes registrar primero una aplicación, esta configuración no es parte de este post, pero debes realizarlo si deseas implementar esta solución.
2) Renovación de tokens en Mercado Libre
Mercado Libre funciona con OAuth2. El access_token que permite acceder a las APIs expira en pocas horas, por lo que se debe usar el refresh_token para renovarlo antes de que caduque.
El endpoint utilizado es:
POST https://api.mercadolibre.com/oauth/token
Si no se renueva a tiempo, cualquier consulta a la API devuelve un 401 Unauthorized.
Para esto, todas las notificaciones las enviamos a Appwrite, donde tenemos una función que asegura de revisar cada vez y renovar automáticamente cuando corresponde.
3) Consulta y validación de órdenes
Cada vez que llega un webhook de Mercado Libre, la función en Appwrite obtiene la orden completa con:
GET https://api.mercadolibre.com/orders/{order_id}
En caso de que la orden pertenezca a un pack, es necesario consultar el pack y luego las órdenes individuales que lo componen:
GET https://api.mercadolibre.com/packs/{pack_id}
Con esa información, se validan ítems, costos de envío y estado de pago, asegurando que solo se procesen órdenes realmente confirmadas, además evita enviar órdenes en las que no se debe descontar inventario (ventas full por ejemplo), o notificaciones que ya fueron enviadas previamente a Make (Mercado Libre puede notificar varias veces una misma venta). Este paso se hizo en Appwrite para evitar un consumo excesivo de créditos, la función puede consultar las órdenes en una base de datos y filtrar de manera eficiente, así sólo enviamos a Make cuando efectivamente se debe realizar una acción (boleta o inventario).
4) Sincronización de inventario en Shopify
En el escenario de Make, una vez confirmada la orden:
- Si el producto existe y tiene stock en Shopify → se descuenta la cantidad vendida.
- Si no tiene stock → se cambia el estado a borrador en Shopify, evitando sobreventas.
De esta manera, Shopify se mantiene como la única fuente de verdad en inventario, reflejando en tiempo real las ventas de Mercado Libre.
El flujo también llama una función en Appwrite (detalle en punto siguiente) para emitir la boleta, luego la adjunta a la venta en Mercado Libre.
Pueden ver en la imagen varios nodos de Gmail y Google Sheets, esto es porque cada operación la registramos en una planilla y casos bordes se envían notificaciones por correo (ejemplos: producto no encontrado, producto sin inventario),

5) Emisión de boletas electrónicas
Una segunda función en Appwrite se encarga de emitir las boletas automáticamente.
- Armar payload DTE: se construye el documento tributario con ítems, cantidades, precios y totales.
- Emitir boleta, en nuestro usamos las APIs de Haulmer)/Open Factura usando:
POST https://api.haulmer.com/v2/dte/document
La respuesta incluye un FOLIO
y un TOKEN
, que permite obtener el pdf de la boleta emitida.
3. Descargar PDF de la boleta:
GET https://api.haulmer.com/v2/dte/document/{TOKEN}/pdf
- Subir PDF a Mercado Libre asociado a la orden o pack correspondiente:
POST https://api.mercadolibre.com/packs/{pack_id}/fiscal_documents
- Registrar en base de datos: se guarda el folio y el token para evitar duplicar la boleta si Mercado Libre vuelve a enviar una notificación por esta venta.
6) Casos especiales contemplados
- Órdenes FULL: se ignoran, porque Mercado Libre administra fulfillment e inventario en esos casos.
- Packs: se consultan todas las órdenes del pack y se emite una sola boleta consolidada.
- Productos sin stock: se cambian automáticamente a estado borrador en Shopify.
- Prevención de duplicados: En Appwrite guardamos
order_id
opack_id
para no emitir ni procesar dos veces la misma venta.
7) Resultado final
Con esta integración:
- Cada venta en Mercado Libre descuenta inventario en Shopify en tiempo real.
- La boleta se emite automáticamente.
- El PDF se sube a Mercado Libre sin intervención manual.
- Todo el flujo queda registrado en Google Sheets y, en caso de errores o casos bordes, se generan correos de alerta.
8) Beneficios directos
- Evita sobreventas al mantener Shopify sincronizado.
- Ahorra horas de trabajo manual eliminando la emisión y carga manual de boletas.
- Entrega trazabilidad con registros en Google Sheets y alertas automáticas.
- Escalable: la misma arquitectura puede ampliarse para otros marketplaces o procesos como devoluciones.
👉 En resumen, usando Appwrite como capa de control y Make como orquestador, es posible automatizar por completo la sincronización de inventario y la emisión de boletas en Mercado Libre, manteniendo a Shopify como el sistema maestro de inventario.