CoreviaFlowCOREVIAFLOWDIGITAL PROJECT COMPANY Leave a request
EN UA RU

Odoo ↔ Shopify integration

Shopify orders arrive in Odoo as sales orders with the customer and lines, and products, prices, stock and shipments from Odoo go back to the store

The store runs on Shopify, while the warehouse, purchasing and sales team work in Odoo. Between them someone retypes every order, stock in the store is updated by hand once a day, and a product that ran out yesterday is still being sold today. The Odoo ↔ Shopify pair brings each store order into Odoo as a sales order the moment it is placed, sends products, prices and stock from Odoo to the store, and marks the store order fulfilled with the tracking number when the warehouse ships it. Below: what exactly moves, which scenarios we cover and which capabilities of both systems we rely on.

What moves between the systems

  • Shopify → OdooA new store order arrives in Odoo as a sales order with line items, quantities, discounts, shipping, delivery address and payment status, and the customer is found by e-mail or created anew.
  • Shopify → OdooCancellations and refunds in the store update the same Odoo sales order, so the warehouse does not ship a cancelled order and the accountant sees the real state.
  • Odoo → ShopifyProducts from Odoo are created or updated in the store as products and variants with name, description, options and SKU, so the catalogue is maintained in one place.
  • Odoo → ShopifyThe price from the chosen Odoo price list is written to the store on a schedule, so the store price and the price list agree.
  • Odoo → ShopifyStock on hand by the agreed Odoo warehouses goes to the matching store locations, so a variant that ran out stops being sold without anyone touching the store.
  • Odoo → ShopifyWhen the delivery is validated in Odoo, the store order is marked fulfilled with the carrier and tracking number, and Shopify sends its usual shipping notification to the buyer.

What we connect

  • We check the Odoo edition and plan first: outside access must be included, and a cloud account needs a locally set password or an access key for the exchange user.
  • In Odoo the administrator creates a separate user for the exchange with an access key and rights only to sales, contacts, products and inventory; the key can be revoked at any time.
  • In Shopify the owner creates a custom app for this store through the Shopify developer dashboard, with access limited to products, inventory, orders and fulfilments; access can be revoked at any time.
  • We subscribe to store events for orders, cancellations and refunds, so they reach the exchange right away; every delivery is checked by its signature and repeats are filtered out before anything is written to Odoo.
  • We map the catalogues: which Odoo product is which store product and variant by SKU, which price list and warehouses feed which store locations, and which Odoo delivery state means «fulfilled» in the store. Each field has exactly one master.
  • We test on a Shopify development store and a copy of the Odoo database with a handful of products and test orders, check the result with the warehouse, and only then switch the exchange to the live systems.

Automation scenarios

01

Every order retyped by hand

Before a manager copies each Shopify order into Odoo, gets an address or quantity wrong now and then, and the warehouse ships what was typed.

After the order is in Odoo as a sales order the moment it is placed, with the lines exactly as the customer ordered.

02

Sold out but still on sale

Before Odoo shows zero on hand, but the store keeps taking orders until someone updates the quantity at the end of the day.

After stock from Odoo reaches the store within minutes, and the variant shows as sold out on time.

03

Two prices for one product

Before the price list is updated in Odoo, the store keeps the old price, and the sales team and the website quote differently.

After the price from the chosen Odoo price list goes to the store on schedule, and there is one price everywhere.

04

“Where is my parcel?”

Before the warehouse ships from Odoo, the store order stays unfulfilled, and customers write to ask where their parcel is.

After the validated delivery marks the store order fulfilled with the tracking number, and the buyer gets Shopify's shipping notification.

How it works technically

For those who want to check: each point links to the official documentation page it comes from.

  • Almost all Odoo data and features are reachable from outside for connecting or analysis; part of that is available over XML-RPC from a variety of programming languages.

    Source: www.odoo.com ↗ checked 2026-09-25
  • Outside data access is only available on custom-priced plans — it isn't available on the entry-level single-app plan or on the standard plan.

    Source: www.odoo.com ↗ checked 2026-09-25
  • Since version 14.0, Odoo supports access keys that can replace a password in scripts, while the account's regular sign-in stays the same.

    Source: www.odoo.com ↗ checked 2026-09-25
  • The orders query returns the store's orders with status, customer and line items, and Shopify itself suggests using it to automate fulfillment workflows.

    Source: shopify.dev ↗ checked 2026-09-27
  • An app can subscribe to store events (webhook topics) and receive data about them in near real time, instead of polling the store.

    Source: shopify.dev ↗ checked 2026-09-27
  • If the receiver doesn't respond, Shopify retries the delivery 8 times over the next 4 hours; after 8 consecutive failures an API-created subscription is deleted.

    Source: shopify.dev ↗ checked 2026-09-27

Limits

The limits come from both systems. Outside access is not included in every Odoo plan: it is available only on custom-priced plans, not on the entry-level single-app plan or the standard plan, and a cloud account needs a dedicated password or access key; we check this before anything else. Odoo does not push events by itself in this setup, so products, prices and stock go to the store on a schedule of minutes, not instantly. Shopify meters requests by the store's plan, so a large catalogue is loaded in portions; if our side does not answer, Shopify retries for a few hours and then drops the subscription, and the exchange watches for this and re-reads missed orders on the next pass. Each field has one master, so a price changed by hand in the store is overwritten from Odoo on the next pass.

How to start

Three steps from a first message to work on your project.

  1. 01

    Leave a request

    Describe the task in the form — in text or by voice. Budget and timing are optional.

  2. 02

    We review and estimate

    A developer studies the brief, asks about anything unclear and sends an estimate.

  3. 03

    We start

    Once scope and price are agreed, the work begins.

or write to info@coreviaflow.space

Questions

Why not run the shop inside Odoo instead?
That is your choice. If the store already lives on Shopify with its design, apps and checkout, moving it is a separate project with its own risk. The pair lets the warehouse and sales work in Odoo today without touching the store; if you later move the shop, the exchange is simply switched off.
Our Odoo is self-hosted, not the cloud version. Does it matter?
It makes things simpler: no cloud plan check and no separate cloud password are needed. We only need the exchange user with an access key and a network route from our side to your server.
Our store already has an app that syncs inventory. Will they conflict?
They would if both wrote stock. Stock has one master, so we agree at the start: either Odoo takes over stock and the other app stops writing it, or that app keeps stock and the pair carries only orders, products and prices.

Tell us what needs to be connected

Describe the task in text or a voice message. We look at your setup and reply with a plan.