Skill

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

Works with odoowoocommercepython

46
Spark score
out of 100
Updated yesterday
Version 13.1.0

Add to Favorites

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

01

Synchronize product catalogs between Odoo and WooCommerce.

02

Implement real-time inventory level updates from Odoo to WooCommerce.

03

Automatically import WooCommerce orders into Odoo as sale orders.

04

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

ETL & sync

Moves and transforms data between systems on a schedule.

Generate code

Writes source code or scripts from a description.

CRM sync

Keeps CRM records up to date with the latest interactions.

Query a database

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

  1. Activate: Mention @odoo-woocommerce-bridge and describe your sync requirements.
  2. Design: Get the field mapping table between WooCommerce and Odoo objects.
  3. 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 = processing or completed.

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.