Connecting WooCommerce to Holded or Odoo: what each one actually syncs
If you sell through WooCommerce and run your business on Holded or Odoo, connecting them is one of the automations that saves the most hours. Every order generates its invoice, stock updates itself, and you stop copying data from one screen to another.
The trouble is that the two integrations have little in common. They do not sync the same things, they do not run in the same direction, and one of them carries an infrastructure requirement that rules out a lot of people, with nobody warning you until you have already paid for the licence.
Here is exactly what each one does, what its limits are, which fits your case and how to set it up without leaving your store selling what you do not have.
1. The decision that comes before choosing a tool
Before looking at connectors there is one question to answer. When you change a product's price, where do you change it? And stock, who holds the correct figure, the store or the ERP?
This is what defining a source of truth means. Every piece of data needs a single system that owns it, while the other simply receives. When both can write the same field, sooner or later one overwrites the other and you end up with stale prices or negative stock.
WooCommerce owns it
The Holded model- You create and edit products in the store
- The ERP receives the catalogue and issues invoices
- Convenient if your team lives in WordPress
- Falls short with several sales channels
The ERP owns it
The Odoo model- You create products and price lists in the ERP
- The store is a shop window that receives
- Necessary if you sell across several channels
- Demands more discipline and more setup
2. WooCommerce with Holded, how it really works
Holded has its own WooCommerce integration. It installs as a WordPress plugin and connects with an API key. It needs nothing special from your hosting, and that is its great advantage.
| Data | Direction | Conditions |
|---|---|---|
| Products | WooCommerce to Holded only | Every product needs a SKU. Simple and variable products are supported. |
| Stock | Both ways | Requires the inventory add-on, a matching SKU, and simple or variable products. |
| Orders | WooCommerce to Holded | They become an invoice, a sales receipt or a sales order, as you configure. |
| Customers | WooCommerce to Holded | A contact record is created from the order details. |
According to Holded's help documentation, checked in September 2026.
The three details that change the project
- 01Two-way stock is not included. You need Holded's inventory add-on, which is paid separately. This is the detail that wrecks the most budgets, because many people assume stock syncs on the base plan.
- 02Only «Completed» orders get invoiced. If you configure orders to arrive as invoices or receipts, Holded imports them only once you mark the order as completed in WooCommerce. An order sitting in «Processing» generates nothing.
- 03The catalogue only flows one way. Whatever you change in Holded does not reach the store. Edit a product there and the site keeps showing the old version.
For a store selling finished products from a single warehouse, with a team working in WordPress that mainly wants to stop writing invoices by hand, this integration covers the case with very little setup.
3. WooCommerce with Odoo, and the requirement that rules many people out
This is not a minor detail, it is an infrastructure and cost decision. To connect Odoo with WooCommerce you have to be on Odoo.sh, Odoo's platform for projects with development, or on your own server. Both mean a higher plan and someone to administer the environment.
So which connector do you use
You use third-party modules published on Odoo's Apps Store. The two most widely used are Emipro's connector, covering Odoo versions 8 through 19, and VentorTech's, covering 16 through 19 in both Community and Enterprise. Both are paid and come on top of your licence.
What you get in return
- Forecast stock, not just what is on the shelf. You can publish the quantity you will have, counting what is already reserved and what is arriving on a purchase order.
- Bundles and kits calculated for you. Odoo looks at the scarcest component and publishes how many kits you can genuinely sell.
- Several warehouses. Consolidate stock or assign a warehouse to each store.
- The order runs the whole chain. It arrives as a sales order, reserves stock, generates the delivery note, issues the invoice and records the payment, with nothing done by hand.
- Tracking flows back to the store. When you prepare the shipment in Odoo, the tracking number and the status change reach WooCommerce and the customer sees them.
- Price lists by customer type. Different prices for wholesale and retail, managed from the ERP.
It is far more powerful, and it is also far more of a project. If your operation needs none of the above, you are paying for complexity you will never use.
4. Side by side
| Holded | Odoo | |
|---|---|---|
| Connector | Holded's own integration | Third-party module, paid |
| Where the ERP can live | Its cloud, no requirements | Odoo.sh or your own server. Not Odoo Online |
| Who owns the catalogue | WooCommerce | Odoo |
| Stock | Both ways, with the inventory add-on | Physical, forecast, per warehouse and with kits |
| Bundles, batches and serial numbers | Not supported | Supported |
| Order lifecycle | Becomes a sales document | Order, reservation, delivery note, invoice and payment |
| Tracking sent back to the store | No | Yes |
| Time to go live | Days | Weeks |
| Cost | Subscription plus inventory add-on | Licence, module, hosting and consulting |
5. Which one suits you
Do you sell bundles, manufacture, work with batches or run more than one warehouse?
- Budget for Odoo.sh or your own server
- Paid third-party module
- A project of weeks
- Its own integration, no requirements
- Add the inventory add-on
- Live in days
Choose Holded if…
- You sell finished products you buy ready-made, with no assembly.
- Your team creates and edits products in WordPress and wants to keep doing that.
- You work with one warehouse, or two without complicated rules.
- What hurts is invoicing and reconciling the books, not logistics.
- You do not want to administer servers or take on a long project.
Choose Odoo if…
- You sell bundles or kits, or manufacture part of what you sell.
- You have several warehouses, or traceability by batch or serial number.
- You sell across several channels at once and need genuinely unified stock.
- You have different prices for wholesale and retail.
- You want to know your real margin per product and per channel.
6. The tax side, which is where it usually hurts
An integration that syncs products beautifully but taxes badly will create more work than it saves. These are the points to settle before connecting anything.
- 01Set up your taxes in the ERP first. If an order arrives with a VAT rate the ERP does not have configured, it will assign whatever it can and you will be fixing invoices by hand.
- 02Add a tax ID field to checkout. WooCommerce does not include one, so you need a plugin. Then check with a test order that the number genuinely reaches the customer record in the ERP, because that is where most failures happen.
- 03Decide when invoicing happens. With Holded, the invoice is issued when you mark the order complete, which usually means on despatch rather than on payment. If days pass between the two, or worse, a month boundary, talk it through with your accountant before you build it.
- 04Review sales outside your country. Intra-EU sales and exports need their own configuration, and that is defined in the ERP, not in the store.
7. The mistakes that break an integration
Almost every problem that reaches us comes from the same five things, and all of them are avoidable before connecting.
- 01Empty or duplicated SKUs. This is cause number one. A product without a SKU does not sync and says nothing. A duplicate makes two products share stock and you end up selling what you do not have.
- 02Syncing stock both ways without thinking. If the store and the ERP can both write the same figure, a simultaneous sale in both places leaves the number wrong. Decide who owns it and stick to it.
- 03Not planning for returns. A sale syncs by itself, but a return needs the original invoice to exist in the ERP. Skip that and your credit notes end up orphaned.
- 04Creating duplicate customers. Without a shared key, the same customer arrives three times with three different emails. Decide whether you match on email or tax ID and be consistent.
- 05Logging nothing. If the integration leaves no trace of each sync, the day an order goes missing there will be no way to find out what happened. A reviewable error log is not optional.
8. How to set it up without breaking the store
You never connect straight onto the live store. This is the order we follow.
| Phase | What happens | What has to be true to move on |
|---|---|---|
| 1. Clean-up | Audit the catalogue, assign SKUs to everything and remove duplicates. Set up taxes and warehouses in the ERP. | No product without a SKU and no SKU repeated. |
| 2. Staging | Clone the store and connect it to a test ERP environment. | The connection works without touching real data. |
| 3. Initial load | Sync the catalogue and customers in one pass and compare the figures. | Prices and stock match in both systems. |
| 4. Test orders | Simulate a purchase, a return, a cancellation and a shipment. | All four cases produce what they should, errors included. |
| 5. Production | Switch on automatic sync and watch it for the first few days. | The logs show no unattended errors. |
Phase 1 takes the longest and is the one most often skipped. It is also the one that decides whether the integration works.
Sources
Questions about connecting WooCommerce to Holded or Odoo: what each one actually syncs
Not on Odoo Online, because it accepts neither third-party nor Apps Store modules, and the WooCommerce connector is exactly that. You need Odoo.sh or your own server. Worth knowing before you buy the plan.
Both ways, yes, but it requires Holded's inventory add-on, which is paid separately, plus matching SKUs and simple or variable products.
The usual cause is the order status. If you configure orders to arrive as invoices or receipts, Holded only imports them once the order is marked «Completed» in WooCommerce. An order in «Processing» produces nothing.
They simply do not sync, and usually without warning. That is why the first phase of any integration is auditing the catalogue and making sure everything has a unique SKU.
Yes, and it is a common path once the operation gets more complex. The migration is far easier if you keep the catalogue clean and the SKUs consistent from the start.
It depends on what has to be synced and whether the standard integration is enough or development is needed. We assess it once we have seen the detail, and we will also tell you if your case can be solved without custom development.
Let's talk about your
next project.
No sales pitch. A direct conversation about how automation and web development can transform your operation in the age of AI.
Support across Spain, LATAM and the USA
Spain · Colombia · Latam · USA
A direct reply and assessment in under 24 hours.