| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Sales (sale_management) • Discuss (mail) • Invoicing (account) |
| Lines of code | 2447 |
| Technical Name |
ezway_woocommerce_sync |
| License | OPL-1 |
| Website | https://ezway-technology.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Sales (sale_management) • Discuss (mail) • Invoicing (account) |
| Lines of code | 2447 |
| Technical Name |
ezway_woocommerce_sync |
| License | OPL-1 |
| Website | https://ezway-technology.com |
WooCommerce ↔ Odoo Sync
Complete bidirectional synchronization between your WooCommerce store and Odoo 19.0.
Orders, customers, products (including variable), stock, categories, weight, dimensions — all managed automatically.
Features
📦 Orders WC → OdooEach WooCommerce order creates or updates an Odoo sales order in real time via webhook. Status transitions are handled automatically. |
🧾 Automatic InvoicingThe invoice is created, validated, and emailed to the customer automatically based on the WooCommerce status ( |
👤 Customers WC → OdooContacts are created or updated with each order by email match. The shipping address is imported as a child contact. |
🛍️ Products Odoo → WCUpdate a product in Odoo? Changes are pushed automatically to WooCommerce (name, price, short description, SKU, status, weight, dimensions, category). |
🎨 Variable ProductsWooCommerce variable products (sizes, colors…) are fully supported in both directions. Each Odoo variant is linked to its WC variation by ID. |
📊 Stock Odoo → WCStock is synced automatically when each delivery order is validated, with per-variation handling for variable products. |
🗂️ CategoriesThe main category is synced in both directions. If missing at the destination, it is created automatically. |
📦 Weight & DimensionsWeight (kg), length, width, and height (cm) are synced in both directions between Odoo and WooCommerce. |
🖼️ Images WC → OdooThe main image of each WooCommerce product is downloaded and stored in Odoo during import. Secure download with domain validation and 8 MB limit. |
🔄 Product LifecycleArchiving a product in Odoo sets it to |
🔁 Catch-up CronsAn hourly cron imports recently modified WooCommerce orders, ensuring zero missed orders even if a webhook fails. |
📋 Full Sync LogEvery operation is logged: webhook received, order synced, product pushed, stock updated, signature errors — with status and detail message. |
Processing Flow by WooCommerce Status
| WooCommerce Status | Odoo Action |
|---|---|
pending | Quotation created + quotation email sent to customer |
on-hold | Quotation created (payment pending, no email) |
processing | Order confirmed + invoice created & posted + invoice email |
completed | Order confirmed + invoice created & posted + invoice email |
cancelled / refunded / failed | Odoo order cancelled |
pending to processing,
the invoice is generated and sent automatically with no manual action required.
100% Invoicing in Odoo
WooCommerce (online payment: Stripe, PayPal…)
↓ webhook
order.created / order.updated
sale.order Odoo
↓
action_confirm()
account.move (invoice)
↓
action_post() + email template
Invoice email → Customer
WooCommerce handles the payment. Odoo is the source of truth for official invoices, VAT, and accounting.
Automations
|
1
|
Stock sync on delivery validation AUTO As soon as a delivery order is validated in Odoo, quantities are pushed to WooCommerce. For variable products, each variation is updated individually via /products/{id}/variations/{variation_id}.
|
|
2
|
Products sync on update AUTO Changing the price, name, short description, SKU, status, weight, or dimensions of a linked product triggers an immediate sync to WooCommerce. |
|
3
|
Archive / unarchive AUTO Archiving a product in Odoo immediately pushes status=draft to WooCommerce (product disappears from the store).
Unarchiving restores the publish status. Works even if auto-sync is disabled.
|
|
4
|
Order catch-up — hourly cron AUTO Retrieves all WooCommerce orders modified in the last 2 hours. Guarantees zero missed orders in case of network outage or server restart. |
|
5
|
Periodic stock sync — 6h cron AUTO Pushes stock for all linked products. Safety net for inventory adjustments that do not go through a delivery order. |
|
6
|
Manual synchronization MANUAL Wizard available in Sales > WooCommerce > Manual Sync: import products (with variations), customers, orders by period, or full initialization. New records only option to protect existing Odoo data. |
Configuration
1. In Odoo
Menu Sales > WooCommerce > Configuration > WooCommerce Settings
| Field | Description |
|---|---|
| Shop URL | https://mystore.com (no trailing slash) |
| Consumer Key | WooCommerce API key (ck_...) |
| Consumer Secret | WooCommerce API secret (cs_...) |
| Webhook Secret | Must match the secret set in each WooCommerce webhook (HMAC-SHA256 validation) |
2. In WooCommerce
WooCommerce > Settings > Advanced > Webhooks — create 3 webhooks with the same URL and secret:
| Topic | Delivery URL |
|---|---|
order.created | https://your-odoo.com/woocommerce/webhook |
order.updated | https://your-odoo.com/woocommerce/webhook |
order.deleted | https://your-odoo.com/woocommerce/webhook |
Data Mapping
WooCommerce Order → Odoo
| WooCommerce JSON | Odoo Field | Model |
|---|---|---|
id | woo_order_id | sale.order |
number | woo_order_number | sale.order |
status | woo_order_status | sale.order |
date_created | date_order | sale.order |
billing.email | searches/creates partner_id | res.partner |
shipping.* | child contact type=delivery | res.partner |
line_items[].variation_id | product_id (via woo_variation_id) | sale.order.line |
line_items[].product_id | product_id (via woo_product_id) | sale.order.line |
line_items[].quantity | product_uom_qty | sale.order.line |
line_items[].price | price_unit | sale.order.line |
WooCommerce Product → Odoo (import)
| WooCommerce JSON | Odoo Field |
|---|---|
id | woo_product_id |
name | name |
regular_price | list_price |
short_description | description_sale |
sku | default_code |
status | woo_product_status |
weight | weight (kg) |
dimensions.length | woo_length (cm) |
dimensions.width | woo_width (cm) |
dimensions.height | woo_height (cm) |
categories[0].name | categ_id (created if missing) |
images[0].src | image_1920 (downloaded, max 8 MB) |
type=variable → /variations | Attributes + variants product.product |
Odoo Product → WooCommerce
| Odoo Field | WooCommerce JSON | Trigger |
|---|---|---|
name | name | Auto on update |
list_price | regular_price | Auto on update |
description_sale | short_description | Auto on update |
default_code | sku | Auto on update |
woo_product_status | status | Auto on update |
active=False | status=draft | Auto on archive |
weight | weight | Auto on update |
woo_length/width/height | dimensions.{length,width,height} | Auto on update |
categ_id.name | categories[{id}] | On each push |
qty_available | stock_quantity | Auto on delivery / cron |
Variants product.product | /products/{id}/variations | On each push |
Sync Log
Every operation is logged and accessible from Sales > WooCommerce > Sync Log:
| Event | Status |
|---|---|
| Webhook received (each call) | Success |
| Invalid HMAC signature | Error |
| Unhandled webhook topic | Ignored |
| Order created / updated | Success |
| Contact created / updated | Success |
| Product imported / pushed | Success / Error |
| Stock synced | Success / Error |
Compatibility
| Component | Version |
|---|---|
| Odoo | 19.0 |
| WooCommerce | 6.x, 7.x, 8.x, 9.x |
| Python | 3.10+ |
| Python dependency | requests |
| Required Odoo modules | sale_management, stock, product |
Planned Improvements
| Feature | Note |
|---|---|
| Images Odoo → WC | Odoo's internal URL requires authentication; WooCommerce cannot download it directly |
| Taxes / VAT | Complex mapping depending on tax configuration |
| Shipping costs | shipping_lines field not mapped |
| Coupons / discounts | coupon_lines field not mapped |
ezway technology — ezway-technology.com
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module