{"id":"bf4e2db0-483b-45f0-b469-0f7663928422","shortId":"scvy9R","kind":"skill","title":"odoo-woocommerce-bridge","tagline":"Sync Odoo with WooCommerce: products, inventory, orders, and customers via WooCommerce REST API and Odoo external API.","description":"# Odoo ↔ WooCommerce Bridge\n\n## Overview\n\nThis 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.\n\n## When to Use This Skill\n\n- Running a WooCommerce store with Odoo for inventory and fulfillment.\n- Automatically pulling WooCommerce orders into Odoo as sale orders.\n- Keeping WooCommerce product stock in sync with Odoo's warehouse.\n- Mapping WooCommerce order statuses to Odoo delivery states.\n\n## How It Works\n\n1. **Activate**: Mention `@odoo-woocommerce-bridge` and describe your sync requirements.\n2. **Design**: Get the field mapping table between WooCommerce and Odoo objects.\n3. **Build**: Receive Python integration scripts using the WooCommerce REST API.\n\n## Field Mapping: WooCommerce → Odoo\n\n| WooCommerce | Odoo |\n|---|---|\n| `products` | `product.template` + `product.product` |\n| `orders` | `sale.order` + `sale.order.line` |\n| `customers` | `res.partner` |\n| `stock_quantity` | `stock.quant` |\n| `sku` | `product.product.default_code` |\n| `order status: processing` | Sale Order: `sale` (confirmed) |\n| `order status: completed` | Delivery: `done` |\n\n## Examples\n\n### Example 1: Pull WooCommerce Orders into Odoo (Python)\n\n```python\nfrom woocommerce import API\nimport xmlrpc.client\nimport os\n\n# WooCommerce client\nwcapi = API(\n    url=os.getenv(\"WC_URL\", \"https://mystore.com\"),\n    consumer_key=os.getenv(\"WC_KEY\"),\n    consumer_secret=os.getenv(\"WC_SECRET\"),\n    version=\"wc/v3\"\n)\n\n# Odoo client\nodoo_url = os.getenv(\"ODOO_URL\", \"https://myodoo.example.com\")\ndb = os.getenv(\"ODOO_DB\", \"my_db\")\nuid = int(os.getenv(\"ODOO_UID\", \"2\"))\npwd = os.getenv(\"ODOO_PASSWORD\")\nmodels = xmlrpc.client.ServerProxy(f\"{odoo_url}/xmlrpc/2/object\")\n\n\ndef sync_orders():\n    # Get unprocessed WooCommerce orders\n    orders = wcapi.get(\"orders\", params={\"status\": \"processing\", \"per_page\": 50}).json()\n\n    for wc_order in orders:\n        # Find or create Odoo partner\n        email = wc_order['billing']['email']\n        partner = models.execute_kw(db, uid, pwd, 'res.partner', 'search',\n            [[['email', '=', email]]])\n        if not partner:\n            partner_id = models.execute_kw(db, uid, pwd, 'res.partner', 'create', [{\n                'name': f\"{wc_order['billing']['first_name']} {wc_order['billing']['last_name']}\",\n                'email': email,\n                'phone': wc_order['billing']['phone'],\n                'street': wc_order['billing']['address_1'],\n                'city': wc_order['billing']['city'],\n            }])\n        else:\n            partner_id = partner[0]\n\n        # Create Sale Order in Odoo\n        order_lines = []\n        for item in wc_order['line_items']:\n            product = models.execute_kw(db, uid, pwd, 'product.product', 'search',\n                [[['default_code', '=', item['sku']]]])\n            if product:\n                order_lines.append((0, 0, {\n                    'product_id': product[0],\n                    'product_uom_qty': item['quantity'],\n                    'price_unit': float(item['price']),\n                }))\n\n        models.execute_kw(db, uid, pwd, 'sale.order', 'create', [{\n            'partner_id': partner_id,\n            'client_order_ref': f\"WC-{wc_order['number']}\",\n            'order_line': order_lines,\n        }])\n\n        # Mark WooCommerce order as on-hold (processed by Odoo)\n        wcapi.put(f\"orders/{wc_order['id']}\", {\"status\": \"on-hold\"})\n```\n\n### Example 2: Push Odoo Stock to WooCommerce\n\n```python\ndef sync_inventory_to_woocommerce():\n    # Get all products with a SKU from Odoo\n    products = models.execute_kw(db, uid, pwd, 'product.product', 'search_read',\n        [[['default_code', '!=', False], ['type', '=', 'product']]],\n        {'fields': ['default_code', 'qty_available']}\n    )\n\n    for product in products:\n        sku = product['default_code']\n        qty = int(product['qty_available'])\n\n        # Update WooCommerce by SKU\n        wc_products = wcapi.get(\"products\", params={\"sku\": sku}).json()\n        if wc_products:\n            wcapi.put(f\"products/{wc_products[0]['id']}\", {\n                \"stock_quantity\": qty,\n                \"manage_stock\": True,\n            })\n```\n\n## Best Practices\n\n- ✅ **Do:** Use **SKU** as the unique identifier linking WooCommerce products to Odoo products.\n- ✅ **Do:** Run inventory sync on a **schedule** (every 15-30 min) rather than real-time to avoid rate limits.\n- ✅ **Do:** Log all API calls and errors to a database table for debugging.\n- ❌ **Don't:** Process the same WooCommerce order twice — flag it as processed immediately after import.\n- ❌ **Don't:** Sync draft or cancelled WooCommerce orders to Odoo — filter by `status = processing` or `completed`.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["odoo","woocommerce","bridge","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-odoo-woocommerce-bridge","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/odoo-woocommerce-bridge","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34666 github stars · SKILL.md body (5,132 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T06:51:42.188Z","embedding":null,"createdAt":"2026-04-18T21:41:56.913Z","updatedAt":"2026-04-23T06:51:42.188Z","lastSeenAt":"2026-04-23T06:51:42.188Z","tsv":"'-30':528 '/xmlrpc/2/object':245 '0':334,364,365,369,496 '1':110,179,324 '15':527 '2':122,235,424 '3':134 '50':261 'activ':111 'address':323 'api':17,21,144,190,198,542 'ask':616 'automat':80 'avail':462,475 'avoid':536 'back':40 'back-offic':39 'best':504 'bill':276,304,309,317,322,328 'boundari':624 'bridg':4,24,35,116 'build':31,135 'call':543 'cancel':572 'catalog':52 'citi':325,329 'clarif':618 'clear':591 'client':196,217,391 'code':164,358,454,460,470 'complet':174,582 'confirm':171 'consum':204,209 'cover':50 'creat':270,299,335,386 'criteria':627 'custom':13,62,157 'databas':548 'db':224,227,229,281,295,352,382,447 'debug':551 'def':246,431 'default':357,453,459,469 'deliveri':105,175 'describ':118,595 'design':123 'done':176 'draft':570 'els':330 'email':273,277,286,287,312,313 'environ':607 'environment-specif':606 'erp':42 'error':545 'everi':526 'exampl':177,178,423 'expert':612 'extern':20 'f':242,301,394,414,492 'fals':455 'field':126,145,458 'filter':577 'find':268 'first':305 'flag':560 'float':377 'fulfil':79 'get':124,249,436 'guid':28 'hold':409,422 'id':292,332,367,388,390,418,497 'identifi':512 'immedi':564 'import':60,189,191,193,566 'input':621 'int':231,472 'integr':138 'inventori':10,57,77,433,521 'item':343,348,359,373,378 'json':262,487 'keep':89 'key':205,208 'kw':280,294,351,381,446 'last':310 'limit':538,583 'line':341,347,400,402 'link':513 'log':540 'manag':64,501 'map':99,127,146 'mark':403 'match':592 'mention':112 'min':529 'miss':629 'model':240 'models.execute':279,293,350,380,445 'myodoo.example.com':223 'mystore.com':203 'name':300,306,311 'number':398 'object':133 'odoo':2,6,19,22,37,75,85,96,104,114,132,148,150,184,216,218,221,226,233,238,243,271,339,412,426,443,517,576 'odoo-woocommerce-bridg':1,113 'offic':41 'on-hold':407,420 'onlin':47 'order':11,59,83,88,101,154,165,169,172,182,248,252,253,255,265,267,275,303,308,316,321,327,337,340,346,392,397,399,401,405,415,417,558,574 'order_lines.append':363 'os':194 'os.getenv':200,206,211,220,225,232,237 'output':601 'overview':25 'page':260 'param':256,484 'partner':272,278,290,291,331,333,387,389 'password':239 'per':259 'permiss':622 'phone':314,318 'practic':505 'price':375,379 'process':167,258,410,554,563,580 'product':9,51,91,151,349,362,366,368,370,438,444,457,464,466,468,473,481,483,490,493,495,515,518 'product.product':153,355,450 'product.product.default':163 'product.template':152 'pull':81,180 'push':425 'pwd':236,283,297,354,384,449 'python':137,185,186,430 'qti':372,461,471,474,500 'quantiti':160,374,499 'rate':537 'rather':530 'read':452 'real':55,533 'real-tim':54,532 'receiv':136 'record':63 'ref':393 'reliabl':33 'requir':121,620 'res.partner':158,284,298 'rest':16,143 'review':613 'run':70,520 'safeti':623 'sale':87,168,170,336 'sale.order':155,385 'sale.order.line':156 'schedul':525 'scope':594 'script':139 'search':285,356,451 'secret':210,213 'skill':27,69,586 'skill-odoo-woocommerce-bridge' 'sku':162,360,441,467,479,485,486,508 'source-sickn33' 'specif':608 'state':106 'status':102,166,173,257,419,579 'stock':92,159,427,498,502 'stock.quant':161 'stop':614 'store':48,73 'street':319 'substitut':604 'success':626 'sync':5,34,53,94,120,247,432,522,569 'tabl':128,549 'task':590 'test':610 'time':56,534 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'treat':599 'true':503 'twice':559 'type':456 'uid':230,234,282,296,353,383,448 'uniqu':511 'unit':376 'unprocess':250 'uom':371 'updat':58,476 'url':199,202,219,222,244 'use':67,140,507,584 'valid':609 'version':214 'via':14 'warehous':98 'wc':201,207,212,264,274,302,307,315,320,326,345,395,396,416,480,489,494 'wc/v3':215 'wcapi':197 'wcapi.get':254,482 'wcapi.put':413,491 'woocommerc':3,8,15,23,44,72,82,90,100,115,130,142,147,149,181,188,195,251,404,429,435,477,514,557,573 'wordpress':46 'work':109 'xmlrpc.client':192 'xmlrpc.client.serverproxy':241","prices":[{"id":"618db0a3-adf2-4422-a18e-4cb9480c7633","listingId":"bf4e2db0-483b-45f0-b469-0f7663928422","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:41:56.913Z"}],"sources":[{"listingId":"bf4e2db0-483b-45f0-b469-0f7663928422","source":"github","sourceId":"sickn33/antigravity-awesome-skills/odoo-woocommerce-bridge","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/odoo-woocommerce-bridge","isPrimary":false,"firstSeenAt":"2026-04-18T21:41:56.913Z","lastSeenAt":"2026-04-23T06:51:42.188Z"}],"details":{"listingId":"bf4e2db0-483b-45f0-b469-0f7663928422","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"odoo-woocommerce-bridge","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34666,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"626b85e16ce8cdd63296b93f0060ec0d3b57308b","skill_md_path":"skills/odoo-woocommerce-bridge/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/odoo-woocommerce-bridge"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"odoo-woocommerce-bridge","description":"Sync Odoo with WooCommerce: products, inventory, orders, and customers via WooCommerce REST API and Odoo external API."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/odoo-woocommerce-bridge"},"updatedAt":"2026-04-23T06:51:42.188Z"}}