The best Odoo Shopify connector is the one that syncs both directions, runs on Shopify’s GraphQL Admin API, supports your Odoo version, and recovers on its own when a webhook is missed. Miss any of those four and you are buying a module you will replace within two years.

Techspawn’s Odoo Shopify Connector covers all four across Odoo 16 to 19, at $215.85 on the Odoo Apps Store, with multi-store support and refunds imported as credit notes.

Below is the criteria we would apply to any connector in this category, including ours then the specification, the pricing and an honest account of where a module is the wrong purchase.

What makes an Odoo Shopify connector worth buying?

Feature lists all look the same. These eight criteria are what actually determine whether an integration survives its first peak season.

Criterion Why it decides the outcome Techspawn connector
True two-way sync One-way import means stock and price still get maintained twice, by hand Products, stock, price, orders, customers, cancellations, refunds both directions
GraphQL Admin API Shopify made REST legacy in October 2024; REST-only modules are frozen GraphQL-based, tracking Shopify’s quarterly versions
Missed-webhook recovery Webhooks fail silently; orders stop arriving and nobody is alerted Webhooks for speed plus a reconciliation cron for safety
SKU mapping layer Mismatched references create a duplicate shadow catalogue Maps Shopify SKUs to Odoo internal references without mass renaming
Tax fidelity Recomputed tax drifts from what the customer actually paid Imports Shopify’s checkout tax, discount and duty lines as recorded
Partial refund handling Most refunds are partial; whole-order-only logic breaks reconciliation Credit notes against the original invoice, multi-payment supported
Multi-store on one database Regional storefronts otherwise mean separate Odoo instances Multiple stores, per-store pricelists, warehouses and journals
Current version support A module stuck two versions back blocks your next Odoo upgrade Odoo 16, 17, 18 and 19; builds back to 12

The one genuinely bidirectional row is order status, and it causes the most trouble. If your warehouse validates a delivery in Odoo and someone marks the order fulfilled in Shopify, you get double fulfillment, two tracking emails to the customer, and stock deducted twice. Pick one system for fulfilment and break the habit in the other in practice Odoo, because that is where the picking happens.

Why webhooks alone are not enough

Good connectors use Shopify webhooks so an order appears in Odoo within seconds of checkout rather than at the next scheduled run. That is the right architecture and it is also incomplete.

Webhook delivery is a best-effort. If your Odoo instance is mid-upgrade, behind a misconfigured firewall, or simply slow to respond, Shopify retries and after roughly two days of failures it can drop the subscription entirely. Odoo raises no alert, because from Odoo’s point of view nothing happened. Orders just stop arriving, and you find out from a customer asking where their parcel is.

The fix is unglamorous: keep webhooks for speed, and run a scheduled job that queries Shopify for orders in a rolling window and imports anything missing. Ours runs as a standard Odoo cron with a configurable interval per store. Ask any vendor whether they have a catch-up mechanism. If webhooks are the only path in, you are one network incident away from a gap in your revenue records.

How product and variant mapping breaks

This is the most common cause of a failed Odoo Shopify integration, and it happens in the first week.

The two platforms model products differently. In Shopify, a product holds variants and each variant carries its own SKU. In Odoo, a product.template holds variants as product.product records, each with an internal reference (default_code). The connector matches Shopify variant SKU to Odoo internal reference.

When those strings disagree, the connector finds no match, so it creates a new product. Do that across a 4,000-SKU catalogue and you get a duplicate shadow catalogue, inventory split across two records that both claim to be the same shoe, and reports that no longer reconcile.

The causes are mundane:

  • Trailing whitespace in SKUs from a spreadsheet import
  • Case differences (sku-1001 versus SKU-1001)
  • Blank Shopify SKUs, which Shopify permits and matching cannot survive
  • Legacy Odoo internal references never aligned to the storefront
  • Two Odoo products sharing one internal reference, which Odoo allows

Export both catalogues and diff the SKU columns before syncing anything. A mapping layer helps where codes genuinely differ but no module can guess which of two similar SKUs you meant. Half a day of cleanup at the start saves a fortnight of unpicking later.

How should inventory sync across Shopify locations and Odoo warehouses?

Shopify has locations. Odoo has warehouses containing a tree of stock locations. Map them explicitly or stock lands in the wrong pool and your storefront advertises inventory sitting in another country.

A second decision matters more, and most merchants make it by accident: which quantity do you publish?

  • On-hand is what you physically have. Publishing it understates availability, because stock already inbound on a purchase order stays invisible until received.
  • Forecasted includes incoming and outgoing commitments. Publishing it oversells, because Odoo counts stock a supplier has not shipped.
  • Available — on-hand minus what is reserved for other orders is usually right for a single-channel store.

If the same stock sells on Shopify, a marketplace and a physical shop, no single number is correct and you need a buffer. Reserve a fixed percentage or unit count per SKU and publish the remainder. It costs a little availability and saves the oversold-order refund cycle, which costs far more in support time and store rating damage.

What happens to taxes, discounts and refunds

This is where an integration stops being an IT project and becomes your finance team’s problem.

Taxes. Shopify calculates tax at checkout and the customer pays that figure. Odoo, left alone, recalculates from the customer’s fiscal position and its own rules and the two will not always agree, especially across US destination-based sales tax or EU distance-selling thresholds. A correct import writes Shopify’s tax lines onto the sales order as recorded rather than recomputing them. A one-cent rounding difference per order sounds trivial until you reconcile ten thousand of them against a single Shopify payout.

Discounts. A Shopify discount code has to become something in Odoo. Applying it as a percentage on the order line keeps the maths clean; posting it as a separate negative line gives your accountant a discount account to report on. Neither is wrong, but the choice shapes your P&L, so make it deliberately with whoever closes your books.

Refunds. A refund is not a deleted order. Shopify refunds should arrive as credit notes linked to the original invoice, with partial refunds supported most refunds are partial, one item from a three-item order, or shipping only. Separately, a refund may or may not restock. A returned shirt goes back on sale; a damaged one does not. If your connector restocks everything automatically, available quantity drifts upward from physical reality every month.

Which API does your connector use?

Ask this before you buy anything, from us or anyone else.

Shopify designated its REST Admin API as legacy in October 2024, and new apps must be built on the GraphQL Admin API. Existing REST integrations still function, but REST receives no new features, so capabilities Shopify has shipped since including the expanded variant model and bulk operations, exist only in GraphQL.

The practical consequence: a connector still built entirely on REST is not broken today, but it is frozen. It will gain no support for new Shopify capabilities and its vendor is carrying a rewrite they have not done.

Rate limiting also shapes day one. Shopify’s GraphQL API meters by calculated query cost against a refilling budget, so an initial import of a large catalogue is throttled by design. A 15,000-SKU first sync takes hours, not minutes and a connector that batches sensibly and resumes after a throttle is worth more than one that fires requests until Shopify refuses them. Plan the first full sync for a quiet weekend.

Running multiple Shopify stores on one Odoo database

If you operate regional storefronts US, UK, wholesale one Odoo database can serve all of them, and that is usually the right architecture. It is also where configuration gets real.

Each store needs its own price list, its own warehouse or location mapping, and its own accounting journal so payouts reconcile per store. Orders need a store identifier on the sales order, or sales reporting collapses into one undifferentiated pile. Where stores use different currencies, orders must import in the currency the customer checked out in, with conversion handled by Odoo’s rate table rather than assumed.

Our connector handles multi-store against a single backend, but the configuration is a design decision rather than a checkbox. At three or more storefronts, treat it as an Odoo implementation task with someone who has done it before.

Who this connector suits and who it does not

A strong fit if you: run one to ten Shopify stores on Odoo 16 or later, process enough orders that manual entry costs real hours, need stock accurate across channels, and want refunds and taxes landing correctly in Odoo accounting without a monthly cleanup.

Look elsewhere if:

  • Your catalogue logic is genuinely unusual. Configurable products, contract-based per-customer pricing, made-to-order items with a bill of materials resolved at checkout. Standard connectors assume a variant is a variant. If yours is not, you want custom Odoo development built around your model.
  • You are pre-launch under fifty orders a month. A monthly CSV import costs an hour and no licence fee. Buy when manual entry costs more than the module usually a few hundred orders a month, or the first mis-keyed order that ships to the wrong address.
  • Your Odoo instance is not clean yet. If the chart of accounts is provisional, warehouses are unmodelled or you are mid-migration from an older version, syncing a live storefront multiplies the mess. Fix Odoo first.

We would rather tell you this now than refund you in month three.

Setup sequence that avoids rework

  1. Reconcile SKUs first. Export both catalogues, diff the identifiers, fix at source. Nothing else works until this does.
  2. Model warehouses and map locations before any stock moves.
  3. Choose your published quantity on-hand, forecasted, or available minus buffer and write the decision down.
  4. Configure taxes and fiscal positions to accept Shopify’s checkout figures rather than recompute them.
  5. Import historical orders into a staging database first. Not production. You will find data problems and you want them somewhere disposable.
  6. Enable webhooks, then add the reconciliation cron. Both, not either.
  7. Run parallel for two weeks. Manual checks alongside the sync, compared daily, before you trust it unattended.
  8. Set up monitoring. A failed sync nobody notices is worse than no sync at all.

Steps 5 and 7 are the ones people skip, and the ones that catch expensive problems while they are still cheap.

Frequently asked questions

Which is the best Odoo Shopify connector? The best connector for your business is the one supporting your Odoo version, running on Shopify’s GraphQL Admin API, syncing both directions, and recovering from missed webhooks automatically. Techspawn’s module meets all four across Odoo 16 to 19 with multi-store and partial refund support.

How much does an Odoo Shopify connector cost? Techspawn’s is $215.85 as a one-time purchase on the Odoo Apps Store, covering the module and support from the development team. Configuration for complex multi-warehouse or multi-store setups is quoted separately.

Does it support two-way synchronisation? Yes. Products, inventory, prices, orders, customers, cancellations and refunds move in both directions, with direction configurable per data type so you can designate a source of truth.

Which Odoo versions does it work with? Odoo 16, 17, 18 and 19 are actively supported across Odoo Online, Odoo.sh and on-premise, with earlier builds available back to Odoo 12.

Can I manage multiple Shopify stores from one Odoo database? Yes. Multiple storefronts connect to a single backend with per-store price lists, warehouse mapping and journals, giving consolidated reporting without switching accounts.

Will it import my order history? Historical orders import with full detail including taxes, discounts, shipping and payments. Run it against a staging database first historical data reliably contains surprises.

Do I need a developer to install it? Installation is straightforward. Configuration is not, if you have multiple warehouses, several storefronts, or non-trivial tax positions. Those are the cases where Odoo integration support pays for itself.

Next step

If you are comparing modules, the useful step is not another feature list, it is putting your own catalogue and tax setup in front of someone who has connected a store like yours. We have shipped Odoo integrations across ecommerce, distribution and manufacturing, and maintain connectors for WooCommerce and QuickBooks where Shopify is one part of the stack.

View the Odoo Shopify Connector →  |  Book a live demo →  |  Ask our team a question →