Shopify Odoo Integration
For store orders to land in Odoo, for stock and price to go from Odoo to the store, and for the invoice to come out in the right layout, the two systems have to talk to each other. Odoo has not published a Shopify connector of its own; a bridge builds this connection and where that bridge can be installed is decided by how your Odoo is hosted. Setup starts with the hosting decision and closes with your first order. In between, the product, variant, stock, order and invoice flows are each built separately, and in Turkey the invoice side is a job of its own.
growing on Shopify with Nodus Works
Shopify Odoo integration what is it?
A Shopify Odoo integration is the connection that keeps store orders, customers, products, stock and price lined up in both systems. Because Odoo is modular, the scope of the connection also changes with the modules you use; which of the accounting, stock and sales modules are open draws the limit of the setup.
Setup starts by deciding where your Odoo runs. If Odoo runs on its own cloud service, a third-party module cannot be installed and the bridge is built somewhere else; if it runs on your own server or on Odoo's developer platform, a module can be installed. After that decision, connection details are taken and matching and the direction map are defined. To manage the difference between cloud and server setup correctly, Nodus Works' Shopify integration and custom app development service decides which path fits your installation.
Once the connection is live, Odoo stays at the center: the order and the customer come from the store into Odoo, stock and price go from Odoo to the store. Because the invoice side in Turkey sits outside Odoo's standard package, it is built as a separate layer and that layer's ownership is written down from the start.
What syncs between Shopify and Odoo
Once the connection is live, orders, customers, products, stock, price and invoices become parts of the same flow. The six headings below cover the questions that come up most often in a Shopify Odoo integration.
Transfer of Shopify orders into Odoo
An order created in the store is opened in Odoo as a sales order and every later step attaches to that record. Which status the order is transferred at is chosen during setup; an early transfer brings sales that are not yet confirmed, a late transfer brings a list that piles up at the end of the day.
Creating customer and account cards
A record is opened on the Odoo side for a new customer and the sale attaches to that record. Because a second record can open when the same person arrives with a different email or phone, the merge rule has to be set from the start.
Product and variant matching
Because Odoo has its own variant structure, the color and size split on Shopify can also sit as a variant on this side. That is a convenience most ERP systems do not have; you do not have to open a separate product card for every variant.
Odoo Shopify stock sync
If stock is managed on the Odoo side, the quantity is written to the store from there and a multi-warehouse design can also be included in this transfer. Which warehouse is opened to the store is defined during setup.
Price and price-list transfer
Price lists in Odoo can be transferred to the store, so you manage price from one place. If your prices change by customer group, how that is met on the store side is a separate decision.
Shipment status and returns
The status and tracking data of the shipment prepared on the Odoo side can be written to the store, and the return comes from the store into Odoo. Because the invoice side in Turkey runs from a separate layer, which system the return invoice comes out of is made clear from the start.
Where does your Odoo run?
The answer to this question sets the whole setup. Odoo has three hosting forms, and where the bridge can be installed is different on all three.
If you run on Odoo's own cloud service
Odoo's standard cloud service does not allow a third-party module to be installed. So you cannot install the Shopify bridge on the Odoo side as a module. Two paths remain: move Odoo to a hosting form that can install modules, or build the bridge on the Shopify side as a service that runs from outside.
If you run on Odoo's developer platform
On this hosting form a module can be installed and separate server maintenance is also not required. For most brands this is the path with the least friction; setup proceeds by loading the module and entering the connection details.
If you run on your own server
A module can be installed, but a public address Shopify can reach and a callback address are required. Keeping the server up, updates and access security bring a maintenance load that cloud setups do not have.
Not making this split clear before setup is the most common reason projects have to turn back. When a module is bought and cannot be installed on Odoo, either hosting is moved or the bridge is rebuilt from scratch with a different architecture; both change the timeline and the cost. Another item that is often missed is that the bridge is tied to the Odoo version: when you upgrade Odoo to a new version, needing the matching version of the bridge as well is ordinary; if you have an upgrade plan this has to be written into the budget from the start.
How is the Shopify Odoo integration done?
The six steps below cover the full setup, from the hosting decision through the first test order. Some steps happen on the Odoo side, some in the Shopify admin, so you need authorized access on both sides.
Decide the hosting form and the module
Decide where Odoo runs: a third-party module cannot be installed on the standard cloud service, it can be installed on the developer platform and on your own server. In a setup that cannot install a module, the bridge is planned to run from the Shopify side.
Make the scope and the modules clear on the Odoo side
List which of the accounting, stock and sales modules are open and what your price-list and warehouse structure looks like. Because Odoo is licensed modularly, the scope of the integration cannot go past the limit of the modules you use.
Create the connection details on the Shopify side
A custom app is opened from the apps section of the Shopify admin and access details are produced. Those details are entered into the connection record on the Odoo side; the bridge's callback address is also allowed on the same app.
Define matching and the direction map
Write down which field products match on, what a Shopify variant maps to on the Odoo side, which warehouse is opened to the store and which price list is used. Which data flows in which direction is also settled in this step.
Design the invoice layer
Because e-invoice and e-archive sit outside Odoo's standard package in Turkey, decide here which layer the document comes out of, the invoice series and the tax-rate rule. Writing whose responsibility that layer is into the contract stops it being left ownerless later.
Verify the flow with a test order
Place an order with a single product and see that the order lands in Odoo, that a customer record opens, that a stock movement is created and that the invoice comes out in the right layout. Then return the same order and also check the reverse flow.
The table below shows which Shopify records map to which counterparts on the Odoo side. The names of the counterparts can change with the module you use; the flow stays the same.
| What Shopify has | What it maps to in Odoo |
|---|---|
| Order | Sales order |
| Customer | Customer record, can open automatically for a new customer |
| Product | Product card |
| Variant | Product variant, Odoo has its own variant structure |
| Stock code | The product's internal reference |
| Location | Warehouse |
| Price | Price list |
| Shipping charge | Separate line on the order |
| Return | Return record and stock movement |
| No Shopify counterpart | e-invoice and e-archive, they run from a separate layer |
The last row of the table is the most critical item of the setup. Odoo has an invoicing module, but Turkey's e-invoice and e-archive rules are not part of the standard package; the document comes out of a separate localization or integrator layer. Invoice series, tax rate and return-invoice behavior also depend on that layer's design.
Tell us about your catalog and current setup, and we will work out how the Shopify Odoo integration should be built for your product structure. You do not need to fill in a form, reach us directly by phone, email or WhatsApp.
Does Odoo have an official Shopify connector?
No. Odoo says this clearly on its own community platform: there is no connector that comes by default between Odoo and Shopify, and every existing module belongs to third-party developers. The Shopify modules in Odoo's own app store are also listed with a third-party tag. The same is true of the Odoo connection apps in the Shopify App Store; none of them is an app Odoo published.
The practical result is this: support also comes from whoever built the bridge. On an Odoo upgrade, a change on the Shopify side or when the flow breaks, your counterpart is the party that provides the bridge, not Odoo. That is why choosing a bridge is a support decision as much as a software decision.
The second result is that scope changes with the bridge. Some bridges only run one way and carry store orders, customers and products into Odoo; some run two ways so they write stock and price from Odoo to the store. That is why a single direction table cannot be drawn: which data flows in which direction is settled together with the chosen bridge, and it is the first thing that has to be written down before a quote.
The third result is on the cost side. Bridges are usually licensed per Odoo version, so when you upgrade Odoo you may also need the matching version of the bridge. In a setup that has an upgrade plan, this item has to be in the calculation from the start.
How is a Turkish invoice issued in Odoo?
This heading is the place Odoo setups are left ownerless most often. Odoo has an invoicing module, but Turkey's electronic-document rules are not part of the standard package; the six items below are the places you have to decide when you design this layer.
e-invoice and e-archive run from a separate layer
For the document to become official, a localization or integrator layer outside Odoo is required. The invoice record in Odoo is an accounting record; the sealed electronic document comes out of that layer, and how these two steps are tied to each other is defined during setup.
Internet-sale invoices go on a separate series
Invoices issued for sales made over the internet are expected to use a series different from your other invoices. Because you set the document numbering layout in Odoo yourself, this split has to be made at the very start; the series of past invoices cannot be changed later.
The invoice has extra information that is required
The web address where the sale was made, the payment method, the organization that mediated the payment, the payment date, the tax or identity number of the party that carried the goods, the ship date, a returns section and a statement that the sale was made over the internet must be present. Those fields filling in depends on the bridge reading the data from the order and carrying it across.
The tax-rate rule is set on the product side
Odoo reads tax from the definitions on the product and the customer. If you show prices tax inclusive in the store, how the same amount is split on the Odoo side into a tax-exclusive amount and a tax line is decided from the start, otherwise a small but constant difference forms on every invoice.
An automated workflow can also issue the invoice
Bridges have rules such as the order confirming itself, invoicing itself and posting its payment. When those rules are set wrongly, an invoice is issued on an order that will be cancelled; because the cancellation window is also limited, the fix is left to a return invoice.
Shopify's own document does not replace an invoice
The document the store produces at the end of an order is an order summary, not a valid invoice in Turkey. The legal document always comes from accounting, from your series and numbering layout.
If whose responsibility this layer is is not written in the contract, it is left ownerless at the end of the project: the party that installs Odoo may not count the invoice layer as their job, and the party that builds the invoice layer may not count the bridge as theirs. The paper copy of the invoice going with the shipped goods, and the customer filling in the returns section of that copy and sending it back with the product when they return it, are also part of the same rule, so the decision ties your packing flow, not only accounting.
What should you watch on the stock and product side?
Because Odoo has its own variant and warehouse structure, matching is easier to set up than on most ERPs. Against that, not every field updates automatically, and in setups that do not know this the gap shows up months later.
The system of record for stock sits on one side
You decide which system holds the real quantity; the other follows it. When both sides write independently, the counts drift over time and the only way to fix them is a physical count.
The match is built on the product's internal reference
On the Odoo side products are matched on the internal reference; that field has to be consistent in both systems. An unmatched line opens a new card, so once a few records pile up for the same product neither the stock report nor the profit report stays readable.
The variant structure exists on both sides
Because Odoo supports variants natively, the color and size split on Shopify can also sit as a variant here. Still, which option maps to which variant attribute is mapped one to one during setup; this is not a match that forms on its own.
Warehouse mapping is defined separately
If Odoo has more than one warehouse, which one is opened to the store is chosen. Sending the total of every warehouse makes a quantity that cannot be sold visible in the store and leads to a cancellation.
Some product fields do not update automatically
Bridge documentation says fields such as weight and weight unit are not updated automatically when a product is created or updated in the store. If your shipping rate depends on weight, that is direct money lost; who fills those fields is made clear during setup.
A return puts stock back
A returned product goes back into sellable stock and that movement has to be written on both sides. If only the accounting record is corrected and no stock movement is written, the count stays short.
What happens after the order arrives?
The order is created on Shopify and the bridge writes it into Odoo. What follows is account, shipment, invoice and return steps; the six items below are the places that stick most often in those steps.
Order status decides when the transfer happens
The order is written into Odoo when it reaches the status you chose. Picking that status early lets unconfirmed sales enter the record; picking it late leaves a list that piles up at the end of the day.
No record is opened after the accounting period closes
An order that lands close to midnight at month end can sit in the transfer queue while the period closes, and the record is then refused. For those records not to disappear silently, the transfer has to raise an alert when it errors and the waiting list has to be checked at close.
The same customer can open two records
Because the bridge can open a customer record on every order, a second record forms when the same person arrives with a different email, a different phone or as a guest. Merging is done by hand, so which field identifies the same customer is decided from the start.
Which day's rate is used on a foreign-currency sale
If your store sells in more than one currency, the record enters the Odoo side after conversion. If which day's rate is used and how the difference between sale and collection is tracked is not decided, the account balance never returns to zero.
Cancellation and returns are separate jobs
Cancelling an order that has not been invoiced only closes the record; on an order that has been invoiced, if the cancellation window has passed a return invoice is required. Because a return is an everyday event in a store, setups that do not make this split do not tie at month end.
Shipment status is written back to the store
When the status and tracking data of the shipment prepared on the Odoo side are written to the store, the customer follows their parcel from their own order page. When this write-back is not set up, the data is carried by hand and the customer-service load grows.
If you also have marketplace channels, the same order opening a record twice from two places and the same warehouse's stock being reserved twice is a separate risk. Catalog and commission rules on Trendyol and Hepsiburada also run separately, so seeing stock, price and the order flow from a single panel makes the work easier; you can review the tool we built on the Station page.
The most common mistakes in the Shopify Odoo integration
The nine headings below are the mistakes that come up most often in setup. The results look alike too: the architecture changes in the middle of the project, the invoice side is left ownerless, or reports become unreadable.
Not checking the hosting form
Odoo's standard cloud service does not allow a third-party module to be installed. Noticing this after the module is bought means either moving hosting or rebuilding the bridge from scratch with a different architecture.
Treating the bridge as Odoo's product
Odoo has not published a Shopify connector; every bridge is third-party. Because support also comes from the party that provides the bridge, the expectation has to be set accordingly.
Not writing the direction map down
Some bridges run one way, some two ways. If which data flows in which direction is not written down before a quote, you find out that stock or price transfer is not in scope when you go live.
Leaving the Turkish invoice layer outside the project
There is no e-invoice or e-archive in Odoo's standard package. When whose job that layer is is not written in the contract, the invoice flow is left ownerless between the two sides.
Writing internet sales onto the same invoice series
The series for sales made over the internet is expected to be different from your other invoices. If the document numbering layout is not split from the start, a retrospective correction is not possible.
Turning on an automatic invoicing rule without a test
Rules that confirm and invoice the order on their own also issue an invoice on orders that will be cancelled. Because the cancellation window is limited, the fix is left to a return invoice.
Assuming fields such as weight are updated
Bridge documentation says some product fields are not updated automatically. In a store whose shipping rate depends on weight, that means a loss that repeats on every shipment.
Writing the total of every warehouse to the store
A quantity that cannot be sold appearing in the store leads to an oversell and a cancellation. Which warehouse is opened to the store is defined during setup.
Not writing an Odoo upgrade into the budget
Bridges are usually licensed per Odoo version. In a setup that has an upgrade plan, if this item is not in the calculation the cost comes out as a surprise.
Three common problems and how they were solved
The three setup scenarios below show how we handled Shopify Odoo integration problems we solved in stores we connected.
The purchased module not installing on Odoo
ProblemThe bridge module had been chosen, the license taken and setup day planned. When the module was to be loaded, the Odoo install would not accept a third-party app and the project had to stop on day one.
CauseOdoo's standard cloud service does not allow a third-party module to be installed. Because the hosting form was not asked at the quote stage, the architecture had been built on a wrong assumption.
SolutionTwo options were put side by side with cost and timeline: move hosting to a structure that can install a module, or build the bridge as a service that runs from the Shopify side. The store picked the second, the flow went live the same week and the hosting move was left as a separate plan.
Invoices coming out on the same series as store sales
ProblemThe setup was working, orders were landing in Odoo and invoices were being issued. But internet-sale invoices were going out on the same series as store sales, and the invoices also did not carry the information that the sale was made over the internet.
CauseOdoo's document numbering layout had not been split during setup, and the invoice layer had been built to carry only the amount and the customer name. The data that would feed the required fields was never being transferred.
SolutionA separate series was defined for internet sales and fields such as web address, payment data, ship date and the returns section were mapped to be read from the order. The paper copy of the invoice was added to the packing flow, and a correction plan for the past period was produced together with the accountant.
Shipping cost coming out higher than expected
ProblemThe store calculated the shipping rate from product weight. The monthly shipping invoice came in above expectation, while order count and average basket value had not changed.
CauseWhen products were created in the store through the bridge, the weight and weight-unit fields were staying empty; the bridge documentation said these fields were not updated automatically, but that had not been in the setup calculation. Products without a weight were going out at the highest shipping tier.
SolutionThe missing fields were filled from the data on the Odoo side and transfer of these fields was taken into the setup scope. A regularly read checklist was built for products whose weight stayed empty, and the shipping tiers were recalculated.
Station is the tool we built to run the order, stock, price and invoice flow from a single panel. When marketplace channels are added, the same Odoo setup stays at the center.
Frequently Asked Questions
How is the Shopify Odoo integration done?
Does Odoo have an official Shopify connector?
Can a Shopify module be installed on Odoo's cloud service?
What is required for Odoo on my own server?
Do Shopify orders land in Odoo automatically?
Can stock and price be sent from Odoo to Shopify?
How do Shopify variants match in Odoo?
Which field are products matched on?
Can Turkish e-invoices and e-archives be issued in Odoo?
Is a separate series required for internet-sale invoices?
Which information must appear on an internet-sale invoice?
Is the invoice Shopify issues enough?
Why does the invoice total not match the order total?
Is an automatic invoicing rule risky?
Do Shopify returns land in Odoo?
How do I stop two records being opened for the same customer?
How is multi-warehouse stock transferred to Shopify?
Do fields such as product weight update automatically?
Can orders that arrive at month end be written into a closed period?
Does upgrading the Odoo version affect the integration?
Can marketplace orders also be transferred to Odoo?
How long does the integration take?
What does the integration cost depend on?
BİZİ TERCİH
EDENLERİN ARASINDA
YER ALIN...
Herkes için Shopify çözümleri üretiyoruz.
Yeni bir Shopify mağazası kurmak, mevcut mağazanızı geliştirmek, özel entegrasyonlar yapmak veya hız problemlerini çözmek mi istiyorsunuz? Biz, teknik işleri sizin yerinize çözen uzman bir Shopify partneriyiz.

Dossha
#shopify

Les Benjamins
#shopify

Nocturne
#shopify

Fellas
#shopify

Mai
#shopify

Karaca
#shopify

Milagron
#shopify

Kiğılı
#shopifySeo

Şölen
#shopify

Adell
#shopifyB2B

Ohora
#shopify

Rendrea
#shopifyBooking

Babeskin
#shopify

The New Lab
#shopify

DTF Town
#shopify

Eczaclick
#shopifySeo

Termos Dünyası
#shopify

Halı.net
#shopify

Blend-r
#shopify

Oioi
#shopifySeo

Nowshopfun
#shopify

Marie Claire
#shopify

Gaziburma
#shopify

Dünyada Kitap
#shopify
NEDEN BİZİMLE
ÇALIŞMANIZ GEREKTİĞİNİ
SİZE ANLATMAK İSTERİZ
Shopify'ı çok iyi anlıyoruz; Türkiye'de her segmentin karşısına biz olarak çıkıyoruz :)







Sadece Shopify konuşanlardan oluşan bir takım

Hey!
Bannerlarım kesik gözüküyor :(
Yardım eder misiniz, kampanya dönemindeyim.
Selam Elif!
2 dakikaya çözüyoruz.





.webp)
.webp)


