Integration
Connect Shopify and Odoo Without Losing Operational Control
Two systems both think they know your stock. Getting that wrong shows as oversells, wrong costs and a warehouse that stops trusting the screen. This page is how we decide which system owns what, and how we keep them honest.
- Products & variants
- Inventory
- Orders
- Fulfilment
- Webhooks
- Reconciliation
Reviewed by Bhavesh Selarka, COO & Co-Founder, Heliconia Solutions · Odoo 16 Functional Certification · Odoo Partner · Updated
Proof
Clients
Businesses that run on what we built
The short answer
How Does a Shopify and Odoo Integration Work?
One system owns each piece of data, and the other receives it. In practice Odoo owns products, stock, costs, fulfilment and finance, while Shopify owns the storefront, the customer experience and the checkout. Orders flow into Odoo, inventory flows out to Shopify, and a reconciliation job proves the two agree. Anything else, especially two systems both editing stock, produces oversells.
The integration itself is not hard. The design decision is: what happens when they disagree? A webhook was missed, a refund was issued in Shopify, a stock adjustment was made in the warehouse. A connector that has no answer for those is a connector you will be reconciling by hand within a month.
Spicy Organic runs this in production: a food manufacturer with purchasing, blending, packaging, batch traceability and wholesale in Odoo Enterprise, and a Shopify store synchronised both ways for products, customers, orders, inventory and fulfilment.
The first decision
Which System Owns Which Data
Agree this before any code. Every argument later is a disagreement about a row in this table.
| Data | System of record | Flows to | Why |
|---|---|---|---|
| Products and variants | Odoo | Shopify | The catalog also drives purchasing, manufacturing and costing, so it cannot live in the storefront |
| Prices | Usually Odoo, sometimes Shopify | Both directions possible | If the store runs promotions independently, let it own retail price and keep cost in Odoo |
| Inventory | Odoo | Shopify | Stock moves in the warehouse, not in the store. One owner is the only way to avoid overselling |
| Customers | Shopify for accounts, Odoo for the contact record | Into Odoo | Shopify handles login and consent, Odoo needs the partner for invoicing and history |
| Orders | Shopify | Into Odoo | The order is created at checkout. Odoo receives it and takes over fulfilment and finance |
| Fulfilment and tracking | Odoo | Back to Shopify | Picking and dispatch happen in the warehouse, and the customer sees the result in the store |
| Refunds and returns | Shopify for the request, Odoo for the credit note | Both | The money has to end up in the ledger, whatever the customer clicked |
Spicy Organic follows exactly this split, which is why its direct-to-consumer and wholesale channels can share one catalog and one inventory.
What we build
The Parts of a Reliable Sync
Each of these exists because we needed it in production, not because a connector feature list mentions it.
Product and variant mapping
Odoo variants, attributes, packaging and units mapped to Shopify variants and options, with a mapping table you can inspect rather than a convention someone remembers.
- Variants
- Options
- Packaging
Inventory synchronisation
Available quantity pushed from Odoo on stock moves, with the buffer and location rules that decide what "available" means for a store that must not oversell.
- Real availability
- Buffers
- Multi-location
Order ingestion and state mapping
Shopify orders become Odoo sales orders with the right customer, taxes, discounts and payment state, and each Shopify status maps to an Odoo state deliberately.
- Taxes
- Discounts
- Payment state
Fulfilment and tracking feedback
Picking and dispatch in Odoo push fulfilment and tracking back to Shopify, so the customer email is triggered by the warehouse rather than by a person remembering.
- Tracking
- Partial shipments
- Notifications
Retries, idempotency and queues
Every message is safe to process twice, failures retry with backoff, and nothing is lost because an API was briefly unavailable. This is the part most integrations skip.
- Idempotent
- Backoff
- No lost events
Reconciliation and monitoring
A scheduled job compares both systems and reports differences before a customer finds them, with alerting when the gap or the queue depth crosses a threshold.
- Daily checks
- Alerts
- Audit trail
The build decision
Off-the-Shelf Connector or Custom Integration?
Try the connector first. It is cheaper and someone else maintains it. Here is where that stops being true.
| Situation | Connector | Custom integration |
|---|---|---|
| Standard catalog, simple variants, one warehouse | Usually enough | Not worth building |
| Manufacturing or batch traceability behind the store | Rarely handles it | Needed: lots, blends and packaging have to survive the mapping |
| Wholesale and retail on the same catalog | Often partial | Needed: different pricing, units and order rules per channel |
| Custom fulfilment or a third-party logistics provider | Depends on the connector | Usually needed, because the state machine is yours |
| Multi-store or multi-company | Frequently a limit | Needed: which entity owns which order is a business rule |
| You need to see and fix what failed | Varies, often opaque | Built in: logs, retries and a reconciliation report you can act on |
We will tell you when a connector covers your case. Spicy Organic needed custom, because manufacturing, lot traceability and wholesale sat behind the storefront.
How we run it
From Decision to Live Sync
Ownership workshop
We fill in the matrix above with your team, including the awkward rows: price, refunds, customer records and who may edit stock.
Mapping and rules
Products, variants, units, taxes, payment methods and order states mapped explicitly, with the edge cases written down rather than discovered in week three.
Build with failure in mind
Webhooks plus a scheduled catch-up, idempotent handlers, a queue with retries, and logs that say what happened to a specific order.
Backfill and dry run
Existing products, customers and open orders loaded on a copy first, then compared. Only after the comparison is clean do we point at production.
Cutover
A quiet window, one system switched to owner, reconciliation run immediately, and a rollback path if the numbers disagree.
Run and watch
Daily reconciliation, alerting on queue depth and failures, and a named person on our side while the first month of real trading goes through it.
Evidence
Shopify and Odoo, Running Together
A USDA-organic food manufacturer with purchasing, blending, packaging, batch traceability and wholesale in Odoo, and a Shopify store synchronised both ways.
| Project | Industry | Odoo | Key capabilities | Technology |
|---|---|---|---|---|
| Spicy Organic | Organic food manufacturing & eCommerce | Odoo Enterprise | Spicy Organic Base · Spicy Organic Product Management · Raw Material Management · Manufacturing & BOM Extensions | Odoo Enterprise · Python · PostgreSQL · OWL / QWeb · Shopify APIs |
Integration review
Request an Integration Review
Send us your catalog size, variant structure, warehouses, order volume and what happens today when the two disagree. You get the ownership matrix filled in for your business, an honest connector-versus-custom answer and the risks we would design around.
- The data-ownership matrix completed for your setup
- Product and variant mapping approach for your catalog
- Inventory rules: what "available" means for your store
- Order and fulfilment state mapping, including refunds
- Connector or custom, with the reasoning and the cost shape of each
What clients say
In Their Words
Heliconia's Odoo Enterprise implementation, along with third-party system integration, has optimized our processes. Their expertise has been a game-changer.
Vladimir VukovicCEO, Mevalon Produkte
Heliconia delivered an impeccable Odoo Enterprise implementation with seamless integration. Their expertise has revolutionized our operations.
Kartson KrayChairman, TIMmunity GmbH
Questions
Shopify and Odoo Questions, Answered Directly
Which system should hold our stock?
Odoo, in almost every case. Stock moves when goods move, and that happens in the warehouse, in production and on purchase receipts, all of which are Odoo events. Shopify receives the available quantity.
The exception is a pure dropship store with no warehouse of its own, where there may be no real stock to own.
Will this stop us overselling?
It removes the main cause, which is two systems editing stock independently. It does not remove the physics: a sync interval and a busy checkout can still oversell the last unit, which is why we set a buffer on fast-moving lines and reconcile daily.
Anyone promising zero oversells without mentioning buffers has not run one of these.
Can we keep selling wholesale through Odoo at the same time?
Yes, and it is a good reason to make Odoo the owner. Spicy Organic runs direct-to-consumer through Shopify and wholesale through Odoo on the same catalog and the same inventory, with different pricing and order rules per channel.
Do we need a custom integration or will an app do?
Try an app first. Connectors handle standard catalogs and simple variants well, and someone else maintains them. Build custom when manufacturing, lot traceability, wholesale, multi-company or a bespoke fulfilment flow sits behind the store, because that is where connectors run out.
What happens when the sync fails?
It should be boring. Handlers are idempotent, failures retry with backoff, and a scheduled catch-up picks up anything a missed webhook dropped. A daily reconciliation compares both systems and reports the difference, and we alert on queue depth rather than waiting for a customer complaint.
Should we move the storefront into Odoo instead?
Sometimes, and it is a fair question. Odoo has its own eCommerce, and one system is simpler than two. Keep Shopify when its storefront, apps and checkout are genuinely doing work for you. Move when you're paying for two systems and using one.
If you want the storefront control without Shopify, headless is the third option.
Next step
Decide Who Owns the Stock, Then Build
Tell us your catalog, your warehouses and what goes wrong today. We will fill in the ownership matrix for your business and tell you honestly whether an app covers it or you need the integration built.