Installable skillCC-BY-4.0

Odoo ↔ Shopify Integration

Connect Odoo with Shopify: sync products, inventory, orders, and customers using the Shopify API and Odoo's external API or connector modules.

BY Agentic Awesome Skills contributorsUPDATED Oct 26, 2026
INTENDED FOR✳Claude Code>_Codex↗CursorInstall in a listed agent.

instructions.md

---
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.
COMPATIBILITY & REFERENCES

Platform guidance

Imported SKILL.md format for Claude Code, Codex and Cursor. Review the complete instructions and required tools before use. Package integrity checked; individual agent behavior has not been tested.