Sync Odoo and Shopify Product Catalogs and Orders
Guides AI assistants to sync Odoo and Shopify: product catalogs, real-time inventory, orders, and customers via official connector or custom REST/XMLRPC APIs.
Why it matters
Automate the synchronization of your Odoo product catalog, inventory, orders, and customer data with Shopify. This integration ensures real-time data consistency between your e-commerce platform and backend ERP.
Outcomes
What it gets done
Sync product catalog and variants between Odoo and Shopify.
Automate Odoo sales order creation from Shopify purchases.
Maintain real-time inventory level synchronization.
Push customer data from Shopify to Odoo.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-odoo-shopify-integration | bash Capabilities
What this skill does
Moves and transforms data between systems on a schedule.
Keeps CRM records up to date with the latest interactions.
Writes source code or scripts from a description.
Writes and executes SQL or NoSQL queries on databases.
Overview
Odoo Shopify Integration
What it does
This skill provides data flow architecture, field mappings, and code snippets for syncing Odoo with Shopify-covering product catalogs, inventory levels, orders, and customer data through either the official Odoo Shopify connector or custom REST/XMLRPC APIs.
How it connects
Use when selling on Shopify while managing inventory in Odoo, automatically creating Odoo sales orders from Shopify purchases, keeping Odoo stock levels in sync with Shopify product availability, or mapping Shopify product variants to Odoo product templates.
Source README
Odoo ↔ Shopify Integration
Overview
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.
When to Use This Skill
- Selling on Shopify while managing inventory in Odoo.
- Automatically creating Odoo sales orders from Shopify purchases.
- Keeping Odoo stock levels in sync with Shopify product availability.
- Mapping Shopify product variants to Odoo product templates.
How It Works
- Activate: Mention
@odoo-shopify-integrationand describe your sync scenario. - Design: Receive the data flow architecture and field mapping.
- Build: Get code snippets for the Shopify webhook receiver and Odoo API caller.
Data Flow Architecture
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
Examples
Example 1: Push an Odoo Sale Order for a Shopify Order (Python)
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
Example 2: Shopify Webhook for Real-Time Orders
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
Best Practices
- ✅ Do: Use Shopify's webhook system for real-time order sync instead of polling.
- ✅ Do: Match products using SKU / Internal Reference as the unique key between both systems.
- ✅ Do: Validate Shopify webhook HMAC signatures before processing any payload.
- ❌ Don't: Sync inventory from both systems simultaneously without a "master system" - pick one as the source of truth.
- ❌ Don't: Use Shopify product IDs as the key - use SKUs which are stable across platforms.
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.
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.