WooCommerce Odoo integration connects a WordPress WooCommerce store to an Odoo ERP so products, stock, orders, customers, taxes, coupons and refunds move between them without manual re-entry. Orders placed on the store arrive in Odoo as sales orders; stock and price changes in Odoo push back to the storefront.
That is the summary. The rest of this article is the part that decides whether your integration holds up under real order volume: how the sync is structured, where WooCommerce and Odoo model data differently and which problems a connector solves versus quietly leaves for your finance team.
We build and maintain Odoo connectors ours is on the Odoo Apps Store for Odoo 19, with builds going back to Odoo 9, so most of what follows comes from live stores rather than a feature grid.
Why connect WooCommerce to Odoo at all?
WooCommerce is a capable storefront bolted onto WordPress. It sells well and it reports poorly. It has no real purchasing workflow, no manufacturing, thin multi-warehouse logic, and accounting that stops at an orders export. Odoo has all of that and a storefront most merchants would not choose over WooCommerce.
So the sensible architecture is WooCommerce at the front, Odoo behind it, and a connector keeping them agreed. That connector has three jobs: pull orders and customers into Odoo as real records, push product, price and stock out to the store, and notice when the two have drifted and fix it. Most modules do the first two. The third is what separates a connector you forget about from one that generates a support ticket every Monday.
Which data moves in each direction?
Direction matters more than feature count. A field syncing both ways without a designated source of truth will eventually overwrite something you cared about.
| Data | WooCommerce → Odoo | Odoo → WooCommerce | Source of truth |
|---|---|---|---|
| Products, variations, attributes | Import existing catalogue | Export products, categories, tags, images | Odoo, once live |
| Stock quantity | Initial read | Continuous push | Odoo |
| Price | Initial read | Push on change | Odoo |
| Orders | Import on creation | — | WooCommerce |
| Order status | Import changes | Push confirmed, shipped | Split — see below |
| Customers | Import | Export | Either |
| Taxes | Import as charged | Export tax records | WooCommerce for orders |
| Coupons | Import | Export | Either |
| Refunds | Import | Export invoice refunds | Either |
The row that causes trouble is order status. If your warehouse validates a delivery in Odoo and someone marks the order complete in WooCommerce, you get double fulfilment, two notification emails, and stock deducted twice. Pick one system for fulfilment in practice Odoo, because that is where the picking happens and break the habit in the other.
How the queue changes what can go wrong
This is the part most WooCommerce–Odoo articles skip, and it is the part that matters most at volume.
A naive connector imports an order by calling WooCommerce, processing the response, and writing to Odoo in one unbroken operation. When 400 orders land during a flash sale, that approach either times out, blocks the Odoo worker, or fails partway and leaves you unsure which orders made it in.
Our connector puts a queue between the two systems. An import creates queue records first, then processes them each line carrying its own status: pending, done, or error. That single design choice changes the failure model completely:
One bad record does not stop the batch. A product with a malformed price lands in the queue as an error; the other 399 process and complete. You fix the one and reprocess it.
You can see exactly what synced. The queue line list is the audit trail green for done, flagged for error, with the reason attached. “Did that order come through?” is a question you answer by looking, not guessing.
Reprocessing is safe. A failed line reprocesses without re-importing the whole batch.
Large imports do not block Odoo. Queue processing runs on a cron, so a 10,000-product first import does not lock up the interface.
When you evaluate any WooCommerce connector, ask what happens when one record in a batch of hundreds fails. If the answer is “the batch fails,” you will spend peak season reconciling by hand.
How product and variation mapping breaks
This is the most common cause of a failed WooCommerce Odoo integration, and it surfaces in the first week.
The two platforms model products differently. In WooCommerce, a variable product holds variations, each with its own SKU. In Odoo, a product.template holds variants as product.product records, each with an internal reference (default_code). The connector matches WooCommerce SKU to Odoo internal reference.
When those strings disagree, the connector finds no match – so it creates a new product. Across a 4,000-SKU catalogue that means a duplicate shadow catalogue, stock split across two records claiming to be the same item, and reports that no longer reconcile.
The causes are mundane:
Trailing whitespace in SKUs from a CSV import
Case differences (sku-1001 versus SKU-1001)
Blank WooCommerce SKUs, which WooCommerce permits and matching cannot survive
Legacy Odoo internal references never aligned to the storefront
Variable-product parents that have no SKU of their own
Export both catalogues and diff the SKU columns before syncing anything. The connector’s mapping layer helps where codes genuinely differ, but no module can guess which of two similar SKUs you meant. Half a day of cleanup at the start saves a fortnight of unpicking later.
What about the WordPress side?
WooCommerce is not a standalone application – it is a WordPress plugin talking over the WooCommerce REST API. That has three practical consequences most merchants discover the hard way.
Authentication is a key pair. You generate a consumer key and consumer secret in WooCommerce under Settings → Advanced → REST API, with Read/Write permission. Odoo uses those to talk to the store. Issue them from an account with the right capability and store the secret carefully.
Your hosting matters more than you think. A large import makes a lot of API calls in a short window. Cheap shared WordPress hosting throttles or times out under that load, and the failure looks like a connector bug when it is really a server limit. If you run a serious catalogue, run serious hosting.
Plugins can rewrite the payload. WooCommerce’s data model is routinely modified by other plugins, custom fields, subscriptions, multi-currency and bundled products. Any of those can change what the REST API returns, and a connector expecting standard WooCommerce output will not know what to do with a bundle. Test your actual store’s output, not a clean WooCommerce install, before trusting the sync.
How should stock sync between WooCommerce and Odoo?
Decide which quantity you publish before you turn sync on. Most merchants decide this by accident and regret it.
On-hand is what you physically have. Publishing it understates availability, because stock inbound on a purchase order stays invisible until received.
Forecasted includes incoming and outgoing commitments. Publishing it oversells, because Odoo counts stock a supplier has not shipped.
Available on-hand minus reserved is usually right for a single-channel store.
If the same stock sells on WooCommerce, a marketplace, and a physical shop, no single number is correct and you need a buffer. Reserve a fixed quantity per SKU and publish the remainder. It costs a little availability and saves the oversold-order refund cycle, which costs far more in support time and store reputation.
What happens To Taxes, Coupons And Refunds
This is where integration stops being an IT project and becomes your finance team’s problem.
Taxes. WooCommerce calculates tax at checkout and the customer pays that figure. Odoo, left alone, recalculates from the customer’s fiscal position and its own rules, and the two will not always agree. A correct import writes WooCommerce’s tax lines onto the sales order as charged, rather than recomputing them. A one-cent rounding difference per order sounds trivial until you reconcile ten thousand of them.
Coupons. A WooCommerce coupon has to become something in Odoo. Our connector syncs coupons in both directions, but you still decide whether a discount posts as a percentage on the line or as a separate negative line item. That choice shapes your P&L, so make it with whoever closes your books.
Refunds. A refund is not a deleted order. WooCommerce refunds should arrive in Odoo as credit notes against the original invoice, and Odoo invoice refunds can export back to WooCommerce. Separately, a refund may or may not restock the item. A returned shirt goes back on sale; a damaged one does not. If your connector restocks everything automatically, your available quantity drifts upward from reality every month.
Running multiple WooCommerce stores
If you operate several storefronts – regional sites, separate brands, a wholesale store – one Odoo database can serve all of them. The connector supports multiple WooCommerce instances and multi-company setups.
That flexibility comes with a licensing detail worth stating plainly: the module is licensed per company or database instance. Running it across multiple companies means a licence for each. Factor that into the cost comparison before you architect a five-brand setup, and treat a multi-store rollout as an Odoo implementation task rather than a weekend install.
What the Techspawn Odoo WooCommerce Connector includes
Stated plainly, so you can compare it:
| Price | $198.59 on the Odoo Apps Store, per company/database |
| Licence | OPL-1 |
| Technical name | odoo_woo_connect |
| Odoo versions | 19.0 current; builds back to 9.0 |
| Hosting | Odoo Online, Odoo.sh, on-premise |
| Dependencies | Contacts, Inventory, Invoicing, Sales, Website, eCommerce, Discuss |
| Codebase | ~14,600 lines |
| Support | Free for 3 months from purchase |
Functionally: two-way auto synchronisation of products, categories, tags, attributes, customers, orders, taxes and coupons; queue-based import and export with per-record status; single-click and scheduled cron sync; import or export of a single record by WooCommerce ID for debugging; invoice refund export from Odoo to WooCommerce; an instance dashboard with sync KPIs; data mapping; and multi-store, multi-company support.
See the wider range on our Odoo Apps Store profile, or the Odoo WooCommerce Connector page for the full breakdown.
When a connector is the wrong choice
Three situations where we would tell you not to buy.
Your catalogue logic is genuinely unusual. Subscription products, bundles resolved at checkout, per-customer contract pricing. Standard connectors assume a variation is a variation. If yours is not, you want custom Odoo development built around your model.
You are pre-launch under fifty orders a month. A monthly CSV import costs an hour and no licence fee. Buy the connector when manual entry costs more than the module.
Your Odoo instance is not clean yet. If your chart of accounts is provisional, warehouses are unmodelled, or you are mid-migration, syncing a live storefront multiplies the mess. Fix Odoo first.
Setup sequence that avoids rework
Reconcile SKUs first. Export both catalogues, diff the identifiers, fix at source.
Generate WooCommerce REST API keys with Read/Write permission and store the secret safely.
Model warehouses and choose your published quantity – on-hand, forecasted, or available minus buffer.
Configure taxes to accept WooCommerce’s checkout figures rather than recompute them.
Import into a staging database first. Not production. You will find data problems and you want them somewhere disposable.
Watch the queue on the first real import. The error lines tell you what your store’s data actually looks like.
Run parallel for two weeks before trusting the sync unattended.
Set up monitoring on the queue and cron. A failed sync nobody notices is worse than no sync.
Steps 5 and 7 are the ones people skip, and the ones that catch expensive problems while they are still cheap.
Frequently asked questions
Does the WooCommerce Odoo connector support two-way sync? Yes. Products, stock, prices, orders, customers, taxes, coupons and refunds move in both directions, with automatic synchronisation and direction configurable so you can designate a source of truth.
Which Odoo versions does it support? Odoo 19 is current with builds available back to Odoo 9, across Odoo Online, Odoo.sh and on-premise.
How does it handle a large product import? Imports run through a queue processed on a cron. Each record carries its own status, so one failure does not stop the batch and large imports do not block the Odoo interface.
Can I run more than one WooCommerce store? Yes. The connector supports multiple WooCommerce instances and multi-company setups. Note the licence is per company/database, so multiple companies need multiple licences.
Do I need anything on the WordPress side? You generate a WooCommerce REST API consumer key and secret with Read/Write permission. Adequate WordPress hosting matters, because large syncs make many API calls in a short window.
What happens to refunds? WooCommerce refunds import as credit notes against the original invoice, and Odoo invoice refunds can export back to WooCommerce. Whether a refund restocks the item is configurable.
Is support included? Free support is included for three months from purchase, covering setup and configuration questions.
Next step
If you are evaluating, the useful step is not another feature list – it is putting your own catalogue, tax setup and WordPress environment in front of someone who has connected a store like yours. We have shipped Odoo integrations across ecommerce, distribution and manufacturing, and also maintain connectors for Shopify and QuickBooks where WooCommerce is one part of the stack.
View the Odoo WooCommerce Connector → | See a live demo → | Ask our team →