← Back to all posts Implementation & approach

Odoo as a PIM? When your product data belongs in a shell around Odoo (and the sync runs one way only)

When Odoo's standard product model no longer suffices - thousands of items each with a complete dossier - you do not build PIM inside Odoo, but as a shell around it. With one hard rule: the sync runs one way only. This is the architecture, why syncing back and forth rebuilds the chaos, and where the line is.

Also in: Deutsch Nederlands

When Odoo”s standard product model no longer suffices - thousands of items, each with a complete dossier of specifications, compliance and artwork - the reflex is to keep extending the product screen. That is the wrong turn. At that scale you do not build PIM inside Odoo, but as a shell around it, with only the transactional subset in Odoo itself. And with one hard rule: the sync runs one way only. This is the architecture, why syncing back and forth rebuilds the chaos, and where the line is.

When the standard product model strains

For most companies Odoo”s product model is more than enough. Specifications, variants, prices, images: it is all in there, and you need no extra system. The question “can Odoo serve as a PIM?” is for them simply: yes.

It only strains with a specific profile. Thousands of items, and per item not a handful of fields but a complete dossier: technical specifications, compliance documents and certificates, packaging data, artwork, multiple languages, and dozens to hundreds of attributes that each buyer or channel asks for slightly differently. We saw this at a sourcing and import company where a single item row was good for 173 columns. At that point the product screen in Odoo becomes a catch-all, and each extension makes it slower and more fragile.

The shell architecture: what belongs where

The solution is not “cram everything into Odoo”, but to split the data to where it belongs:

  • The PIM manages the full product data: all specifications, compliance, packaging, artwork, translations and variants. This is the source of truth for the product.
  • Odoo holds the transactional subset: exactly the fields you need to sell, purchase, hold stock and invoice. This is the source of truth for the transaction.

The rule of thumb for what belongs where: does a field belong to the transaction, then it may live in Odoo; does it belong to the complete product dossier, then it stays in the PIM and only what Odoo actually uses comes along. A certificate a buyer requests belongs in the PIM; the sales price and the stock unit belong in Odoo. That way the product screen in Odoo stays clean and fast, while the richness of the data is fully preserved in the layer built for it.

Why the sync runs one way only

Here is the principle that holds the whole setup up: the sync runs one way only, from the PIM to Odoo. Change a specification, a price or a certificate and you do that in the PIM, and it flows to Odoo. Never the other way.

The temptation is to let it run both ways “for convenience” - a price you happen to adjust in Odoo flowing back to the PIM. Do not. As soon as both systems think they own the same fields, you get conflicts: which value wins, and when? You rebuild exactly the situation you set out to solve - versions drifting apart, nobody knowing what is right - but now split across two systems instead of ten Excel tabs. Syncing back and forth rebuilds the Excel chaos, only more expensively. One direction keeps the question “where does the truth live?” always answerable.

Two sources of truth, each for its domain

One direction does not mean one system. There are two sources of truth, and that is fine as long as the line is sharp:

  • The PIM is the source for product data. Everything that describes the product originates and changes there.
  • Odoo is the source for the transaction. Orders, stock, deliveries and invoices originate there.

The line runs along the question “does this describe the product, or record an event?”. A product attribute describes; an order records. As long as you do not mix those two, every field knows where it belongs and the sync stays simple and predictable.

Where the line is: not everyone needs this

This is emphatically not an argument to put a separate PIM next to Odoo by default. For the vast majority of companies that is overkill - you add a system, a connection and maintenance where the standard product model would have done fine. The shell architecture only pays for itself with the profile above: many items, a rich dossier per item, and multiple buyers or channels that each want their own subset.

Unsure which side you are on? Look at your item row. Does it have a handful of fields, then Odoo is your PIM and you are done. Is it heading toward dozens or hundreds of fields most of which have nothing to do with the sales transaction, then the shell is worth considering. That trade-off is part of the broader B2B setup we described in PIM, EDI and customer portal for wholesale.

In short

With thousands of items each carrying a complete dossier, your product data does not belong inside Odoo, but in a PIM as a shell around it - with only the transactional subset in Odoo itself. The sync runs one way only, from PIM to Odoo, because syncing both ways rebuilds the chaos. Two sources of truth, each for its domain, with a sharp line: the PIM describes the product, Odoo records the transaction. And for most companies not at that scale: Odoo is your PIM, and that is exactly enough.


Is your item data running into the limits of the standard product model? Schedule a no-obligation Quickscan and together we determine whether Odoo suffices as a PIM or a shell architecture pays for itself.


Read more: PIM, EDI and customer portal for wholesale · Odoo for procurement, sourcing and import companies · From Excel to Odoo · What does an Odoo implementation cost?

Frequently asked questions

Can Odoo itself serve as a PIM?

For many companies, yes. Odoo's standard product model covers specifications, variants, prices and images fine. It only strains with thousands of items each carrying a complete dossier - think compliance, packaging, artwork, multiple languages and dozens to hundreds of fields. Then the product screen becomes a catch-all and it pays to build PIM as a separate layer, with only the transactional subset in Odoo.

When do you need a separate PIM next to Odoo?

When your item data is richer and broader than what you use in Odoo to sell, purchase and deliver. The signal: an item row with dozens to hundreds of fields, dossiers that have nothing to do with the transaction, and multiple buyers or channels that each want their own subset of that data. Then you manage the full data in the PIM and push only the part Odoo needs.

Should you sync PIM and Odoo both ways?

No, and that is the crux. The sync runs one way only: from the PIM to Odoo. The PIM is the source of truth for product data; Odoo is the source for the transaction (order, stock, invoice). Sync both ways and you get two systems that each think they own the same fields - and you rebuild the Excel chaos, only more expensively.

What goes in Odoo and what does not?

In Odoo you put the transactional subset: the fields you need to sell, purchase, hold stock and invoice. In the PIM you keep the full data: all specifications, compliance, artwork, packaging, translations and variants. The rule of thumb: does a field belong to the transaction, then it may live in Odoo; does it belong to the complete product dossier, then it stays in the PIM and only what Odoo actually uses comes along.

What is the source of truth with a PIM shell?

There are two, each for its own domain. The PIM is the source of truth for product data: change a specification, price or certificate and that happens in the PIM and flows to Odoo. Odoo is the source of truth for the transaction: orders, stock and invoices originate there. As long as that line is sharp, every field knows where it belongs and the sync stays simple.

Recognize this from your own setup?

A 30-min scan turns hunches into a concrete view, what stays standard Odoo, what becomes custom, what doesn’t need code at all.

Get in touch ← Back to blog