Skip to Content

Shopify Inventory Connector

One-way inventory synchronization from Odoo to a Shopify store using the Shopify GraphQL Admin API.
$ 39.88 $ 39.88
₹ 39.88

  • Versions
  • Technical Name
  • License
  • Lines of code
Technical Name: md_shopify_inventory_connector
License: OPL-1
Lines of code: 1561
mindphin-logo mindphin-silver-logo
Enterprise Odoo.sh

Shopify Inventory Connector

heading

Keep Odoo as your absolute source of truth for stock quantities. This module automatically synchronizes Odoo's "Free to Use" inventory quantities to your Shopify store variants in real-time or scheduled runs, avoiding stock discrepancies and ensuring seamless store operations.

Key Features

heading
One-Way Sync (Odoo -> Shopify)

Odoo is treated as the master. Inventory levels are pushed to Shopify; Shopify sales/adjustments never overwrite Odoo quantities.

SKU-Based Auto Matching

Variant matching is performed using an exact, case-sensitive match between Odoo's Internal Reference and Shopify's Variant SKU.

Scheduled and On-Demand Sync

A background cron action automatically checks and syncs stock every 4 hours by default (which can be customized to any interval you prefer), and a "Sync Inventory Now" button permits immediate full reconciliation.

Aggregate "Free to Use" Stock

Aggregates and syncs Odoo's total Free to Use quantity across all stock locations. Clamps negative stock counts to zero.

Efficient Change-Only Sync

The scheduled task only calls Shopify APIs for variants whose quantities changed since the last sync baseline, saving API limits.

Live SKU Re-verification

Always verifies SKUs live against Shopify before making an update, preventing drift if SKUs are renamed in Shopify.

Detailed Sync Logs & Retries

Keeps detailed lines for Updated/Failed runs. Features a "Retry Failed" button to re-run only failed lines with fresh stock levels.

Concurrency & Advisory Locking

Uses database-backed locks to prevent multiple manual or scheduled sync jobs from overlapping and corrupting data.

Secure GraphQL Integration

Integrates securely using OAuth Client Credentials, auto-renewing access tokens without needing manual token management.

1. Sync Direction & Scope

This connector syncs inventory one way only: Odoo → Shopify. Odoo is always the source of truth for stock quantity. The connector never reads inventory back from Shopify, and it never creates, imports, or modifies Shopify products, orders, or customers — it only updates the available quantity of variants that already exist on both sides.

2. Product Matching (SKU-based)

Matching happens at the variant level, using an exact match between:

  • Odoo's Internal Reference on the product variant, and
  • Shopify's Variant SKU.

The match is exact and case-sensitive. If the SKU doesn't exist on Shopify, or exists on more than one variant, the sync fails for that product with a specific message rather than guessing.

3. Enabling Sync Per Product variants.

Nothing syncs by default. Each product variant has a "Sync Inventory with Shopify" checkbox (Shopify Connector → Product Variants → open a variant → Shopify Inventory tab). Only checked variants are ever touched by the connector — everything else is completely ignored.

The Product Variants menu only appears once Odoo's own Variants feature is turned on (Inventory or Sales → Configuration → Settings → check Variants), as shown in the first screenshot below. Once enabled, the menu shows up under Shopify Connector, as shown in the second screenshot.

By checking the "Sync Inventory with Shopify" option on Odoo product variants and ensuring that the variant SKU on Shopify matches Odoo's Internal Reference (as shown in the screenshot below), you activate the connector for specific variants. This gives you complete control over which products sync and which are ignored.

Enable Variants in Settings

Odoo Settings — Enable the Variants Feature

Product Variants Menu

Shopify Connector Product Variants Menu

Shopify Inventory Tab

Product Variant — Shopify Inventory Tab

4. How the Quantity is Calculated

The quantity sent to Shopify is Odoo's Free to Use quantity, combined across every warehouse and internal stock location. It is not forecasted quantity and it doesn't include incoming receipts.

If the combined free quantity is negative, Shopify receives 0 — Shopify never accepts a negative inventory count.

5. Scheduled vs Manual Sync

Scheduled Sync (Change-Only): A scheduled action runs every 4 hours by default (you can configure or change this to run at any interval you want, e.g. every hour or every 10 minutes) and processes every enabled product. To keep this fast and light on Shopify's API, it's change-only. For each product, it compares the current Odoo quantity to the last quantity Shopify confirmed receiving.

Comparison Result
Current quantity == last confirmed quantity Unchanged — no Shopify API call is made at all
Current quantity differs Updated — Shopify is updated and the new quantity becomes the baseline

Manual Full Sync: The "Sync Inventory Now" button forces every enabled product through, even if the quantity hasn't changed since the last sync. This is the tool for reconciling drift if someone manually edited a quantity directly in Shopify.

6. Common Failure Reasons

Message Cause / Resolution
Odoo Internal Reference is missing. Sync is enabled on a variant with no Internal Reference set. Assign an Internal Reference.
No Shopify product variant found with SKU "...". No variant on Shopify has that exact SKU. Update the SKU on Shopify or Internal Reference in Odoo.
Multiple Shopify variants found with SKU "...". More than one Shopify variant shares that SKU — the connector refuses to update to prevent corrupting stock. Resolve the duplicated SKU on Shopify.
Shopify inventory tracking is disabled for this variant. The Shopify variant has "Track quantity" turned off. Enable tracking in the Shopify variant settings.
Inventory item is not available at the selected Shopify location. The variant exists but isn't stocked/activated at the connector's chosen location in Shopify. Add it to the location in Shopify.
Unable to authenticate with Shopify... Client ID/Secret are wrong, or the app isn't installed/released properly. Check the credentials and connection.

7. Boundaries & Limits (Out of Scope)

  • No Shopify → Odoo sync. It's strictly Odoo → Shopify.
  • No importing or syncing of Shopify orders, customers, refunds, or deliveries.
  • No syncing of product information (price, title, description, images). Only the inventory quantity.
  • Never auto-creates a product on either side.
  • Supports one Shopify store and one Shopify location only.

Shopify App Setup & Integration Guide

Follow these step-by-step instructions in order to create the Shopify app, install it on your store, and get the values Odoo needs: Shop Domain, Client ID, and Client Secret.

A. Create the Shopify Custom App

1

In your Shopify admin portal, click on Settings (located at the bottom-left of the sidebar).

Settings link in the Shopify admin sidebar
2

Click on the Apps option in the settings menu.

Apps link in Settings
3

Click the Develop apps button (top right corner) to access the developer dashboard.

Develop apps button
4

Press the green Build apps in Dev Dashboard button.

Build apps in Dev Dashboard button
5

Click the Create app button at the top right corner.

Create app link
6

Provide a recognizable name for the app (e.g. "Odoo Inventory Connector") and click Create.

App name field and Create button
7

On the App Creation screen, configure the following options:

  • App URL: Keep the default placeholder URL (this integration runs in the background and has no embedded UI).
  • Uncheck "Embed app in Shopify admin".
  • Preferences URL: Leave it empty.
  • Webhooks API version: Keep the default.
Embed app in Shopify admin checkbox

Next, under the API access section, paste the following scope line exactly into Scopes:

read_products,read_inventory,write_inventory,read_locations

Scopes field
8

Click the Release button in the top right corner.

Release button
9

In the confirmation dialog, leave the Version name and Version message fields empty, then click the red Release button to confirm.

Release this new version dialog

B. Retrieve Client Credentials

10

Go to the Settings tab on the left-hand sidebar of the app's development dashboard. Under Client Credentials, you will find your Client ID and Client Secret. Use the copy button to capture these values safely.

Client ID and Secret in app settings

C. Install App on Shopify Store

11

Click the app name at the top-left sidebar (e.g. "Connector") to navigate back to the main app dashboard page.

App name link at top of sidebar
12

Click the green Install app button at the top-right corner.

Install app button
13

Select the store you wish to install the integration on.

Store selection screen
14

Review permissions and click Install to complete the process.

Install confirmation screen
15

You will land on a page displaying "Example Domain". This is expected and verifies that the app is installed successfully. You can now close this tab.

Example Domain placeholder page

D. Find the Shopify Shop Domain

16

Head back to the main Settings page of your Shopify admin portal (step 1).

Settings link in the Shopify admin sidebar
17

Click on the Domains section.

Domains link in Settings
18

Locate the domain ending in .myshopify.com. If multiple are listed, copy the one matching your active store handle shown in the browser address bar (admin.shopify.com/store/<handle>/...).

Domains list with correct domain

E. Configure & Authenticate in Odoo

19

In Odoo, navigate to Shopify Connector → Configuration.

20

Paste the three retrieved values into the matching fields:

  • Shop Domain — the `.myshopify.com` domain.
  • Client ID — from step 10.
  • Client Secret — from step 10.

Save the changes, and click Test Connection. Once successful, click Fetch Shopify Locations to load and select your active Shopify location.

Congratulations! Your Shopify Inventory Connector is fully configured. The connector will now automatically manage background stock refreshes.

Yes, the Shopify Inventory Connector works flawlessly with Odoo Enterprise editions, as well as on Odoo.sh.
The sync runs in the background every 4 hours via a scheduled cron task by default (which can be customized or changed to any frequency you want, e.g. every 1 hour or 10 minutes). Additionally, you can trigger an immediate, on-demand synchronization at any time using the "Sync Inventory Now" button.
It calculates and syncs the Odoo "Free to Use" quantity across all stock locations. If the stock level drops below zero, the connector automatically clamps the value to 0 when transmitting to Shopify.
No. The scope of this specific connector is strictly focused on available inventory quantities to avoid race conditions. Catalog details and sales orders must be managed or integrated separately.
The connector matches variants using an exact, case-sensitive lookup between Odoo's Internal Reference and Shopify's Variant SKU. Fuzzy matching or name-based matching is not supported to ensure absolute data reliability.
Odoo generates a detailed log showing the exact reason for the failure (e.g. missing SKU, disabled tracking on Shopify). You can easily resolve the underlying issue and click "Retry Failed" on the log to update only the failed items.

Version 19.0.1.0 | Released on : 14th August 2026

Upgrade Migrated and fully compatible with Odoo 19.0.

Professional Support

Need help with configuration, experiencing integration issues, or want to request custom features? Our team of Odoo experts is here to assist. Please email us directly at support@mindphin.com.

heading
mindphin-logo