Sync Odoo ERP with WooCommerce Store
Guides you through building a sync bridge between Odoo ERP and WooCommerce stores, covering product catalog sync, inventory updates, order import, and customer
Why it matters
Automate the synchronization between your Odoo ERP and WooCommerce online store, ensuring seamless data flow for products, inventory, orders, and customers.
Outcomes
What it gets done
Synchronize product catalogs between Odoo and WooCommerce.
Implement real-time inventory level updates from Odoo to WooCommerce.
Automatically import WooCommerce orders into Odoo as sale orders.
Map WooCommerce order statuses to Odoo delivery states.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-odoo-woocommerce-bridge | bash Capabilities
What this skill does
Moves and transforms data between systems on a schedule.
Writes source code or scripts from a description.
Keeps CRM records up to date with the latest interactions.
Writes and executes SQL or NoSQL queries on databases.
Overview
Odoo WooCommerce Bridge
What it does
A skill that provides field mapping tables and Python integration scripts for syncing data between Odoo ERP and WooCommerce stores using the WooCommerce REST API and Odoo XML-RPC.
How it connects
Use when you need to pull WooCommerce orders into Odoo as sale orders, push Odoo stock levels to WooCommerce, or map customers, products, and order statuses between both systems.
Source README
Odoo ↔ WooCommerce Bridge
Overview
This skill guides you through building a reliable sync bridge between Odoo (the back-office ERP) and WooCommerce (the WordPress online store). It covers product catalog sync, real-time inventory updates, order import, and customer record management.
When to Use This Skill
- Running a WooCommerce store with Odoo for inventory and fulfillment.
- Automatically pulling WooCommerce orders into Odoo as sale orders.
- Keeping WooCommerce product stock in sync with Odoo's warehouse.
- Mapping WooCommerce order statuses to Odoo delivery states.
How It Works
- Activate: Mention
@odoo-woocommerce-bridgeand describe your sync requirements. - Design: Get the field mapping table between WooCommerce and Odoo objects.
- Build: Receive Python integration scripts using the WooCommerce REST API.
Field Mapping: WooCommerce → Odoo
| WooCommerce | Odoo |
|---|---|
products |
product.template + product.product |
orders |
sale.order + sale.order.line |
customers |
res.partner |
stock_quantity |
stock.quant |
sku |
product.product.default_code |
order status: processing |
Sale Order: sale (confirmed) |
order status: completed |
Delivery: done |
Examples
Example 1: Pull WooCommerce Orders into Odoo (Python)
from woocommerce import API
import xmlrpc.client
import os
# WooCommerce client
wcapi = API(
url=os.getenv("WC_URL", "https://mystore.com"),
consumer_key=os.getenv("WC_KEY"),
consumer_secret=os.getenv("WC_SECRET"),
version="wc/v3"
)
# Odoo client
odoo_url = os.getenv("ODOO_URL", "https://myodoo.example.com")
db = os.getenv("ODOO_DB", "my_db")
uid = int(os.getenv("ODOO_UID", "2"))
pwd = os.getenv("ODOO_PASSWORD")
models = xmlrpc.client.ServerProxy(f"{odoo_url}/xmlrpc/2/object")
def sync_orders():
# Get unprocessed WooCommerce orders
orders = wcapi.get("orders", params={"status": "processing", "per_page": 50}).json()
for wc_order in orders:
# Find or create Odoo partner
email = wc_order['billing']['email']
partner = models.execute_kw(db, uid, pwd, 'res.partner', 'search',
[[['email', '=', email]]])
if not partner:
partner_id = models.execute_kw(db, uid, pwd, 'res.partner', 'create', [{
'name': f"{wc_order['billing']['first_name']} {wc_order['billing']['last_name']}",
'email': email,
'phone': wc_order['billing']['phone'],
'street': wc_order['billing']['address_1'],
'city': wc_order['billing']['city'],
}])
else:
partner_id = partner[0]
# Create Sale Order in Odoo
order_lines = []
for item in wc_order['line_items']:
product = models.execute_kw(db, uid, pwd, 'product.product', 'search',
[[['default_code', '=', item['sku']]]])
if product:
order_lines.append((0, 0, {
'product_id': product[0],
'product_uom_qty': item['quantity'],
'price_unit': float(item['price']),
}))
models.execute_kw(db, uid, pwd, 'sale.order', 'create', [{
'partner_id': partner_id,
'client_order_ref': f"WC-{wc_order['number']}",
'order_line': order_lines,
}])
# Mark WooCommerce order as on-hold (processed by Odoo)
wcapi.put(f"orders/{wc_order['id']}", {"status": "on-hold"})
Example 2: Push Odoo Stock to WooCommerce
def sync_inventory_to_woocommerce():
# Get all products with a SKU from Odoo
products = models.execute_kw(db, uid, pwd, 'product.product', 'search_read',
[[['default_code', '!=', False], ['type', '=', 'product']]],
{'fields': ['default_code', 'qty_available']}
)
for product in products:
sku = product['default_code']
qty = int(product['qty_available'])
# Update WooCommerce by SKU
wc_products = wcapi.get("products", params={"sku": sku}).json()
if wc_products:
wcapi.put(f"products/{wc_products[0]['id']}", {
"stock_quantity": qty,
"manage_stock": True,
})
Best Practices
- ✅ Do: Use SKU as the unique identifier linking WooCommerce products to Odoo products.
- ✅ Do: Run inventory sync on a schedule (every 15-30 min) rather than real-time to avoid rate limits.
- ✅ Do: Log all API calls and errors to a database table for debugging.
- ❌ Don't: Process the same WooCommerce order twice - flag it as processed immediately after import.
- ❌ Don't: Sync draft or cancelled WooCommerce orders to Odoo - filter by
status = processingorcompleted.
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.