Data Sync

What Data Should Sync Between Shopify and Odoo?

A complete merchant guide to Shopify Odoo integration data sync, including products, variants, orders, customers, inventory, taxes, discounts, refunds, fulfillment, and historical data.

Start with the real question

When merchants ask what data should sync between Shopify and Odoo, they are usually asking a bigger question: which system should control which part of the business? A Shopify Odoo integration data sync is not useful just because it moves many fields. It is useful when the right records move in the right direction, with rules that match operations, accounting, fulfillment, and customer service.

Shopify is usually the ecommerce system of record. It owns checkout, customer-facing orders, storefront products, payment events, discount usage, fulfillment status for customers, and online inventory availability. Odoo is usually the operational system of record. It owns ERP workflows such as purchasing, stock operations, accounting, invoicing, warehouses, product cost, and internal reporting.

The connector should align those roles instead of blindly mirroring everything. Some data should flow from Shopify to Odoo. Some should flow from Odoo to Shopify. Some should be two-way only with careful conflict rules. Some should not sync at all.

This guide explains the main data categories merchants should plan before launch. For the broader connector strategy, read the Shopify Odoo connector guide.

Products and variants

Products and variants are the base layer of the integration. If products are not linked correctly, order sync, inventory sync, revenue reporting, and fulfillment can all become unreliable.

The connector should decide how Shopify products and variants match Odoo products. Many merchants use SKU. Some use barcode. Some use Odoo internal reference. Some need a mapping table because historical data is inconsistent. The rule should be explicit.

Variant handling matters. A Shopify product with size and color options may map to several Odoo variants. If the connector treats only the parent product as the match, orders can land in Odoo with the wrong variant. That affects inventory, picking, and product reporting.

The connector should also decide what product data moves. Title, SKU, barcode, price, image, weight, product type, vendor, tags, and metafields may matter, but not every merchant needs all of them in both systems. The safest approach is to choose a product source of truth and sync only the fields that support the operating workflow.

Shopify's official Product object documentation is useful for understanding the structure of product data on the Shopify side. Odoo has its own product and variant structure, so the connector must map rather than copy blindly.

For a product-specific workflow, use the Shopify Odoo variant sync page.

Inventory and locations

Inventory is the category where small mistakes become customer problems quickly. If Shopify shows stock that Odoo cannot fulfill, customers can buy items that are not available. If Shopify hides stock that is actually available, the merchant loses sales.

A good Shopify Odoo integration data sync should define inventory direction first. If Odoo is the operational source of truth, Odoo stock should update Shopify. If Shopify sales reduce stock in Odoo, order sync should trigger the correct stock movement or reservation pattern. If both systems can update inventory, conflict handling must be precise.

Location mapping is just as important as quantity. Shopify supports locations. Odoo supports warehouses and stock locations. A single total stock number may be misleading for multi-location businesses. The connector should map each Shopify location to the correct Odoo warehouse or location, especially when fulfillment depends on where stock sits.

Shopify documents inventory state and quantity concepts in its inventory management guide. Merchants do not need to memorize the API terms, but they should understand that inventory is not just one field.

For a deeper guide, read Shopify inventory sync with Odoo.

Orders

Orders are the most common starting point because they create the most manual work. A proper order sync should include customer details, products, variants, quantities, prices, discounts, taxes, shipping, payment context, fulfillment status, currency, and Shopify references.

The connector should decide what Odoo record is created. Some merchants want a sale order. Others want a draft invoice, confirmed sale order, receipt, or another accounting-aware outcome. There is no single correct answer. The correct answer is the one that matches how the merchant runs Odoo.

Order sync should be idempotent. Shopify may send the same event more than once. A user may retry a failed job. A historical import may overlap with live sync. The connector should use stable Shopify identifiers so the same order does not create duplicates in Odoo.

Orders should also preserve enough context for support. Odoo users should be able to see the Shopify order number or reference. If a customer calls about an order, the support team should not have to search both systems manually.

For the full order workflow, read Shopify order sync to Odoo.

Customers

Customer sync is not always as simple as "create every Shopify customer in Odoo." Some businesses need individual customer records because they manage B2B relationships, returns, invoices, or customer-level reporting in Odoo. Other businesses prefer a single ecommerce customer because they treat online retail orders as high-volume transactions and do not want thousands of low-value contacts cluttering Odoo.

Both strategies can work. The connector should support the merchant's choice. If individual customers sync, matching rules matter. Email is common but not perfect. Phone number, address, and customer ID may also help. The connector should avoid creating duplicates when a returning customer places another order.

Guest checkout also needs a rule. A Shopify guest order may not have a reusable customer account. The connector should still create a valid Odoo order or invoice using the selected customer strategy.

Customer data can affect tax, shipping, invoicing, and support workflows. That is why the decision belongs to both ecommerce and finance, not only to the person installing the connector.

Taxes

Taxes should sync as mapped accounting data, not copied text. Shopify tax lines describe what happened at checkout. Odoo tax records determine how accounting and reporting behave. The connector should map Shopify tax titles, rates, and conditions to the correct Odoo tax records.

This is especially important for stores that sell across multiple regions. A tax name like "VAT" or "Sales Tax" may not be enough. The Odoo tax record needs to match the company, country, fiscal position, included/excluded behavior, and reporting structure.

If a tax cannot be mapped, the connector should stop the affected record and show a clear error. Silent fallback is dangerous. It may let the order appear to sync while creating bad accounting data.

For tax-specific planning, use the Shopify Odoo tax mapping guide.

Discounts, shipping, duties, tips, and fees

Non-product amounts are easy to overlook. Discounts, shipping charges, duties, import fees, tips, and handling fees all affect the final order total. If those amounts do not sync correctly, Odoo will not reconcile with Shopify.

Discounts need special care because Shopify can allocate discounts across lines. A connector should preserve the final totals and represent discounts in the Odoo pattern the merchant chooses. Some teams prefer line discounts. Others prefer a separate discount product or account.

Shipping may need its own product or service line in Odoo. Duties and import fees may need separate treatment. Tips may be untaxed or mapped to a particular service product. These details should be configured rather than guessed.

The test plan should include more than a simple product order. Use test orders with discounts, taxed shipping, free shipping, duties, and tips if those scenarios exist in the store.

Payments and accounting data

Payment data is not the same as order data. A Shopify order can include authorizations, captures, manual payments, payment gateways, gift cards, partial refunds, and payout timing. Odoo accounting may need invoice records, payment records, journals, receivables, and reconciliation.

Some merchants want detailed payment records in Odoo. Others prefer to reconcile Shopify payouts separately and only sync orders or invoices. Both can work, but the choice must be deliberate.

Shopify documents transaction data in its OrderTransaction object reference. The connector should not assume one order equals one simple payment. It should follow the merchant's accounting workflow.

For finance planning, use the Shopify Odoo accounting sync page and the Odoo accounting for Shopify stores guide.

Refunds and returns

Refund sync is essential because ecommerce refunds are common. A connector should support full refunds, partial refunds, item-level refunds, shipping refunds, and tax adjustments. It should connect the refund to the original Shopify order and the related Odoo record.

The accounting treatment should be clear. Some Odoo workflows use credit notes. Others may use configured negative lines or another refund pattern. The connector should avoid duplicate refunds, especially when events are retried.

Returns can also affect inventory. If a returned item is restocked in Odoo, Shopify availability may need to change. If the item is damaged or not restocked, inventory should not automatically increase. The connector should follow the merchant's return process.

Before launch, test a full refund, a partial refund, a shipping refund, and a tax-included refund. These tests expose problems that a basic order sync will never show.

Fulfillment tracking

Fulfillment data often flows from Odoo back to Shopify. If the warehouse team ships from Odoo, Shopify should receive fulfillment status, tracking number, carrier, and shipment updates so customers can see accurate order status.

The connector should decide when a Shopify fulfillment is created or updated. It should avoid marking orders fulfilled too early. If Odoo supports partial shipments, the connector should handle partial fulfillment carefully so Shopify does not show the wrong status.

Fulfillment tracking is important for customer service. If Shopify is customer-facing and Odoo is operational, the integration should keep customers informed without forcing staff to copy tracking numbers manually.

Historical data

Historical import is useful when a merchant wants Odoo to contain past Shopify orders before real-time sync starts. But historical data should be imported only after mappings are ready. Otherwise the connector will create a large batch of records using incomplete rules.

The import should use the same rules as live sync: same product matching, same tax mapping, same customer strategy, same order outcome, and same refund behavior. It should also skip records that already exist in Odoo based on stable Shopify identifiers.

Historical data is not always required. Some merchants only need new orders from launch day forward. Others need a full year of orders for accounting, support, or reporting. The right decision depends on how Odoo will be used after launch.

Metafields and custom fields

Many Shopify stores use metafields for product details, fulfillment instructions, personalization, compliance information, or internal operations. Odoo may have custom fields or standard fields that can hold some of that data.

Metafield sync should be intentional. Syncing every metafield can create noise. Syncing none may lose important operational context. The connector should map only the fields that support real workflows.

Examples include delivery instructions, product compliance attributes, personalization text, purchase order references, or B2B customer metadata. These fields should be tested with real orders because custom data often fails at the edge cases.

Data that should not sync automatically

Not every field belongs in both systems. Some Shopify content is storefront-only. Some Odoo data is internal-only. A connector should avoid syncing fields that create confusion or overwrite important data.

For example, Shopify product descriptions may be marketing content, while Odoo product descriptions may be operational notes. Shopify tags may support collections and apps, while Odoo categories may support reporting or warehouse logic. Those fields should not be merged unless there is a clear rule.

Prices also need care. Some merchants price in Shopify. Others price in Odoo. Some use Shopify Markets, price lists, discounts, or region-specific pricing. Price sync should not be enabled casually because it can affect customer-facing storefront pricing.

How to prioritize sync scope

Start with the records that reduce daily manual work and operational risk. For most merchants, that means orders, inventory, products, customers, taxes, refunds, and fulfillment tracking.

Then add accounting-specific details such as payment mapping, journals, credit notes, fees, and reconciliation support if Odoo accounting is part of the workflow.

Then add historical imports and custom fields once the core sync is stable. These are valuable, but they should not distract from getting live operations correct.

The best scope is complete enough to remove manual work, but controlled enough that the team understands how each record moves.

A simple sync direction matrix

A useful launch exercise is to create a sync direction matrix. List each data category and mark the source of truth: Shopify, Odoo, or controlled two-way sync. Then add the matching key, error owner, and retry rule.

For products, the source of truth may be Odoo if the ERP team controls catalog and cost data. For storefront copy, Shopify may still own titles, descriptions, media, and merchandising fields. That means the connector should not automatically overwrite every product field in both directions.

For inventory, Odoo is often the operational source of truth, but Shopify sales should still reduce availability. The direction may look two-way, but the rules are not equal. Shopify orders create demand and stock movement. Odoo warehouse quantities decide what is sellable.

For orders, Shopify is usually the source because checkout happens there. Odoo receives the order and turns it into the selected operational or accounting record. For fulfillment tracking, Odoo may become the source after the warehouse ships.

For accounting, Odoo should usually be the reporting system. Shopify provides transaction facts, but Odoo should hold the configured taxes, journals, invoices, credit notes, and reconciliation workflow.

Writing this matrix prevents vague setup. It also helps new team members understand why some fields sync and others do not.

Who should approve each category

The ecommerce owner should approve product storefront behavior, order references, customer-facing status, and Shopify inventory availability. They know what shoppers see and what customer support needs.

The operations owner should approve warehouses, stock locations, picking behavior, fulfillment timing, and return handling. They know what actually happens after an order is placed.

The finance owner should approve taxes, discounts, payment treatment, shipping charges, refunds, invoices, credit notes, and customer strategy. They know what has to reconcile at month-end.

The connector setup is strongest when these approvals happen before launch. If only one person configures everything, the sync may appear to work technically while creating manual cleanup for another team.

Final recommendation

The right Shopify Odoo integration data sync should not be a field dump. It should be a controlled workflow. Products, variants, inventory, orders, customers, taxes, discounts, shipping, payments, refunds, fulfillment tracking, historical data, and selected custom fields should sync only with clear source-of-truth rules.

Before launch, write down which system controls each data category, how matching works, what happens on failure, and how retries avoid duplicates. Then test real ecommerce scenarios, not only a simple order. That is how Shopify and Odoo become aligned systems instead of two databases that occasionally disagree.

Keep reading

Related guides