Shopify Odoo Connector: Orders, Stock, Fulfilment Sync (Miko)
by Tripster Developers https://tripsterdevelopers.com/odoo/$ 452.39
Shopify Odoo Connector: two-way sync for orders, products, customers, stock and fulfilment
Connect a Shopify store to Odoo and keep both sides in step, on a schedule. Built on the GraphQL Admin API, which Shopify has required for new apps since October 2024 and is replacing REST with, so this will not need rewriting when the REST endpoints finish being withdrawn.
Downloading the ZIP by hand? Take both: put
miko_ecommerce_core in your addons folder alongside this one, or Odoo reports an unmet dependency.Why this one
Built on GraphQL, not REST
REST product endpoints stopped supporting more than 100 variants in February 2025 and no longer get new features. A REST connector is a connector with a rewrite in it.
Direction is enforced, not suggested
Products and customers each run in, out or both. A push against a pull‑only store is refused with a reason rather than done quietly.
Totals are verified
Every imported order is checked against what Shopify actually charged. Anything that disagrees stays a quotation, flagged, with the difference spelled out.
Cost-aware throttling
Shopify limits query cost from a leaky bucket, not request count. The client reads what is left and waits for the refill rather than earning a 429 on a large catalogue.
Every call verified live
Every GraphQL document in this module was executed against a real Shopify development store on API 2025‑07, not just against test stubs.
Safe by default
Order confirmation, invoicing, stock publishing, fulfilment and the scheduler all start switched off. Shopifyâs shipping email to your customer stays off until you turn it on.
What syncs, and which way
| Records | Direction | Notes |
|---|---|---|
| Orders | Shopify to Odoo | Line discounts, shipping lines and tax lines |
| Products and variants | Either way, or both | Options become Odoo attributes; SKU and barcode carried across |
| Customers and addresses | Either way, or both | Matched on exact email, country resolved by ISO code |
| Stock levels | Odoo to Shopify | Available‑to‑promise or on hand, to a location you choose |
| Fulfilment and tracking | Odoo to Shopify | On delivery validation, on invoice posting, or whichever is first |
| Taxes | Mapped by you | Anything unmapped stops and asks rather than under‑billing |
How it works
- 1
Create the API credentials in your store
Read and write access to products, customers, orders and inventory. The exact permission list is in Requirements below. - 2
Add the store in Odoo and press Test Connection
It verifies the credentials, names the store back to you, and says exactly what to fix if anything is wrong. - 3
Import, then look at what arrived
Products, then customers, then orders. Nothing is confirmed or invoiced yet: those switches start off on purpose. - 4
Turn on the schedule and the write-back
Once you are happy with what came in, enable the scheduled sync, stock publishing and fulfilment individually.
One store, every setting in one place
You choose which way data travels
Map any Shopify field to any Odoo field
Runs on a schedule, or right now
Stock and fulfilment, back to the storefront
When something fails, you are told what to fix
Never a silent under-billing
Detailed capabilities
Orders
- Line discounts kept as discounts, so margin reports stay truthful.
- Shipping lines imported as their own line.
- Guest checkouts handled through a fallback customer you choose.
- Cancelled orders imported for the record but never confirmed.
- Order date taken from Shopify, not from the moment of import.
Products and variants
- Shopify options become Odoo attribute lines; attribute lines are only ever added, never removed, because removing one deletes variants that historical orders reference.
- A variant is matched on exact option-set equality. A near match is reported and left unlinked rather than attached to the wrong SKU.
- A barcode that already belongs to another product is skipped with a warning instead of aborting the whole catalogue.
Stock
- Available‑to‑promise by default, because publishing on hand is how the same unit gets sold twice.
- Written to one named location you choose; a store with several would otherwise have the wrong shelf updated silently.
- Items not yet stocked at that location are activated first, which Shopify requires and which every newly created product needs.
Fulfilment
- Fires when the delivery is validated, when the invoice is posted, or whichever happens first — businesses that never run Inventory need the invoice trigger.
- Tracking number and carrier passed across.
- notifyCustomer is off by default: switching it on over a backlog emails real people about orders that shipped weeks ago.
When something fails
- Failed is transient — a dropped connection, a rate limit, a 502. Retried automatically with exponential backoff.
- Needs attention means something has to change first: a tax with no mapping, a product not in Odoo, a revoked key. Never retried on a timer, because a timer cannot fix it, and each one carries the sentence saying what to do.
- Every job keeps the exact payload that caused it, so a retry replays the failure without asking the store for the data again.
- A Retry button on every job, and a dashboard filtered to what still needs a person.
Requirements
- Odoo 16, 17, 18 or 19, Community or Enterprise.
- The free E‑Commerce Connector Engine (Miko).
- A Shopify custom app token with
read_products,write_products,read_customers,write_customers,read_orders,read_inventory,write_inventory,read_locationsandwrite_merchant_managed_fulfillment_orders. - read_customers is required even if you only import orders, because an order carries its customer.
- Odoo Online cannot run third-party modules containing Python, so this needs Odoo.sh or a self‑hosted install.
Support
Email support for every version listed above, from the people who wrote it. Every release is certified against real Odoo images before it ships, and the test count is stated on this page rather than implied.
Questions
Will this break when Shopify retires the REST API?
- No. It is built on the GraphQL Admin API, which is what Shopify is moving everything to.
What happens if a sync is interrupted halfway?
- Nothing bad. Identity goes through the mapping table before anything is written, so re-running converges on the same single order rather than creating a second one.
Can I run Shopify as the master for products but Odoo for customers?
- Yes. Direction is set per record type, independently.
Which Odoo versions are supported?
- Every listed version is certified on each release by installing the module into a real Odoo image of that series and running the full test suite. A version is only listed once it passes.
Does this work on Odoo Online?
- No. Odoo Online cannot run third-party modules containing Python, which is Odoo's rule rather than ours. Odoo.sh and self-hosted installs are fine.
What does support cover?
- Installation problems, defects, and questions about how the module behaves, by email, for the versions listed on this page. Custom development and changes to Odoo core behaviour are separate work.
How do I report a problem?
- Email support@tripsterdevelopers.com with your Odoo version, the module version, and what you did. If a job failed, the job record holds the exact payload and the error, which answers most questions immediately.
Explore our other Odoo apps
E-Commerce Connector Engine
miko_ecommerce_coreWooCommerce Odoo Connector
miko_woocommerceBarcode Validator & Catalog Audit
miko_catalog_healthEmail Validation & Duplicate Contacts
miko_contact_healthMargin Control & Sold Below Cost
miko_margin_healthVendor Price Check & Supplier Audit
miko_supplier_healthMCP Server for AI
miko_mcp_serverSearch the Apps store for the technical name, or open Tripster Developers at the top of this page to see everything we publish.
Questions before you buy?
Email support@tripsterdevelopers.com and a developer who wrote this will answer, usually the same working day (New Zealand time).
Built by Tripster Developers.
Shopify is a trademark of Shopify Inc. Odoo is a trademark of Odoo S.A. This module is not affiliated with, endorsed by, or sponsored by either company; the names and logos are used only to say what it connects.
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Inventory (stock)
• Invoicing (account) • Sales (sale_management) • Discuss (mail) |
| Community Apps Dependencies | Show |
| Lines of code | 2327 |
| Technical Name |
miko_shopify |
| License | OPL-1 |
| Website | https://tripsterdevelopers.com/odoo/ |
Odoo 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