Shopify is excellent at what it does: selling. But it is not an ERP. As soon as stock, purchasing, production, returns and accounting have to add up, and certainly if you have multiple channels, the question is not “how do I connect Shopify to Odoo”, but “where should the truth live”. This is the deep guide: the trade-offs, the choices and the why. For anyone who wants to set up an integration properly, and at the same time a reference for our own consultants.
When is Shopify alone no longer enough?
Shopify runs your webshop fine. It pinches the moment your business grows bigger than the sales channel. The signals, and why they occur:
- Stock never quite matches. You sell in multiple places (webshop, B2B, marketplaces, POS) and each channel keeps its own count. Without a central source it inevitably drifts apart.
- Manual copying into accounting or a stock system. Every manual step is a source of errors and delay, and it does not scale with your order volume.
- Purchasing, production or assembly that Shopify does not know. Shopify does not know what a purchase order, a bill of materials or a production order is. As soon as stock arises from purchasing or production, you need a system that knows those processes.
- Margin not visible. Cost price, purchasing and sales sit in separate systems, so you do not know per order or product what you really earn.
- Consumer and business mixed up. Different prices, VAT treatment and stock per audience are hard to keep strictly apart in Shopify alone.
These are not webshop problems. They are signals that you need a business platform behind your webshop. That is exactly where Odoo sits.
The core decision: where should the truth live?
The most important choice you make before installing any connector: which system is leading for your stock?
If Shopify is leading, you continuously keep two systems aligned by hand, and you lose the moment you sell on more than one channel: the webshop does not know what your B2B sale or your POS just deducted. If Odoo is leading, there is a source of truth. Odoo knows your real stock (purchasing, receipts, production, returns, multiple warehouses) and pushes available quantities to every channel.
For almost every business that does more than a single webshop, the answer is: Odoo is the single source of truth, Shopify is a sales channel. The rest of this guide assumes you make that choice, and shows how to make it real.
The data architecture: what syncs, which way, and why
A good integration is not “everything with everything”, but a deliberate choice per data type. Every row below is an explicit decision, with a reason:
| Data | Direction | Why this direction |
|---|---|---|
| Products (title, price, description, media) | One side leading (usually Odoo) | Editing both sides causes conflicts; pick the source |
| Stock / availability | Odoo to Shopify | Odoo knows the real stock, prevents overselling |
| Orders | Shopify to Odoo | Sales arise on the channel, are processed in Odoo |
| Customers | Shopify to Odoo | Created or matched as the order comes in |
| Shipping / tracking | Odoo to Shopify | Fulfilment happens in Odoo, status back to the customer |
| Returns / credit notes | Shopify to Odoo | Reverse plus restore stock at the correct location |
| Payment / reconciliation | Shopify to Odoo | Booked automatically and matched against the bank |
Direction matters more than the connector. Editing products in both systems creates conflicts; keeping stock in Shopify alongside Odoo produces drift. Two rules for conflicts: (1) define exactly one leading system per field, and (2) let the non-leading system only display that field, not edit it.
Stock strategy: the heart of the integration
This is where it all stands or falls. Most failed integrations are, at their core, stock problems.
Available is not the same as physical. What you push to Shopify is not your physical stock, but your available stock: physical minus reserved minus an optional buffer. Push physical stock and you sell things that are already reserved.
Reservations and a safety buffer. Decide per channel whether you hold a buffer (for example not showing the last few units online) to dampen overselling on simultaneous sales. This is a deliberate margin against race conditions, not a technical detail.
Real-time versus scheduled syncing. Real-time feels ideal, but Shopify has API limits and at high volume a continuous push can run you into rate limits. The trade-off: real-time for fast movers and scarce stock, scheduled (every X minutes) or event-driven for the rest. Choose deliberately per product group instead of wanting everything real-time.
Multiple warehouses and locations. If you sell from multiple warehouses or partly dropship, Odoo decides which location fulfils an order and which sum of locations you push as available to Shopify. Lay down those rules before you integrate.
Separating B2B and B2C. This is where it most often goes wrong. Two patterns:
- Separated stock: separate warehouses or locations for B2B and B2C. Strict, predictable, but you have to actively allocate stock.
- Shared pool with reservation: one stock, where B2B orders reserve early so they are not bought away by the B2C webshop. More flexible, but demands discipline in the reservation process. Without one of these two, your B2C webshop sells the stock you meant for a B2B customer. The choice depends on how strict the separation must be and how much manual work you accept.
Products and mapping: the SKU is your key
Everything hangs on a reliable link key, and that is the SKU. Without consistent SKUs between Shopify and Odoo you get no reliable mapping of stock and orders.
- Variants: a Shopify product with variants maps to product variants in Odoo. Make sure the variant SKUs match on both sides, otherwise a sold variant deducts the wrong stock.
- Direction of product management: choose whether you maintain products in Odoo or in Shopify. Odoo-leading gives a clean source for price, cost and stock; Shopify-leading suits teams that work content-first. Not both.
- Metafields and content: SEO copy and rich content often prefer to live in Shopify. Agree which fields are Shopify-only, so a sync does not overwrite them.
Bundles and kits: where it quietly goes wrong
Shopify bundles and Odoo kits look the same but work differently, and this difference quietly breaks your stock.
A bundle that sells as one product on Shopify must, in Odoo, deduct the stock of the components, not of a fictitious bundle product. If the integration deducts the bundle as a single item, your component stock is wrong after every bundle sale, and you only see it once the counts diverge. Odoo solves this with bills of materials or kit products that deduct at component level. Agree up front how bundles, kits and variants are mapped, and test explicitly that a bundle sale reduces the correct components.
The order flow: from checkout to booking
An order goes through more than “it comes in”:
- Order comes from Shopify into Odoo, with customer, lines, discounts and shipping method.
- Payment is linked: Shopify Payments, iDEAL, credit card. For accounting you want the receipt reconciled against the order.
- Fulfilment happens in Odoo: picking, packing, shipping from the correct location.
- Tracking goes back to Shopify, so the customer sees their status.
- Return or credit note comes back into Odoo: reverse and, crucially, restore stock at the correct location, including handling partial returns.
Every step is a decision: automatic or with control, immediate or batched. For accounting, reconciling payments against orders is the point where many integrations stall halfway.
Tax and accounting: where a local partner wins
This is where a generic international connector often falls short and where Dutch knowledge makes the difference:
- VAT and fiscal positions: B2C with VAT, B2B with reverse charge or intra-community, that requires the right fiscal positions in Odoo.
- EU sales and OSS: sell across the border to consumers and the One Stop Shop scheme and per-country VAT come into play.
- Peppol and e-invoicing: increasingly relevant for business invoicing in the Netherlands and the EU.
- Reconciliation and daily closing: the bridge between your sales channel and books that add up.
This is exactly why “installing a connector” is not the same as “your e-commerce accounting adds up”.
Multiple stores and channels: the allocation rules
Multiple stores (per country, brand or B2B/B2C) can hang off one Odoo environment, each with its own warehouse, price list and channel. The pitfall is stock allocation: without rules one store sells the others empty. Decide up front how stock is allocated and reserved, whether you use a separate location per store, and how you handle shared stock. This is the same question as the B2B/B2C separation, one level broader.
Choosing the connector: a decision matrix
There are roughly three routes. None is universally best; choose on scenario:
| Route | Strong when | Watch out |
|---|---|---|
| App-store connector (e.g. Webkul, Emipro) | Standard scenario, live fast, limited budget | Less control over edge cases; customisation often hard; quality varies per vendor |
| Odoo own Shopify connector | You want to stay within the Odoo ecosystem | Scenario coverage can be narrower than a specialised app |
| Custom integration (via the API) | Complex or unique flows, full control | Requires Odoo.sh or on-premise and maintenance; every customisation is upgrade risk |
The selection criteria: number of stores and countries, direction and frequency of the sync, product mapping, bundles/kits and variants, order statuses, control over stock updates, and your hosting form (customisation requires Odoo.sh or on-premise). Weigh maintenance too: an integration is not a one-off project but a living component that has to keep working through every Shopify and Odoo upgrade. Buyers often search by connector name, but the connector is the final piece, not the starting point. We compare the real apps, their prices and reviews, and the architecture questions most comparisons skip, in choosing the best Odoo-Shopify connector.
Implementation approach: how to set it up properly
The order that makes the difference between an integration that lasts for years and one you keep repairing:
- Fit-gap first. Map your e-commerce processes, channels, stock flows and accounting requirements before you choose a connector.
- Lay down the data strategy. Per data type: which system is leading, which way it syncs, real-time or scheduled.
- Design the stock model. Warehouses, locations, buffers, B2B/B2C separation, allocation rules.
- Build on staging and dry-run. Test with real scenarios: a bundle sale, a partial return, simultaneous sales on two channels, an order across multiple warehouses.
- Go live with a stock baseline. Start with matching stock on both sides, and actively monitor for drift in the first weeks.
Failure modes and diagnosis (for consultants)
When it goes wrong, the cause is almost always one of these. Recognise the pattern:
- Stock drifts apart. Cause: stock kept in two places, or physical instead of available pushed, or a channel (POS, B2B) deducts outside Odoo. Fix: one source, push available, all channels through Odoo.
- Overselling. Cause: sync frequency too low for fast movers, no buffer, or no B2B/B2C separation. Fix: real-time for scarce stock, buffer, separation.
- Stock wrong after a bundle sale. Cause: bundle deducted as a single item instead of components. Fix: kit or bill of materials at component level.
- Duplicate customers. Cause: no matching on email at creation. Fix: matching rule on a unique field.
- Orders get stuck. Cause: unknown SKU, missing fiscal position, or a payment method without mapping. Fix: complete the mapping and set up error handling.
- Accounting does not reconcile. Cause: payments not reconciled against orders, or wrong VAT treatment. Fix: automate reconciliation, fiscal positions per audience.
In short
Shopify sells, Odoo runs your business. Make Odoo the single source of truth, decide per data type which way the sync goes, push available instead of physical stock, separate B2B and B2C stock deliberately, map bundles at component level, arrange tax and reconciliation, and only choose the connector once the data strategy is set. Then the integration becomes a foundation instead of a risk - and 42 is finally the answer in both systems.
Want to know whether your stock or channel problem is an integration or a platform choice? Schedule a no-obligation Quickscan and we will map your e-commerce processes, your scope and your biggest risks in 20 minutes.
Read more: Odoo hosting: Online, Odoo.sh or self-hosting? · Odoo Community vs Enterprise · What does an Odoo implementation cost? · Odoo reviews: 2,500+ reviews · All Odoo comparisons