Part of Hasil Sync — the same engine, on every storefront and every ERP.
Odoo → Shopify integration · Updated 2026
Your Odoo inventory and your Shopify storefront
stop disagreeing — in under 20 minutes.
If your team is manually re-entering products, fixing oversold items, or running brittle Zapier zaps to keep Odoo and Shopify roughly in agreement — this page is for you. Hasil Sync is the no-code, webhook-driven connector between the two: click Connect and approve access through Shopify's official OAuth, paste Odoo credentials, choose what flows which way.
Cancel anytime during the trial · No Shopify App Store install · No custom Odoo modules
The problem
The drift problem, named honestly
Odoo is the source of truth for inventory, costs, and accounting. Shopify is the source of truth for the customer experience. Both are right, and they update independently. Without a real integration in between, four things break — every single one of them costs money:
- Oversells. Shopify shows stock that Odoo already allocated to a wholesale order. The retail buyer pays, you refund, they don't come back.
- Stale prices. A pricelist update in Odoo doesn't reach Shopify until someone remembers to re-export the CSV. Margin quietly leaks.
- Manual order re-entry. A Shopify order has to be keyed into Odoo for fulfilment and accounting. One typo per 200 orders is industry baseline.
- Zapier per-task creep. "We solved it with Zapier" holds until a flash sale fires 4,000 inventory webhooks and the monthly task bill triples.
Architecture
Scheduled runs, idempotent writes.
Hasil reads Odoo over its external API and writes to Shopify over official OAuth. Runs happen automatically every 6 hours, or on demand — and every write is idempotent.
┌────────────────┐ ┌──────────────────┐
│ Odoo │ webhook (product/stock/ │ Shopify │
│ 15 · 16 · 17 │ ◀───── order events) ─────▶ │ Admin API │
│ 18 / .sh / EE │ │ OAuth only │
└───────┬────────┘ └────────▲─────────┘
│ │
│ outbound webhooks inbound │
▼ writes │
┌────────────────────────────────────────────────────────┴───────┐
│ Hasil Sync │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ entity_ │ │ sync_queue │ │ sync_health │ │
│ │ mappings │ │ (retry + │ │ (queue depth, │ │
│ │ (Odoo→Shop) │ │ backoff) │ │ last-success/obj) │ │
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
│ Raw payloads auto-purge after 30 days · No funds ever touched │
└────────────────────────────────────────────────────────────────┘Schematic of the actual data flow. Tables shown (entity_mappings, sync_queue, sync_health) are the real backend tables Hasil Sync runs on — not invented UI.
How it works
5 steps to a live Odoo → Shopify sync.
- 1
Connect Shopify through official OAuth
Click Connect Shopify and approve access through Shopify's official OAuth flow. No Shopify App Store install, no theme edits.
- 2
Connect Odoo with database URL + API key
Point Hasil at your Odoo database URL and paste an Odoo user API key. Built for Odoo 16 and 17 (Community, Enterprise, Odoo.sh). No custom Odoo modules to install, no Odoo source modifications.
- 3
Map your fields once
Choose which Odoo product field maps to Shopify SKU, how Odoo pricelists map to Shopify price lists, and which Odoo warehouses feed which Shopify locations. Defaults are pre-filled — most merchants accept them as-is and skip to step 4.
- 4
Sync runs on a schedule you control
Products, prices, and stock move Odoo → Shopify on an automatic sync every 6 hours, or whenever you press sync. Shopify orders land in Odoo as draft quotations within seconds of checkout. Every write is idempotent, so re-running never duplicates.
- 5
Reconcile and watch sync_health
Every entity carries a stable mapping ID. If a write fails, it lands in a retry queue with backoff. The sync_health dashboard shows queue depth, failure rate, and last-successful-sync per object type. You see drift before your buyers do.
Compatibility
Supported Odoo versions.
Hasil Sync talks to Odoo over its standard external API. No custom modules, no Odoo source patches, no specific module dependencies beyond the stock modules (Sales, Inventory, Contacts).
Odoo 16
Community · Enterprise · Odoo.sh — stress-tested at 1,000 req/hr
Odoo 17
Community · Enterprise · Odoo.sh — stress-tested at 1,000 req/hr
Odoo 15 and earlier are not supported. Odoo 18 is on the roadmap but not yet validated against the 1,000 req/hr stress test — we'll announce support here the moment it passes.
Three design rules
Every plan, no exceptions.
Official OAuth, no App Store
No Shopify App Store, no theme edits. You click Connect, approve the scopes, and we read only what we need.
We never touch funds
Orders flow through Shopify's own checkout and Odoo's own invoicing. Hasil moves data, never money.
Minimal data, 30-day purge
Raw webhook payloads auto-delete after 30 days. We keep only the durable mappings and queue state the sync needs.
Free playbook
Not ready to wire Odoo today? Take the playbook.
Free Shopify B2B Pricing Playbook — pricing models, inventory rules, and the exact draft-order flow Hasil uses. Concise, no fluff.
FAQ
Odoo → Shopify integration — common questions
Which Odoo versions does Hasil Sync support?+
Odoo 16 and 17 — Community, Enterprise, and Odoo.sh — stress-tested at 1,000 requests per hour. No custom Odoo modules need to be installed, and no patches to Odoo source are required. Odoo 15 and earlier are not supported; Odoo 18 is not yet validated and will be announced when it is.
Does this need a Shopify App Store install?+
No. Hasil connects to Shopify through official OAuth — no Shopify App Store listing, no theme edits. This is a hard architectural rule, not a phase-one limitation.
Is the sync scheduled or on demand?+
Both. Catalogue, prices, and stock run Odoo → Shopify on an automatic 6-hour sync, and you can trigger a run at any moment from the dashboard. Shopify orders are pulled into Odoo on the same run. There is no minute-by-minute polling.
What happens when Odoo is down?+
Outbound writes queue with exponential backoff and retry once Odoo answers again. The next scheduled run picks up whatever was missed; nothing is lost. The sync_health dashboard surfaces the queue depth so you can see the backlog draining.
What data does Hasil store?+
Durable mappings (which Odoo product ID matches which Shopify product ID, last-sync timestamp, last error) and the queue state. Raw webhook payloads auto-purge after 30 days — we keep the minimum needed to operate the sync.
Can I sync only products, or only orders?+
Yes, and each data type has one master. Products, prices and stock flow from Odoo into Shopify automatically every 6 hours, and Shopify orders flow back into Odoo as draft quotations within seconds of checkout (order sync on Professional and Scale). Most merchants switch on the catalogue direction first and add order sync once they trust it.
Why not just use Zapier?+
Zapier charges per task and tops out on volume — a busy Shopify store can fire thousands of inventory updates a day and the per-task bill becomes the bottleneck. Hasil Sync is a flat monthly fee with no per-event charge, and it understands the Odoo + Shopify domain (pricelists → price lists, warehouses → locations, refunds, partial fulfilments) instead of asking you to wire generic webhooks.
How long does setup actually take?+
Roughly 10–20 minutes once both API credentials are in hand: ~3 minutes to approve the Shopify OAuth install, similar for Odoo, and the rest reviewing field mapping defaults. The first full catalogue sync after that runs in the background and finishes in minutes to hours depending on catalogue size.
Free playbook · 1 email/month
Not ready for a trial? Take the playbook instead.
Odoo and Shopify, in agreement — by this afternoon.
14-day free trial. Cancel anytime during the trial. No App Store, no custom Odoo modules. If your team is still re-keying orders or babysitting Zapier, this is the afternoon project that pays for itself.
Start 14-day free trial