| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Invoicing (account) • Sales (sale_management) • eCommerce (website_sale) • Discuss (mail) • Website (website) |
| Lines of code | 5763 |
| Technical Name |
baseup_shopify |
| License | OPL-1 |
| Website | https://www.baseuplabs.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Invoicing (account) • Sales (sale_management) • eCommerce (website_sale) • Discuss (mail) • Website (website) |
| Lines of code | 5763 |
| Technical Name |
baseup_shopify |
| License | OPL-1 |
| Website | https://www.baseuplabs.com |
Shopify Connector
This module requires an active Shopify store with Admin API access. You will need:
- A Shopify store (any paid plan)
- An app created in the Shopify Dev Dashboard (legacy custom apps deprecated as of January 1, 2026)
- The app's Client ID and Client Secret from the Dev Dashboard — the OAuth access token is obtained automatically via the built-in Connect flow
- A publicly accessible Odoo URL with valid HTTPS for webhook registration and the OAuth callback
Data is exchanged directly between your Odoo instance and your Shopify store via the Shopify GraphQL Admin API. No third-party intermediary is involved.
Overview
Shopify Connector provides a production-grade, bidirectional integration between Odoo 19 and Shopify. It synchronizes products, orders, and inventory in real time using the Shopify GraphQL Admin API, with full support for variant-level image sync, draft order bidirectional flow, multi-warehouse environments, automated cron jobs, and live webhook processing.
- Bidirectional sync: push from Odoo to Shopify and pull from Shopify to Odoo
- Variant-level image sync: push and pull per-variant images, with auto-push on save
- Draft order bidirectional flow: Odoo quotations sync as Shopify draft orders in real time
- Real-time webhooks for instant order, product, and inventory updates
- Multi-warehouse support with per-warehouse Shopify location mapping
- Concurrency-safe with advisory locks and serialization failure retries
- Configurable auto-sync: new products, price changes, images, stock adjustments
- Automatic fulfillment push when Odoo deliveries are validated
- Built on Shopify GraphQL Admin API 2026-04 for long-term compatibility
Key Features
Product Sync
- Push products from Odoo to Shopify
- Pull products from Shopify into Odoo
- Variant matching by SKU or option values
- Product image upload via staged targets
- Per-variant image push and pull
- Auto-push variant images on save; clearing removes from Shopify
- Idempotent image push — no duplicate gallery entries
- Auto-push on product create/update
- Attribute & option change detection
Order & Quotation Sync
- Import Shopify orders as confirmed Odoo sales orders
- Import Shopify draft orders as Odoo quotations
- Export Odoo quotations to Shopify as draft orders in real time
- Quotation line changes (add, edit, remove) sync instantly
- Confirming an Odoo order completes the linked Shopify draft order
- Auto-confirm paid orders from Shopify
- Incremental sync with configurable lookback
- Refund import via webhook as credit notes
- Order cancellation propagation
Inventory Sync
- Push stock quantities to Shopify locations
- Per-warehouse location mapping
- Bulk inventory sync (batched)
- Auto-push on quant changes
- Cron-based scheduled sync
- No-op detection skips unnecessary writes
Real-Time Webhooks
- 13 supported webhook topics
- HMAC-SHA256 signature verification
- Automatic webhook registration
- Echo prevention — ignores updates triggered by own outbound push
- Duplicate event deduplication by webhook ID and timestamp
- Image pulls skipped on webhooks to avoid write conflicts
Multi-Warehouse & Multi-Store
- Map Odoo warehouses to Shopify locations
- Per-location inventory quantities
- Location activation management
- Sync locations from Shopify Admin
- Multiple Shopify stores fully isolated — separate products, orders, inventory, and webhooks per store
- "Push to Shopify" wizard forces explicit store selection when multiple stores are connected
OAuth Connect
- One-click Connect to Shopify button in the account form
- OAuth Authorization Code Grant flow — browser-based, no manual token copying
- Offline access token stored automatically after authorization
- Webhook secret auto-populated from Client Secret
- Compatible with Shopify Dev Dashboard apps (2026+)
Fulfillment Push
- Auto-push fulfillments on delivery validation
- Tracking number synchronization
- Carrier name mapping
- Fulfillment status tracking
- Auto-validate Odoo deliveries on Shopify fulfill
Sync Capabilities
| Data Type | Odoo → Shopify | Shopify → Odoo | Real-Time Webhook | Scheduled Cron |
|---|---|---|---|---|
| Products & Variants | ✓ Push | ✓ Pull | ✓ products/create, update, delete | ✓ Every 30 min |
| Product Images (template) | ✓ Staged upload | ✓ On import | — | ✓ Optional |
| Variant Images | ✓ Per-variant staged upload; auto-push on save; clears on removal | ✓ On import | — | ✓ On product export |
| Inventory / Stock | ✓ Per-location | ✓ On webhook | ✓ inventory_levels/update | ✓ Optional |
| Quotations / Draft Orders | ✓ Draft order (real-time on line change) | ✓ Quotation | ✓ draft_orders/create, update | — |
| Confirmed Orders | ✓ Completes linked draft order | ✓ Sales Order | ✓ orders/create, updated, paid, cancelled | ✓ Incremental |
| Fulfillments | ✓ On Delivery | ✓ Auto-validate | ✓ orders/fulfilled | — |
| Refunds | — | ✓ Credit Note | ✓ refunds/create | — |
Technical Architecture
Design Principles
- No core modifications: All extensions use Odoo's
_inheritpattern — no core addon files are modified - Transport isolation: GraphQL transport layer is separate from business logic, making the API layer independently testable
- Concurrency safety: PostgreSQL advisory locks per product/order GID prevent race conditions between concurrent webhooks and cron jobs
- Idempotency: UUID-based idempotency keys on all mutations; no-op write detection skips unnecessary Odoo writes; variant image push detaches and deletes old media before uploading to prevent gallery duplicates
- Echo prevention: Outbound product pushes set a marker on the Shopify mapping; incoming webhooks for the same product within the echo window are silently dropped
- Webhook-safe image handling: Image pulls are skipped during webhook processing to avoid serialization conflicts with concurrent user saves
- Privacy by design: No customer PII is synced — orders use a shared "Shopify Customer" partner
Technical Requirements
Odoo Requirements
- Odoo 19.0 (Community or Enterprise)
- Modules: sale_management, website_sale, stock, product, account, delivery
- Publicly accessible URL with valid HTTPS certificate (required for webhooks)
Shopify Requirements
- Any paid Shopify plan (Basic or higher)
- An app created in the Shopify Dev Dashboard (legacy custom apps deprecated January 2026) with the following Admin API access scopes:
| Scope | Required For |
|---|---|
read_products, write_products |
Product sync |
read_inventory, write_inventory |
Inventory sync |
read_orders, write_orders |
Order sync |
read_draft_orders, write_draft_orders |
Export orders from Odoo |
read_fulfillments, write_fulfillments |
Fulfillment push |
read_locations |
Warehouse location mapping |
write_webhooks |
Webhook registration |
Python Dependencies
No additional Python packages required beyond the standard Odoo stack. The module uses the built-in requests library for all HTTP communication.
Installation Guide
-
Copy the Module
Place the
baseup_shopifyfolder in your Odoo addons path and restart the Odoo server../odoo-bin -c /path/to/odoo.conf --update=baseup_shopify -
Install from Apps Menu
Go to Apps → Update Apps List → Search "Shopify Connector" → Click Install.
-
Create an App in the Shopify Dev Dashboard
In your Shopify Admin: Settings → Apps and sales channels → Develop apps → Build apps in Dev Dashboard. Create an app, configure the required Admin API scopes, add your Odoo URL +
/shopify/oauth/callbackas an allowed redirect URL, then release and install the app on your store. Copy the Client ID and Client Secret from the app's Settings page. -
Add a Shopify Account in Odoo and Connect
Go to Shopify → Accounts → New. Enter your shop URL, Client ID, and Client Secret. Click Connect to Shopify — your browser will redirect to Shopify for authorization, then return to Odoo with the account marked as Connected and the access token stored automatically.
-
Register Webhooks
Click Register Webhooks on the account form. Odoo will automatically create all 13 required webhook subscriptions in your Shopify store. Your Odoo instance must be reachable over HTTPS for this step.
-
Map Warehouse Locations
Click Sync Locations to pull your Shopify locations and map them to Odoo warehouses in the Location Mappings tab.
-
Run Initial Sync
Click Sync All to perform the first full bidirectional sync of products, orders, and inventory.
Configuration
Global Settings
Navigate to Settings → Shopify Connector to configure system-wide defaults:
| Setting | Default | Description |
|---|---|---|
| Sync products by default | Off | Enable product syncing for all Shopify instances unless overridden per account |
| Sync orders by default | Off | Enable order syncing for all Shopify instances unless overridden per account |
| Sync inventory by default | Off | Enable inventory level syncing for all Shopify instances unless overridden per account |
| Run inventory sync in scheduled cron | Off | If disabled, the auto-sync cron skips inventory and only processes products and orders |
| Auto-push newly created products | Off | Automatically export newly created products to Shopify. Only fires when exactly one store is connected — skipped silently when multiple stores are connected to avoid ambiguous cross-store pushes. Use the "Push to Shopify" wizard to target a specific store manually. |
| Auto-update products on save | Off | Automatically export updates for already-linked products on save, including variant image changes |
| Sync batch size | 100 | Shared batch size for product, order, and inventory sync flows |
| Skip product images in bulk sync | Off | Improves performance for large sync runs; images can be synced separately afterward |
| Order sync lookback window | 1 hour | Order imports start this many hours before the last successful sync date to prevent gaps |
Typical Workflows
Shopify Order to Odoo Fulfillment
- Customer places order on Shopify storefront
- Webhook fires instantly → Odoo creates a confirmed Sales Order
- Odoo generates a delivery order and picking
- Warehouse team picks and ships the order
- Delivery is validated in Odoo → fulfillment pushed to Shopify automatically
- Tracking number synced back to Shopify order
Bidirectional Quotation / Draft Order
- Sales rep creates a Quotation in Odoo and adds products
- Connector automatically creates a matching Draft Order in Shopify
- Adding, editing, or removing quotation lines updates the Shopify draft order in real time
- Sales rep confirms the Odoo quotation → connector completes the Shopify draft order, converting it to a live order
- Alternatively, a draft order created in Shopify is pulled into Odoo as a Quotation via webhook
New Product Launch (Odoo First)
- Create product in Odoo with variants, pricing, and per-variant images
- Click Push to Shopify — a wizard appears asking which store to push to (ensures products are never accidentally pushed to the wrong store)
- Select the target store and click Push
- Product created on Shopify with all variants, gallery images, and per-variant images
- Future stock adjustments sync automatically via quant write hooks
- Changing or removing a variant image in Odoo auto-pushes the update to all stores where the product is already mapped
Inventory Reconciliation
- Enable scheduled inventory sync in Settings
- Cron job runs every 30 minutes, pushing current Odoo quantities to each mapped Shopify location
- Webhook listener detects Shopify-side inventory changes and updates Odoo quants in real time
Support & Resources
Email Support
Get help from our support team for installation, configuration, and bugs.
Contact SupportFeature Requests
Need a specific Shopify feature integrated? Reach out to discuss.
Request a FeatureLicense
This module is licensed under the Odoo Proprietary License v1.0 (OPL-1).
This module is proprietary software. You may not copy, modify, or distribute it without explicit written permission from the author. See odoo.com/documentation/legal/licenses for full terms.
Ready to Connect Odoo with Shopify?
Automate your product, order, and inventory workflows across both platforms.
Get Started TodayOdoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module