Odoo 16 → Shopify · Updated 2026

On Odoo 16? Upgrade to 17,
then agree with Shopify by this afternoon.

Hasil supports Odoo 17, 18 and 19 — the connector runs on Odoo's JSON API, which Odoo 16 does not serve. Once you are on 17+, products, prices and stock go down to Shopify every 6 hours — or the second you press sync. Shopify orders come back into Odoo 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 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 over its 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/18/19 │   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+

Odoo 16 is the one version we can't read.

The connector authenticates against Odoo's JSON API, introduced in Odoo 17. Everything else — the engine, the preview, the logs — is identical across 17, 18 and 19.

CapabilityOdoo 16Odoo 17, 18, 19
Catalogue, prices, stock → ShopifyNot supportedYes — every 6 h + on demand
Shopify orders → Odoo draft quotationsNot supportedYes — in seconds
Dry-run preview before writingNot supportedYes
Custom Odoo module required—No
Connection method—JSON API + API key
Odoo can emit native outbound webhooksNoYes — a push path Hasil can build on next

Already on Odoo 17 or later? /integrations/odoo-17-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 with a URL and an API key

    Paste your Odoo 17, 18 or 19 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 → 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 16 → Shopify — common questions

Is Odoo 16 supported?+

No. Hasil supports Odoo 17, 18 and 19. The connector runs on Odoo's header-authenticated JSON API, which arrived in Odoo 17 — Odoo 16 cannot serve it. If you are on 16, upgrade to 17 or later and the whole engine works the same: one dry-run preview, catalogue down every 6 hours, orders back as draft quotations.

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.

What happens to Shopify orders in Odoo?+

Within seconds of checkout, the order appears in Odoo 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.

What if I re-run a sync twice by mistake?+

Nothing breaks. Records are matched by SKU, so the second run recognises what already exists and updates instead of duplicating. Re-running is always a safe move.

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.

Do I need a custom Odoo module, an App Store install, or theme edits?+

None of the three. Odoo 17+ is read over its standard external JSON API with an API key, and Shopify is connected through official OAuth. Nothing is installed inside Odoo, nothing is installed from the Shopify App Store, and your theme is never touched. Hasil moves data, never money.

Free playbook · 1 email/month

Not ready for a trial? Take the playbook instead.

No spam. Unsubscribe anytime.

Move to Odoo 17. Sell like you're on the newest thing.

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