Installs into .claude/skills of the current project.
Are you the author of Odoo Shopify Integration?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/huytran1120-odoo-shopify-integration)
---
name: odoo-shopify-integration
description: "Connect Odoo with Shopify: sync products, inventory, orders, and customers using the Shopify API and Odoo's external API or connector modules."
risk: critical
source: community
date_added: "2026-03-04"
---
# 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 evaluating a connector and designing a custom integration. Verify each connector's actual publisher, support, license and version compatibility; do not assume an official Enterprise connector. Select Shopify and Odoo API versions supported by the deployed systems before implementation.
## 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
1. **Activate**: Mention `@odoo-shopify-integration` and describe your sync scenario.
2. **Design**: Receive the data flow architecture and field mapping.
3. **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 (draft; reviewed confirmation)
Customer ───────push──────> res.partner (created if new)
Fulfillment <──────push────── Delivery Order validated
```
## Examples
### Example 1: Safe order-import procedure
Implement these steps in an authorized test database before writing production data:
1. Authenticate to Odoo with a dedicated least-privilege integration account;
load secrets from approved secret storage, never inline them in source.
2. Validate the webhook as below before parsing or trusting order/customer fields.
3. Store a unique mapping of shop + Shopify order ID to Odoo order ID. Enforce it
transactionally so retries and concurrent deliveries cannot create duplicates.
4. Resolve customers and variants from durable external-ID mappings. Email and
SKU are optional, editable and potentially non-unique; missing or ambiguous
mappings go to review rather than choosing the first match.
5. Validate quantities, currency, discounts, taxes, shipping, refunds and company
context. Reconcile totals with Shopify; do not blindly convert prices to binary
floats or rely on Odoo defaults for fiscal treatment.
6. Create a draft sale order. Confirm, invoice or fulfill only under the selected
business policy and granted authority. Track failures and reconcile later events.
### Example 2: Authenticate an HTTPS webhook before processing (Python)
This helper illustrates raw-body authentication only; it is not a deployable
receiver or a complete idempotent queue. The receiver must enforce a body-size
limit, expected shop/topic and payload schema, then durably enqueue verified
messages with delivery/order deduplication before returning success.
```python
import base64
import hashlib
import hmac
def valid_shopify_hmac(raw_body: bytes, supplied_header: str, app_secret: bytes) -> bool:
expected = base64.b64encode(
hmac.new(app_secret, raw_body, hashlib.sha256).digest()
)
return bool(app_secret) and bool(supplied_header) and hmac.compare_digest(
expected, supplied_header.encode("utf-8")
)
# In the receiver: read the original request bytes before any JSON parsing.
# Reject invalid/missing X-Shopify-Hmac-SHA256 with HTTP 401.
# Only after verification: parse and validate JSON, then durably enqueue it.
# Store X-Shopify-Webhook-Id under a unique constraint to deduplicate delivery.
```
See [Shopify webhook verification and duplicate handling](https://shopify.dev/docs/apps/build/webhooks/verify-deliveries). Use the same app secret that signed the delivery; do not log it or full customer payloads.
## Best Practices
- ✅ **Do:** Use Shopify's **webhook system** for real-time order sync instead of polling.
- ✅ **Do:** Reconcile shop-scoped variant mappings; enforce any SKU uniqueness assumption explicitly before using it as a secondary key.
- ✅ **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.
- Maintain explicit Shopify variant-to-Odoo variant mappings scoped to the shop. Use SKUs only after checking uniqueness and handling changes; neither a product ID nor a SKU alone identifies all cross-system variants.
## 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.