Shopify–Odoo inventory sync works best when you define which system owns sellable stock, map every warehouse explicitly, and reconcile the two systems after changes. Copying a stock number without agreeing what that number means can create overselling even when the connection is running.
Define the stock you are publishing
Start with one question: how many units can this online channel promise to a customer now? Physical stock, stock reserved for existing orders and stock available to sell are different quantities.
Shopify distinguishes available, committed and other inventory states. Its documentation explains how an order moves units from available to committed. That distinction matters when an ERP also reserves the same order. See Shopify’s inventory management documentation.
Write down the intended meaning of your exported quantity. For example, “warehouse stock that is available for new online orders, after confirmed reservations and our channel buffer.” Confirm how your Odoo setup calculates that value; a custom stock field may not mean what its label suggests.
Give every location and variant a clear match
Build a small mapping sheet before enabling writes. Include the Shopify variant and inventory item, Shopify location, Odoo product variant, Odoo warehouse or location scope, and the person who owns corrections.
A SKU is useful for finding possible matches, but duplicates, blank values and renamed SKUs need an exception process. Once a match is approved, keep stable platform identifiers. Never silently combine two variants because their display names look similar.
Decide whether each warehouse serves online orders. Stock in a returns inspection area, retail-only location or supplier warehouse should not become sellable merely because it exists somewhere in the ERP.
Avoid subtracting the same order twice
Consider this illustrative test: 12 units are physically present, 3 are already reserved and 1 is held as a buffer. The starting sellable quantity is 8, if these categories do not overlap.
A customer orders 2 units. Shopify reduces its available quantity; Odoo later imports and reserves that order. The next export must represent the agreed remaining sellable stock. A connector that subtracts Shopify’s order again from an ERP quantity that already excludes the reservation can understate stock.
The opposite failure is a stale ERP snapshot restoring the pre-order quantity before the reservation arrives. Test that timing explicitly. The correct implementation depends on your reservation policy and connector, so do not treat one arithmetic formula as universal.
Make failures visible and recoverable
Define what happens after an interrupted sync: where the failure appears, who receives it, and how the latest trusted quantity is restored. Retrying a stock update should not create an extra adjustment.
Use scheduled reconciliation alongside change notifications. Compare the same product, location and stock definition on both sides, then separate expected timing differences from real mismatches. A useful exception report shows the two quantities, last successful sync and reason for a hold.
If the source is unavailable, agree a temporary selling policy with operations. Leaving the last known number, reducing exposure or pausing affected products are business decisions with different consequences.
Run this launch checklist
- Sell the last available unit and check both systems.
- Create two orders close together while the sync is delayed.
- Cancel an order before fulfilment and verify reservation release.
- Refund without restocking, then test a separate restocked return.
- Move stock between online and excluded locations.
- Test bundles, duplicate SKUs and a product with no match.
- Repeat a delivery of the same update and confirm no double adjustment.
- Disconnect and restore the integration, then reconcile all affected items.
Measure mismatched product-location pairs, the age of the oldest failed sync and orders affected by stock errors. Agree acceptable thresholds before rollout, then start with a small product set.
Frequently asked questions
Should inventory sync run both ways?
Choose one owner for each quantity. Both systems can contribute events, but two independent writers setting the same stock value need explicit conflict rules.
Does faster syncing prevent overselling?
It reduces one source of delay. Incorrect mappings, reservation timing and multiple sales channels can still cause errors.
Can Waslio help with an existing connector?
Yes. Share the connector, Odoo version, hosting model and one concrete mismatch through our project enquiry form. Start with the broader Shopify–Odoo integration guide if orders and fulfilment also need attention.