To connect Shopify to Odoo you need a connector, because Odoo 19 and Odoo 20 have no built-in Shopify integration, in Community or Enterprise. With one in place, the setup follows a fixed order: products, then customers, then orders, then the stock feed, and one full order proven end to end before go-live.
This is the practical walkthrough: what to configure, in what order, and how to verify each step before the next one. It assumes you have already decided which system owns your stock and prices. If you have not, read Odoo and Shopify integration first, because that decision shapes everything below and is the one that actually causes these projects to fail.
Before you start: three prerequisites
- A Shopify private or custom app, with API access scoped to products, inventory, orders, customers and fulfilment. Read-only scopes are worth using during testing.
- A staging Odoo database, not production. Every step here should be proven on a copy first.
- A decision, written down, on who owns what. Products, stock, prices, orders, customers. One line each. This takes ten minutes and saves the project.
Which Shopify connector should you use?
Since Odoo has no Shopify connector of its own, step one is choosing a route: a connector from the Odoo Apps Store, a middleware platform, or a custom build. Most businesses pick an Apps Store connector. Before you buy one, check five things:
- It supports your Odoo version and was updated recently. A connector one version behind becomes an upgrade problem attached to your order flow.
- It uses Shopify's GraphQL Admin API. Shopify made its REST Admin API a legacy API on 1 October 2024 and has required new public apps to use GraphQL since 1 April 2025. A connector still built on REST is building on the old road.
- Shopify pushes changes to Odoo through webhooks, rather than Odoo polling on a timer. With polling, every order and stock change waits for the next run.
- It covers refunds, returns and Shopify Payments payouts, not only orders. Those are the parts that break reconciliation.
- Variants arrive as real Odoo variants, and if you run more than one store or company, each stays separate.
Our own Shopify Connector for Odoo 19 and 20 is built on those lines: the GraphQL API, signed webhooks, native variants, multi-location stock, refunds and payouts, for one store or several. Whichever connector you choose, the steps below are the same.
Step 1: install and authenticate
Install your chosen connector on staging and connect it with the Shopify API credentials. Confirm the connection reads before you let it write: most connectors have a test or fetch action that pulls a small amount of data without changing anything.
Set the connector to one-way, Shopify to Odoo, for now. Two-way sync is where mistakes multiply, and there is nothing to gain from enabling it before the mapping is proven.
Step 2: map products, and expect this to take the longest
Sync a handful of products first, not the catalogue. Pick deliberately awkward ones: a product with several variants, one with a long description, one with a non-standard tax treatment.
Check specifically that:
- Variants line up. Shopify's option model and Odoo's attribute model do not agree on the details, and deep variant structures are where these projects overrun.
- Internal references match the field the connector uses to identify a product. This is what prevents duplicates later.
- Descriptions stay split. Odoo owns the internal description, Shopify owns the storefront copy. Merging them means a marketing edit gets overwritten by a sync at 2am.
Only once a sample maps cleanly should you run the full catalogue.
Step 3: customers, then orders
Sequence matters. Products, then customers, then orders, because each depends on the one before it.
For customers, confirm the match key is the Shopify customer id stored on the Odoo partner, not the email address. Email matching creates duplicates the first time somebody checks out as a guest and then registers.
For orders, sync open orders only. Historical orders usually should not come across at all: they add volume, risk and reconciliation work for data you can read in Shopify whenever you need it.
Step 4: turn on the stock feed, one way
Stock flows out of Odoo and into Shopify. Odoo knows about incoming purchase orders, reservations, returns and multiple locations. Shopify knows what it has been told.
Set the sync interval deliberately. Overselling is almost always a frequency problem rather than a mapping problem, so this is the number to tune if customers start ordering things you do not have.
Step 5: run one full order end to end
This is the test that matters, and it is the one most often skipped.
Place a real order on the storefront and follow it the whole way: order lands in Odoo, stock reserves, delivery is created, invoice is raised, payment reconciles, and the payout matches. Then do a refund and a partial return, because those are implemented last and break first.
Check the payout carefully. Shopify Payments settles net of fees, in batches, on its own schedule, so what arrives in the bank is not the sum of the orders. If the fees are not modelled as a cost, bank reconciliation will never clear.
Step 6: go live, then watch stock
Run both systems in parallel briefly with the sync one way and compare: order counts, stock levels on a sample of products, and one full order including its payout.
After cutover, watch stock specifically for the first fortnight. That is the failure customers notice.
Set up monitoring before you need it
Alert on silence, not only on errors. The failure that actually hurts is a sync that stopped running, and an error-only alert cannot see it by definition. A check for "no successful order sync in the last hour" is the single most valuable piece of monitoring on the integration.
Frequently asked questions
How do I integrate Odoo with Shopify?
Connect them through a third-party connector from the Odoo Apps Store, a middleware platform, or a custom build, because Odoo ships no native Shopify module. Then configure in dependency order: products, customers, orders, and finally the stock feed.
The full sequence:
- Create a Shopify custom app and scope its API access
- Install the connector on a staging Odoo database and authenticate read-only first
- Map a small sample of awkward products and verify variants and references
- Sync the catalogue, then customers, then open orders only
- Enable the stock feed one way, out of Odoo
- Run one full order end to end including a refund and a payout
- Run parallel briefly, compare, then cut over
Expert tip. Decide who owns stock and prices before you install anything. That decision determines the whole configuration, and changing it after go-live means redoing the integration rather than adjusting it.
Does Odoo have a native Shopify connector?
No. There is no Shopify module in Odoo 19 or Odoo 20, in Community or Enterprise. This is worth stating plainly because a lot of published material implies otherwise.
Odoo does ship native payment providers and some marketplace support, and Shopify is not among them. Your three options differ mainly on who maintains the connection at the next Odoo version:
- An Apps Store connector, fastest to start and the usual choice, with quality that varies enormously between publishers
- A middleware platform, more expensive monthly but bringing retries and monitoring you would otherwise build
- A custom build, full control of the mapping and full ownership of the maintenance
Common mistakes
- Buying the first connector you find without checking its supported Odoo versions and last update date
- Choosing a connector abandoned one version back, which becomes an upgrade problem attached to your order flow
- Assuming the connector's demo catalogue resembles your variant structure
How long does an Odoo Shopify integration take to set up?
A standard catalogue on an off-the-shelf connector is usually days rather than weeks. What extends it is almost never the connection itself.
The things that actually add time:
- Variant complexity. The single biggest driver. Deep option structures need mapping and testing product by product.
- Tax treatment. Shopify calculates its own way; Odoo has fiscal positions and rounding rules. Reconciling them is deliberate work.
- Payout reconciliation. Modelling fees so the bank actually reconciles.
- Data cleanup. Duplicate products or customers in either system surface during the first sync, not before.
Expert tip. Budget more time for testing than for configuration. Setting up a connector is a day. Proving that refunds, partial returns and payouts all behave is the part that protects your accounts.
Why is my Odoo Shopify sync causing overselling?
Almost always because the stock sync interval is too long for your order rate, not because the mapping is wrong. Between syncs, Shopify is selling against a stock figure that is already stale.
Check these in order:
- Sync frequency. Shorten the interval and see whether the problem reduces proportionally. If it does, that was the cause.
- Direction. Confirm stock flows out of Odoo only. If Shopify can write stock back, the two will fight and Shopify will sometimes win.
- Which quantity is being sent. On-hand versus forecasted versus available makes a large difference once reservations exist.
- Multiple locations. If Odoo holds stock across warehouses, confirm which one feeds the storefront.
Expert tip. Send available quantity rather than on-hand once you have reservations in Odoo. On-hand includes stock already promised to other orders, which is exactly the figure that causes overselling.
For the architectural decisions behind all of this, who owns which data and where these projects go wrong, see our full guide to Odoo and Shopify integration. If you would rather not run it yourself, we build and support these connections as part of our Odoo integration service.