Odoo + Shopify Sync: Products, Orders, and Inventory

Complete guide to syncing Odoo 19 with Shopify. Covers product sync, real-time order import, bidirectional inventory, financial reconciliation, and multi-store management.

E
ECOSIRE Research and Development Team
|March 19, 20269 min read2.1k Words|

Odoo + Shopify Sync: Products, Orders, and Inventory

Shopify powers over 10% of all US eCommerce revenue. For businesses using Odoo 19 Enterprise as their operational backbone and Shopify as their customer-facing storefront, keeping both systems synchronized is non-negotiable — disconnected systems mean inventory errors, order processing delays, and accounting headaches.

This guide covers the complete Odoo-Shopify integration: architecture decisions, product catalog synchronization, real-time order import, bidirectional inventory management, Shopify Payments reconciliation, and multi-store management.

Key Takeaways

  • Shopify's REST and GraphQL APIs both supported; GraphQL preferred for Shopify Plus
  • Product sync is bidirectional: create in Odoo → publish to Shopify, or import from Shopify
  • Inventory sync is event-driven: triggers on every stock movement in Odoo
  • Orders webhook from Shopify to Odoo delivers near-instant order import (< 30 seconds)
  • Shopify Payments reconciliation handles payouts, fees, and refunds automatically
  • Multi-location inventory syncs to Shopify's multi-location feature
  • Shopify Plus B2B (wholesale) catalogs link to Odoo's pricelists
  • Returns flow from Shopify to Odoo RMA with automated stock adjustment

Integration Architecture

API approach:

The integration uses Shopify's REST Admin API for most operations and webhooks for event-driven updates:

  • REST API: product CRUD, order read, inventory management
  • GraphQL API: bulk operations (large catalog export), B2B pricing (Shopify Plus)
  • Webhooks: real-time order creation, order update, refund creation, inventory level update

Connection topology:

Odoo 19 (ERP Backend)
    ↕ Product, Inventory, Price
Shopify Admin API / Webhooks
    ↕ Real-time events
Shopify Storefront (Customer-facing)

Authentication:

Shopify uses private app API keys or custom app OAuth:

  • Private App: simpler, recommended for single-store integrations
  • Custom App (OAuth): required for Shopify App Store distribution or multi-store management

For the ECOSIRE connector, configure a Custom App in Shopify's Partner Dashboard.


Shopify App Configuration

Step 1: Create a Custom App in Shopify

  1. Go to your Shopify admin → Settings → Apps and Sales Channels
  2. Click Develop Apps → Create an App
  3. Set the app name (e.g., "Odoo Integration")
  4. Configure API scopes:
    read_products, write_products
    read_orders, write_orders
    read_inventory, write_inventory
    read_shipping, write_shipping
    read_customers, write_customers
    read_fulfillments, write_fulfillments
    read_locations
    read_price_rules, write_price_rules
    
  5. Set webhook URL: https://your-odoo.com/shopify/webhook
  6. Install the app → copy Admin API Access Token

Step 2: Configure in Odoo

Navigate to Sales → Shopify or Inventory → Shopify Stores:

FieldValue
Store NameYour store name
Shopify Domainyourstore.myshopify.com
Admin API TokenFrom custom app
API Version2024-10 (latest stable)
Webhook SecretAuto-generated, used to verify webhooks
Default WarehousePrimary warehouse for Shopify orders
CurrencyStore currency
CompanyOdoo company for this store
Payment JournalShopify Payments journal
Refund JournalShopify Refunds journal
Order Prefixe.g., "SHO-"

Step 3: Register webhooks

After saving the configuration, click Register Webhooks. The connector subscribes to:

  • orders/create
  • orders/updated
  • orders/paid
  • orders/fulfilled
  • orders/partially_fulfilled
  • orders/cancelled
  • refunds/create
  • inventory_levels/update
  • products/update

Product Catalog Synchronization

Sync direction options:

ModeDescriptionUse Case
Odoo → ShopifyOdoo is master, Shopify is displayNew products created in Odoo ERP first
Shopify → OdooShopify is master, Odoo is slaveExisting Shopify store, adding Odoo
BidirectionalChanges in either system sync both waysRare; risk of conflicts

Recommended: Odoo → Shopify for new deployments. Odoo's product master provides richer data (purchase info, costing, BOM) that Shopify doesn't need.

Product field mapping:

Odoo FieldShopify Field
Product NameTitle
Sales DescriptionBody HTML
Product CategoryProduct Type
TagsTags
List PricePrice
Compare-at PriceCompare At Price
Barcode (EAN)Barcode
WeightWeight
Product ImagesImages
Sales OKPublished (true/false)
Product Type (service/storable)Requires Shipping

Variant synchronization:

Shopify supports up to 3 product options (Color, Size, Material) with a maximum of 100 variants per product. The connector maps Odoo's product attributes:

  1. Odoo product.template → Shopify Product
  2. Odoo product.product (variants) → Shopify Variants
  3. Odoo attribute values → Shopify option values

Bulk catalog sync:

For initial setup with large catalogs (1000+ products):

  1. Navigate to Shopify → Catalog → Bulk Sync
  2. Select product categories to sync
  3. Run the bulk sync job (background process)
  4. Monitor progress in the sync log
  5. Review and resolve any mapping errors

Order Management

Real-time order import via webhooks:

When a customer places an order on Shopify, the orders/create webhook fires within seconds. The connector:

  1. Receives webhook payload from Shopify
  2. Verifies webhook signature (HMAC-SHA256)
  3. Creates a sale order in Odoo immediately
  4. Returns 200 OK to Shopify (prevents retry)

The end-to-end time from Shopify checkout to Odoo sale order: typically 3-15 seconds.

Order data mapping:

Shopify FieldOdoo Field
Order IDReference (with prefix)
Customer Nameres.partner name
Customer EmailPartner email
Billing AddressInvoice address
Shipping AddressDelivery address
Line ItemsSale order lines
Discount CodesDiscount lines
Shipping MethodDelivery carrier
Shipping CostDelivery fee line
Total TaxTax lines
Financial StatusPayment state
Fulfillment StatusDelivery status
NotesCustomer notes
TagsInternal tags

Custom order fields:

For Shopify Plus merchants with custom checkout attributes:

  • Map Shopify order note attributes to Odoo custom fields
  • Example: "PO Number" attribute → x_purchase_order_number on sale order
  • Example: "Gift Message" → note on sale order

Order processing workflow:

After import, the connector manages the order through Odoo's standard workflow:

  1. Sale order confirmed
  2. Delivery order created in Odoo WMS
  3. Warehouse picks, packs, ships
  4. Delivery validated in Odoo (tracking entered)
  5. Connector sends fulfillment to Shopify with tracking number
  6. Shopify marks order as "Fulfilled" and emails customer

Partial fulfillments:

Shopify supports orders with multiple fulfillments (ship what's available now, rest later). The connector handles:

  • Partial delivery in Odoo → partial fulfillment sent to Shopify
  • Shopify shows partial fulfillment status to customer
  • Remaining items create a separate delivery when stock available

Inventory Synchronization

Bidirectional inventory sync:

Inventory flows in both directions to maintain accuracy:

Odoo → Shopify (primary direction):

  • Every stock move in Odoo triggers an inventory level update to Shopify
  • Available quantity = On-hand - Reserved - Safety Stock
  • Updates via Shopify's Inventory Level API

Shopify → Odoo (fallback):

  • If Shopify inventory is adjusted manually (admin or app), webhook fires
  • Connector creates an Odoo inventory adjustment with audit note

Shopify multi-location:

Shopify's multi-location feature tracks inventory per physical location. Map Odoo warehouses to Shopify locations:

Odoo WarehouseShopify Location
Main WarehouseMain Location
East Coast DCEast Coast Location
West Coast DCWest Coast Location
Drop ShipperSupplier Location

The connector pushes per-location quantities to Shopify based on the warehouse-location mapping.

Inventory accuracy safeguards:

  • Safety stock buffer prevents Shopify from showing all available inventory
  • Out-of-stock handling: when quantity reaches 0, Shopify inventory = 0 (not negative)
  • Continue selling when out of stock: configurable per product (some sellers allow backorders)

Shopify Payments Reconciliation

Shopify Payments fee structure:

PlanOnline RateIn-Person Rate
Basic2.9% + 30¢2.7%
Shopify2.6% + 30¢2.5%
Advanced2.4% + 30¢2.4%
Plus0.2% (Shopify Payments)0.2%

Payout reconciliation:

Shopify Payments remits to your bank account every 2-3 business days. The connector imports payout data:

  1. Download Shopify Payments payout report (or via API)
  2. Import via Shopify → Finance → Import Payout
  3. Connector creates journal entries:
    • Revenue (net sale amounts per order)
    • Shopify Fees expense (payment processing)
    • Refunds adjustments
    • Net payout receivable
  4. When bank transfer arrives: reconcile against Shopify Payments journal

Handling Shopify refunds:

When a refund is processed in Shopify:

  1. refunds/create webhook fires
  2. Connector creates a credit note in Odoo against the original invoice
  3. If stock was returned (restocked): creates a return transfer
  4. Posts credit note → balance cleared against customer account

Shopify Plus B2B Integration

Shopify Plus includes B2B features (wholesale catalogs, payment terms, net payment). The connector integrates these with Odoo's B2B pricing:

Company and catalog mapping:

Shopify B2BOdoo Equivalent
Companyres.company (or customer segment)
CatalogPricelist
Payment TermsPayment terms on sale order
Draft OrdersQuotations (sale.order in draft)

Sync B2B pricing:

  1. Create a Shopify B2B catalog in the connector
  2. Link to an Odoo pricelist
  3. Assign to Shopify B2B companies
  4. Price changes in Odoo pricelist → automatically pushed to Shopify B2B catalog

Multi-Store Management

For brands operating multiple Shopify stores (regions, brands, wholesale vs. retail):

Multiple store configurations:

Create separate connector configurations for each Shopify store:

  • Different API credentials per store
  • Store-specific product visibility (some products in all stores, some in specific)
  • Store-specific pricing (regional pricing, wholesale vs. retail)
  • Store-specific inventory allocation

Inventory allocation across stores:

Available for Store A = On-Hand - Reserve for Store B - Reserve for Store C - Safety Stock

Configure allocation rules to prevent overselling when multiple stores draw from the same inventory.


Frequently Asked Questions

How does the connector handle Shopify's product metafields for custom data?

Shopify metafields store custom data on products, orders, and customers. The connector maps specific Odoo fields to Shopify metafields. For example, map Odoo's x_care_instructions field to a product.care_instructions metafield. Configure metafield mappings in the connector's advanced settings per resource type.

Can the connector handle Shopify's subscription products (Shopify Subscriptions or ReCharge)?

Standard Shopify subscription orders import as regular orders in Odoo. For ReCharge subscriptions, recurring orders fire as individual orders/create webhooks and import normally. The connector does not manage the subscription lifecycle in Shopify — it processes each order regardless of whether it's subscription-generated or one-time.

What happens if the Odoo server is down when a Shopify webhook fires?

Shopify retries failed webhooks up to 19 times over 48 hours. The connector processes the webhook when Odoo recovers, and the order imports. For mission-critical reliability, configure Odoo with redundant infrastructure (load balancer + multiple workers) and monitoring alerts for downtime. The 48-hour retry window provides a buffer for planned maintenance.

Does the connector support Shopify Markets (multi-currency international selling)?

Yes. Shopify Markets allows selling in multiple currencies from a single store. The connector imports orders in the buyer's checkout currency and creates sale orders in that currency in Odoo. Currency conversion uses the exchange rate at the time of order import. Configure separate pricelists per Shopify Market in Odoo for accurate local pricing.

How do I handle Shopify gift cards in Odoo?

Shopify gift cards appear as a payment method on orders. The connector creates a separate payment line for the gift card portion of each order. Configure a "Shopify Gift Cards" liability account in Odoo. When a gift card is sold (via a gift card product), the revenue is deferred. When redeemed on an order, the liability is cleared and revenue recognized.


Next Steps

A well-executed Odoo-Shopify integration becomes invisible — it just works, keeping both systems synchronized without manual intervention. The ECOSIRE team has built Shopify-Odoo integrations for everything from D2C brands processing 50 orders/day to enterprise retailers handling 10,000 orders/day.

Contact ECOSIRE About Your Shopify-Odoo Integration →

Explore ECOSIRE's Shopify Services →

Share your store details and current pain points and our team will scope a Shopify-Odoo integration that eliminates the gaps between your ERP and your storefront.

E

Written by

ECOSIRE Research and Development Team

Building enterprise-grade digital products at ECOSIRE. Sharing insights on Odoo integrations, e-commerce automation, and AI-powered business solutions.

Chat on WhatsApp