Odoo 17 ↔ Shopify integration · Updated 2026

Odoo 17 ↔ Shopify:
true two-way webhooks, finally native on both sides.

Odoo 17 (October 2023) was the first Odoo release to ship native outbound webhooks in both Community and Enterprise. Paired with Shopify's Admin API webhooks, that means Odoo 17 ↔ Shopify sync can finally be push-based from both sides — no polling on the Odoo side, no per-task Zapier glue in the middle, no custom Odoo module. Hasil Sync is built specifically around that change.

No credit card · No Shopify App Store install · No custom Odoo modules

The problem

Why Odoo 17 changes the integration story

For years, the structural weak point of Odoo ↔ Shopify sync was the Odoo side. Shopify has had a clean outbound webhook story for a long time, but Odoo did not — so connectors leaned on scheduled polling, custom Odoo modules, or per-task automation tools like Zapier to notice that something in Odoo had changed. Each of those costs you:

  • Polling Odoo means a window of drift between when a stock or price changes and when Shopify hears about it — long enough for a flash sale to oversell.
  • Custom Odoo modules mean you now maintain ERP source code on top of running an ERP — and every Odoo upgrade is a re-test.
  • Zapier glue charges per task, so a busy day fires thousands of inventory events and the bill triples — and it doesn't actually understand ERP-level concepts like pricelists, warehouses, refunds, or partial fulfilments.

Odoo 17's native outbound webhooks remove the structural reason any of those existed. The right Odoo 17 integration is a small managed service that receives webhooks from both sides and reconciles state — which is exactly what Hasil Sync is.

Architecture

Both sides push. Nothing polls.

On Odoo 17, both systems push events to Hasil over native webhooks. Hasil transforms and writes to the other side. There is no Odoo-side polling loop — that's the architectural step Odoo 17 unlocks vs earlier versions.

   ┌────────────────┐                              ┌──────────────────┐
   │    Odoo 17     │   native outbound webhooks   │     Shopify      │
   │  Community ·   │ ──── (product/stock/order) ─▶│  Admin API       │
   │  Enterprise ·  │                              │  webhooks        │
   │    Odoo.sh     │ ◀──────  inbound writes ─────│  (token only)    │
   └───────┬────────┘                              └────────▲─────────┘
           │                                                │
           │  push (Odoo 17 native)        push (Shopify)   │
           ▼                                                │
   ┌────────────────────────────────────────────────────────┴───────┐
   │                        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 │
   └────────────────────────────────────────────────────────────────┘

Both arrows into Hasil are push-based on Odoo 17. The Odoo side uses Odoo 17's native outbound webhooks (Settings → Technical → Webhooks); the Shopify side uses standard Admin API webhooks. Tables shown (entity_mappings, sync_queue, sync_health) are the real backend tables Hasil Sync runs on.

How it works

5 steps to a live Odoo 17 ↔ 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 17 with database URL + API key

    Point Hasil at your Odoo 17 database URL and paste an Odoo user API key. Works on Community, Enterprise, and Odoo.sh. No custom Odoo modules to install, no Odoo source modifications. Odoo 17 also exposes an experimental REST API alongside XML-RPC and JSON-RPC — Hasil uses whichever is most stable for the call.

  3. 3

    Enable Odoo 17 native outbound webhooks

    This is the step that only Odoo 17 makes possible. In Odoo 17 → Settings → Technical → Webhooks, create outbound webhooks for product.template, stock.quant, sale.order (and any other model you want pushed) and point them at the Hasil ingest URL we give you. Before Odoo 17, this UI didn't exist — outbound webhooks are a first-class Odoo 17 feature in both Community and Enterprise.

  4. 4

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

  5. 5

    Watch sync_health — both sides are push-based

    On Odoo 17, both Odoo (native webhooks) and Shopify (Admin API webhooks) push events to Hasil. There is no Odoo-side polling for changes — drift is detected the moment it would have happened. The sync_health dashboard shows queue depth, failure rate, and last-successful-sync per object type per direction.

Compatibility

Odoo 17 — Community, Enterprise, Odoo.sh.

This page covers Odoo 17 specifically because native outbound webhooks were introduced in 17. Hasil Sync talks to Odoo over Odoo's standard external API plus those native webhooks — no custom modules, no Odoo source patches, no special dependencies beyond the stock modules (Sales, Inventory, Contacts).

Odoo 17 Community

Native outbound webhooks supported · stress-tested at 1,000 req/hr

Odoo 17 Enterprise

Native outbound webhooks supported · stress-tested at 1,000 req/hr

Odoo 17 on Odoo.sh

Native outbound webhooks supported · stress-tested at 1,000 req/hr

Official support window

Odoo 17 is officially supported by Odoo until November 2026

On Odoo 16 or earlier? Native outbound webhooks don't exist on those versions, so the integration mechanism is different. See /integrations/odoo-shopify for the Odoo 16 setup, which uses Shopify webhooks plus a catalogue-refresh safety net on the Odoo side.

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 17 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 17 ↔ Shopify integration — common questions

Does Odoo 17 support native webhooks for Shopify sync?+

Yes. Odoo 17 (released October 2023) is the first Odoo version to ship native outbound webhooks as a first-class feature, available in both Community and Enterprise. That's what makes a true two-way push-based Odoo ↔ Shopify sync possible: Odoo pushes when products, stock, or orders change; Shopify pushes the other direction via Admin API webhooks. Hasil receives both sides and writes to the opposite system in seconds.

What's different about syncing Odoo 17 vs Odoo 16 to Shopify?+

The big difference is the Odoo side. Odoo 17 fires native outbound webhooks the moment a record changes, so the sync is end-to-end push-based and event-driven. Odoo 16 and earlier don't have native outbound webhooks, so any connector for those versions has to use a different mechanism (a custom module, the catalogue-refresh safety net, or polling-style reads). If you're on Odoo 16, see our /integrations/odoo-shopify page; this page is specifically about the Odoo 17 architecture.

Is the sync real-time on Odoo 17?+

Yes — event-driven over webhooks on both sides. A product, price, inventory level, order, or customer change in either system reaches the other usually in seconds. On Odoo 17 specifically, the Odoo→Shopify direction is also push-based instead of polled, which is the architectural step earlier Odoo versions can't match.

Does Odoo 17 need a custom module for Hasil?+

No. Everything runs over Odoo 17's standard external API plus Odoo 17's native webhook UI. No custom Odoo modules are installed, no Odoo source patches, no specific module dependencies beyond the stock modules (Sales, Inventory, Contacts).

Which Odoo 17 editions does Hasil Sync work with?+

Odoo 17 Community, Odoo 17 Enterprise, and Odoo 17 on Odoo.sh — all stress-tested at 1,000 requests per hour. Native outbound webhooks are available in every Odoo 17 edition, so the architecture is identical across the three.

What about the upcoming XML-RPC / JSON-RPC deprecation?+

Odoo has signalled that XML-RPC and JSON-RPC are scheduled for deprecation around Odoo 20 (fall 2026), with a new JSON-2 API arriving as the replacement in Odoo 19. None of this affects your Odoo 17 deployment today — Odoo 17 is officially supported until November 2026 and Hasil Sync is built to track Odoo's API roadmap and add JSON-2 support before customers have to migrate.

Does Hasil touch my funds or theme?+

No to both. Hasil connects to Shopify with an Admin API token only — no theme edits, no Shopify App Store install. Orders flow through Shopify's own checkout (or as Shopify draft orders for B2B); Odoo handles invoicing as usual. Hasil moves data, never money.

How long does setup take on Odoo 17?+

Roughly 10–20 minutes once both API credentials are in hand: a few minutes to paste the Shopify Admin API token, similar for Odoo 17, plus a few minutes to register the native outbound webhooks in Odoo 17's Settings → Technical → Webhooks UI. The first full catalogue sync 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 17 and Shopify, in agreement — without polling.

14-day free trial. No credit card. No Shopify App Store, no custom Odoo modules. Odoo 17's native webhooks finally make two-way push-based sync the obvious default — this is the afternoon project that uses them.

Start 14-day free trial