Odoo 17 Shopify integration · Updated 2026

Odoo 17 and Shopify,
in agreement by this afternoon.

Products, prices and stock go down to Shopify every 6 hours — or the second you press sync. Shopify orders come back into Odoo 17 as draft quotations within seconds, and you approve them there. You see a dry-run plan before anything is written, and every run leaves a per-SKU log. No module to install, no theme edits, official Shopify OAuth.

Cancel anytime during the trial · Stress-tested at 1,000 req/hr on Odoo

What syncs

Two directions. Both on your terms.

Catalogue and stock, down to Shopify

Products, prices and stock levels move Odoo 17 → Shopify automatically every 6 hours, and on demand whenever you press sync. Matching is by SKU, so a re-run updates — it never duplicates.

Orders back in seconds, as draft quotations

The moment a Shopify order is placed, Hasil writes it into Odoo 17 as a draft quotation — referenced by the Shopify order number, customer matched by email. Nothing is confirmed for you — you approve in Odoo.

Preview first, then push

Run a dry-run and read the plan: which SKUs get created, which get updated, what each stock figure becomes. Only when you agree does anything get written to Shopify.

How a run works

Read, plan, write, log.

Four steps, every time, on a schedule you control. Your Odoo 17 catalogue can't drift for more than 6 hours — and you can force a run whenever you want one.

1

Read Odoo 17

Hasil reads products, prices and stock from Odoo 17 over the standard external JSON API with an API key. No custom module, no Odoo source patch.

2

Plan the run (dry-run)

Hasil builds the change set before touching Shopify: creates, updates, stock deltas, and anything it refuses to guess at. All-or-nothing on SKU matching — a line it can't match stops the write instead of inventing one.

3

Write to Shopify

The approved change set is written through official Shopify OAuth. Writes are idempotent, so a retried or repeated run lands on the same result.

4

Log every SKU

Counters, per-SKU results and errors are stored for the run. Orders travel on their own path — they reach Odoo as draft quotations within seconds of checkout.

   ┌────────────────┐                                  ┌──────────────────┐
   │    Odoo 17     │   catalogue · prices · stock     │     Shopify      │
   │  Community ·   │ ──── every 6 h · or on demand ──▶│  official OAuth  │
   │  Enterprise ·  │                                  │                  │
   │    Odoo.sh     │ ◀── orders · in seconds ─────────│                  │
   └───────┬────────┘      (webhook, not the run)      └────────▲─────────┘
           │                                                    │
           │  read (JSON API + API key)         write (idempotent)
           ▼                                                    │
   ┌────────────────────────────────────────────────────────────┴───────┐
   │                          Hasil Sync                                │
   │   plan (dry-run)  ·  SKU match, all-or-nothing  ·  per-SKU log     │
   │   single catalogue source  ·  re-runs never duplicate              │
   └────────────────────────────────────────────────────────────────────┘

Odoo 16 vs Odoo 17

Identical today — with more room on 17.

Both versions get the same results from the same engine. Odoo 17 adds one thing on the Odoo side: it can emit native outbound webhooks, a push path we can build on next.

CapabilityOdoo 16Odoo 17
Catalogue, prices, stock → ShopifyYes — identical engineYes — every 6 h + on demand
Shopify orders → Odoo draft quotationsYesYes
Dry-run preview before writingYesYes
Custom Odoo module requiredNoNo
Connection methodNot supportedJSON API + API key
Odoo can emit native outbound webhooksNoYes — a push path Hasil can build on next

Still on Odoo 16? /integrations/odoo-16-shopify

Setup

Live in 3 steps.

  1. 1

    Connect Shopify through official OAuth

    Approve the scopes in Shopify's own OAuth screen. No App Store install, no theme edits, no code near your storefront.

  2. 2

    Connect Odoo 17 with a URL and an API key

    Paste your Odoo 17 database URL and a user API key. Community, Enterprise and Odoo.sh all work the same way.

  3. 3

    Dry-run, then go live

    Preview the first run, read the plan, push it. From then on the catalogue refreshes every 6 hours, plus any run you trigger yourself.

The limits, plainly: sync runs on a schedule you control; Odoo price lists are not imported; single location. SKU caps by plan: 2,000 · 10,000 · unlimited.

Free playbook

Planning the Odoo 17 → Shopify move? Take the playbook.

Free Shopify B2B Pricing Playbook — pricing models, inventory rules, and the exact draft-order flow Hasil uses. Concise, no fluff.

No spam. Unsubscribe anytime.

FAQ

Odoo 17 Shopify integration — common questions

How does Hasil connect to Odoo 17?+

Over Odoo 17's standard external JSON API with a user API key, on Community, Enterprise and Odoo.sh alike. Nothing is installed inside Odoo, and the same engine serves Odoo 17, 18 and 19 — moving between those versions doesn't change your results. Odoo 16 and earlier cannot serve this API and are not supported.

How current is my Shopify catalogue?+

Your catalogue cannot drift for more than 6 hours: a run fires automatically on that schedule, and you can force one from the dashboard at any moment — before a launch, after a price change, in the middle of a stock count. Predictable beats theatrical.

Odoo 17 emits native outbound webhooks — does Hasil use them?+

Not today. Odoo 17 is the first Odoo release that can emit native outbound webhooks, which is a push path we can build on next. The sync you buy today is the scheduled and on-demand engine: you see the plan before anything writes, and re-running is always safe.

What happens to Shopify orders in Odoo 17?+

Within seconds of checkout, the order appears in Odoo 17 as a draft quotation, with the Shopify order number as the reference and the customer matched by email so you don't collect duplicate contacts. They stay drafts until you confirm them — no surprise confirmations, no stock moved behind your back.

Can I see what a sync will do before it does it?+

Yes — that's the dry-run. It shows the planned creates, updates and stock changes per SKU before a single write reaches Shopify, and every real run is logged per SKU with counters and errors. Every run leaves a receipt. Re-running is safe: records are matched by SKU and update rather than duplicate.

Do I need an App Store install or theme edits?+

No. Shopify is connected through official OAuth, nothing is installed from the Shopify App Store, and your theme is never touched. Orders run through Shopify's own checkout and Odoo's own invoicing — Hasil moves data, never money. Stress-tested at 1,000 requests per hour against Odoo.

Free playbook · 1 email/month

Not ready for a trial? Take the playbook instead.

No spam. Unsubscribe anytime.

Put Odoo 17 in charge of the catalogue. Keep control of the writes.

14-day free trial. Preview every run before it writes, force a sync whenever you want one, and read the per-SKU log afterwards.

Start 14-day free trial