From antigravity-awesome-skills
Connect Odoo with Shopify: sync products, inventory, orders, and customers using the Shopify API and Odoo's external API or connector modules.
npx claudepluginhub mit-network/antigravity-awesome-skillsThis skill uses the workspace's default tool permissions.
This skill guides you through integrating Odoo with Shopify — syncing your product catalog, real-time inventory levels, incoming orders, and customer data. It covers both using the official Odoo Shopify connector (Enterprise) and building a custom integration via Shopify REST + Odoo XMLRPC APIs.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
This skill guides you through integrating Odoo with Shopify — syncing your product catalog, real-time inventory levels, incoming orders, and customer data. It covers both using the official Odoo Shopify connector (Enterprise) and building a custom integration via Shopify REST + Odoo XMLRPC APIs.
@odoo-shopify-integration and describe your sync scenario.SHOPIFY ODOO
-------- ----
Product Catalog <──────sync────── Product Templates + Variants
Inventory Level <──────sync────── Stock Quants (real-time)
New Order ───────push──────> Sale Order (auto-confirmed)
Customer ───────push──────> res.partner (created if new)
Fulfillment <──────push────── Delivery Order validated
import xmlrpc.client, requests
# Odoo connection
odoo_url = "https://myodoo.example.com"
db, uid, pwd = "my_db", 2, "api_key"
models = xmlrpc.client.ServerProxy(f"{odoo_url}/xmlrpc/2/object")
def create_odoo_order_from_shopify(shopify_order):
# Find or create customer
partner = models.execute_kw(db, uid, pwd, 'res.partner', 'search_read',
[[['email', '=', shopify_order['customer']['email']]]],
{'fields': ['id'], 'limit': 1}
)
partner_id = partner[0]['id'] if partner else models.execute_kw(
db, uid, pwd, 'res.partner', 'create', [{
'name': shopify_order['customer']['first_name'] + ' ' + shopify_order['customer']['last_name'],
'email': shopify_order['customer']['email'],
}]
)
# Create Sale Order
order_id = models.execute_kw(db, uid, pwd, 'sale.order', 'create', [{
'partner_id': partner_id,
'client_order_ref': f"Shopify #{shopify_order['order_number']}",
'order_line': [(0, 0, {
'product_id': get_odoo_product_id(line['sku']),
'product_uom_qty': line['quantity'],
'price_unit': float(line['price']),
}) for line in shopify_order['line_items']],
}])
return order_id
def get_odoo_product_id(sku):
result = models.execute_kw(db, uid, pwd, 'product.product', 'search_read',
[[['default_code', '=', sku]]], {'fields': ['id'], 'limit': 1})
return result[0]['id'] if result else False
from flask import Flask, request
app = Flask(__name__)
@app.route('/webhook/shopify/orders', methods=['POST'])
def shopify_order_webhook():
shopify_order = request.json
order_id = create_odoo_order_from_shopify(shopify_order)
return {"odoo_order_id": order_id}, 200