DEV Community

Synco
Synco

Posted on

Queue-Based Shopify Odoo Sync: Why Architecture Matters More Than Features

Every Shopify Odoo connector on the App Store claims to do the same thing — sync orders and inventory between the two platforms. The marketing pages are nearly identical. The feature tables look the same. The demo videos all show an order moving from Shopify into Odoo.

What they do not show is what happens when things go wrong. And in production, things always go wrong at some point.

The failure modes nobody demos
A Shopify webhook fires during an Odoo maintenance window. The connector receives the payload, tries to write to Odoo, gets a connection error, and silently drops the event. The order never lands in Odoo. Nobody knows until someone manually checks two days later.

A flash sale hits. Shopify fires 400 webhook events in 90 seconds. The connector processes them synchronously and hits Shopify's API rate limit mid-batch. Everything after the rate limit trigger is lost. Inventory in Odoo is now wrong by exactly however many events were dropped.
These are not edge cases. They are what happens under real production load when a connector is built without a proper queue.

Queue-based architecture — how it actually works
A properly built connector separates event ingestion from event processing.
Shopify webhook fires

Event written to persistent queue (acknowledged immediately)

Queue worker picks up event

Attempts write to Odoo

Success → mark complete
Failure → retry with exponential backoff

Max retries exceeded → surface to operator log
Every event is durable the moment it is acknowledged. If Odoo is down, the queue holds events and processes them when Odoo comes back. If Shopify rate-limits a batch, the queue retries without creating duplicates. The operator sees every failed event in a log and can retry manually if needed.

This is the architecture that makes a connector actually reliable in production — not a feature list, not the number of integrations, not the UI.

The other architectural decision: webhooks vs polling
Beyond queue handling, the other decision that separates reliable connectors from fragile ones is whether sync is webhook-driven or polling-based.

Polling checks Shopify for changes on a schedule. Every 5 minutes, every 15 minutes. In that window, an order can sit in Shopify without landing in Odoo. During peak volume, multiple orders can arrive and queue up — or worse, inventory can go negative because Odoo stock did not update before the next Shopify sale hit.

Webhook-driven sync fires immediately on every event. Order created, inventory updated, fulfillment processed — every event triggers an immediate write to Odoo through the queue. No polling window. No lag. No inventory drift.

**Odoo-specific considerations
**There is one more thing that makes Shopify-Odoo integration harder than other ERP connections: Odoo's module system.

Many connectors require you to install a custom module on your Odoo instance. That creates a version dependency — your connector version has to stay compatible with your Odoo version. Every Odoo upgrade becomes a connector upgrade coordination exercise. On Odoo Online, you cannot install custom modules at all, which means module-based connectors simply do not work.

A connector that communicates with Odoo entirely through the external API - no module required on the Odoo side is significantly easier to maintain across Odoo version upgrades and works on all deployment types including Odoo Online.

Further reading
If you are evaluating a Shopify Odoo connector for a production store and want to understand how the queue-based retry architecture works in practice, Synco's connector overview covers the implementation in detail.

For stores dealing with inventory accuracy issues specifically — stock going negative, oversells, or Shopify quantities drifting from Odoo warehouse truth — the Shopify overselling fix page walks through the technical root cause and how proper connector architecture resolves it.

For multi-warehouse operations where Shopify locations need to map to specific Odoo warehouses rather than a pooled stock count, the multi-location inventory sync documentation covers the mapping logic and configuration.

Top comments (0)