Shopify–Odoo Integration · intermediate · 10 min read
Product Synchronization Best Practices
How to sync Shopify products and Odoo catalog records: SKU masters, variants, barcodes, attributes, external IDs, and conflict rules without silent duplicates.
Last reviewed 2026-07-30 · Estimated effort: 2–6 weeks typical implementation slice
Table of contents
Product sync fails when teams treat Shopify products and Odoo templates as interchangeable without a declared catalog master, variant strategy, and external ID discipline.
Best practice is to pick one system as SKU master — usually Odoo for wholesale and multi-channel estates — map Shopify variants to Odoo product variants or attribute lines, store Shopify product and variant IDs on Odoo records, and define explicit create, update, and archive rules.
Pricing, collections, and promotions rarely map 1:1. Document which side owns list price, compare-at price, and discount intent so order import preserves financial meaning in Odoo.
Catalog sync is where integration projects spend early weeks — and where duplicate SKUs surface months later during a stock reconciliation. Getting product mapping right reduces pain across inventory, orders, and reporting.
This article focuses on ERP catalog strategy, not Shopify theme product cards or collection merchandising UX.
Odoo as master suits businesses that manage purchasing, manufacturing, or multi-channel pricing in ERP first. Shopify as master suits digital-native brands that experiment with variants in Admin and only later formalize items in Odoo.
Bidirectional product creation without rules produces duplicate barcodes, conflicting titles, and orders that reference SKUs finance cannot find. Pick a master and allow controlled exceptions — for example marketplace-only SKUs created in Shopify with an auto-provision rule into Odoo.
Shopify variants map cleanly to Odoo when each variant is a distinct product.product with a unique default_code or barcode. Configurable products with Odoo attributes need explicit attribute-value mapping so new Shopify options do not spawn orphan variants.
Store Shopify product_id and variant_id on Odoo (dedicated fields or ir.model.fields) and Odoo product IDs in Shopify metafields or private app metadata when the connector supports it. Never rely on title or handle alone — they change.
- ▸One canonical SKU or barcode per sellable unit
- ▸Explicit attribute mapping table for size, color, and custom options
- ▸Archive or unpublish rules when products retire on either side
Define which fields sync on create versus update. Title and description may flow Shopify to Odoo for SEO-led brands; weight and HS code may flow Odoo to Shopify for compliance-led exports.
Archiving must be symmetric enough to prevent ghost SKUs: unpublishing in Shopify should not leave Odoo sellable on other channels unless that is intentional. Document whether delete means archive or hard remove.
List price and compare-at price can sync from Odoo pricelists or Shopify — but pick one master for base price. Shopify automatic discounts and Odoo pricelist rules interpret promotions differently; order lines must carry enough metadata for Odoo to reconstruct revenue.
When price changes are high frequency, batch sync on a schedule and use webhooks only for critical corrections — see rate limit articles before polling entire catalogs hourly.
Shopify collections are merchandising constructs; Odoo product categories support accounting and reporting. Sync only when reporting requires it. Forcing full hierarchy mirrors creates maintenance drag with little ERP value.
Use tags or metafields for lightweight cross-reference when full collection sync is overkill.
- ✓Publish a SKU and variant mapping matrix before the first production sync.
- ✓Store external IDs on both sides before enabling automated create jobs.
- ✓Run a duplicate-detection report on barcode and default_code weekly during rollout.
- ✓Separate catalog sync jobs from inventory and order jobs for clearer failure isolation.
- ✓Validate tax category and fiscal mapping for new products in staging before publish.
- ✓Consult the Customization pillar when standard product fields cannot hold required channel metadata.
- !Matching products by title or handle instead of stable external IDs.
- !Creating a new Odoo product for every Shopify variant option change.
- !Syncing list price both directions with no conflict rule.
- !Ignoring archived or draft products and leaving stale availability online.
- !Omitting weight, HS code, or country of origin needed for shipping integrations.
- !Running full catalog pulls on every cron tick and exhausting API budgets.
Product sync succeeds with a declared catalog master, stable external IDs, and explicit create-update-archive rules — not implicit hope that titles stay unique.
Once catalog mapping is stable, align inventory and order sync to the same SKU keys.
Master change
SKU / price / media updated.
Map fields
Transform to channel schema.
Push / pull
API call with idempotency.
Reconcile
Detect drift and exceptions.
- Owners named
- UAT scripts signed
- Rollback documented
- Hypercare roster ready
Frequently asked questions
Should Odoo product templates match Shopify products 1:1?
Often yes at the product level, with each Shopify variant mapping to an Odoo variant. Bundles, kits, and manufactured items may need Odoo BOM logic that does not mirror Shopify's product model — document exceptions.
How do we handle products sold only on Shopify?
Use a clear product category or flag in Odoo, auto-provision from Shopify with a defined template, and ensure they still receive inventory and order mapping like any other SKU.
What about multi-store catalogs?
Decide whether each store gets duplicate Odoo products or one product with per-store publication rules. Multi-company Odoo setups usually need company_id routing per store.
Related articles
What Is Shopify–Odoo Integration?
A practical definition of Shopify–Odoo integration: system of record, sync scope, external IDs, and how it differs from theme work or one-off CSV exports.
View →Managing Images and Media
Product image sync between Odoo and Shopify: ownership rules, URL vs binary transfer, rate limits, retries, and avoiding catalog job bottlenecks.
View →Inventory Synchronization Strategies
Stock sync between Odoo and Shopify: system of record, location mapping, reserved quantity, oversell prevention, and multi-warehouse patterns.
View →Testing an Ecommerce Integration
Structured UAT for Shopify–Odoo sync: staging stores, idempotency tests, partial fulfillments, failure injection, reconciliation validation, and go-live gates.
View →Related services
Shopify–Odoo Integration
Architecture, connectors, and operational sync for Shopify storefronts and Odoo ERP.
View →Dedicated Odoo Developer
Reserved capacity for connector fixes, mapping changes, and backlog.
View →Odoo Delivery
Implementation programmes including ecommerce connectors and sync design.
View →Untangling catalog mapping?
We help teams audit SKU masters, variant maps, and duplicate products before turning on automated sync.
