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: paste an Admin API token, paste Odoo credentials, choose what flows which way.

No credit card · 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

Event-driven, not polled.

Both systems push to Hasil over webhooks. Hasil transforms and writes to the other side. The only scheduled job is a 10-minute catalogue refresh as a safety net.

   ┌────────────────┐                              ┌──────────────────┐
   │     Odoo       │   webhook (product/stock/    │     Shopify      │
   │  15 · 16 · 17  │ ◀─────  order events) ─────▶ │  Admin API       │
   │  18 / .sh / EE │                              │  token 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. 1

    Connect Shopify with an Admin API token

    In Shopify Admin → Settings → Apps and sales channels → Develop apps, create a custom app and copy the Admin API access token. Paste it into Hasil. No Shopify App Store install, no Shopify Partner account, no theme edits.

  2. 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. 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. 4

    Sync runs on real webhooks, not polling

    When a product, inventory level, or order changes in either system, the source fires a webhook. Hasil receives it, transforms it, and writes to the other system in seconds. The only scheduled job is a 10-minute catalogue refresh — everything else is event-driven.

  5. 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.

Admin API token only

No Shopify App Store, no Partner account, no theme edits. You paste a token, we read 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. 18 pages, no fluff.

No spam. Unsubscribe anytime.

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 with an Admin API token only — no Shopify App Store listing, no Shopify Partner account, no theme edits. This is a hard architectural rule, not a phase-one limitation.

Is the sync real-time or scheduled?+

Event-driven on webhooks for products, inventory, orders, and customers — usually a few seconds end-to-end. The only scheduled job is a catalogue refresh every 10 minutes to catch anything a missed webhook would have dropped. 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. Inbound webhooks from Shopify are accepted and queued; 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. Each entity type (products, prices, inventory, orders, customers) is a separate toggle with its own direction (Odoo → Shopify, Shopify → Odoo, or both). Most merchants start with products + inventory one-way (Odoo → Shopify) and add orders the other direction 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 paste the Shopify Admin API token, 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.

No spam. Unsubscribe anytime.

Odoo and Shopify, in agreement — by this afternoon.

14-day free trial. No credit card. 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