Skip to Content
Q&A

Avoiding Duplicate Products in Odoo

How an import creates "duplicate records" and what you can do about it.

Terug naar alle Q&A
November 27, 2025 by
Avoiding Duplicate Products in Odoo
DAADit Group, Nick

Na een bulk-import van producten staan er ineens dubbelen in Odoo: twee keer “M8-bout verzinkt”, elk met eigen voorraad, eigen prijshistorie en eigen leverancierregels. Inkoop bestelt op het ene record, verkoop levert van het andere, en uw voorraadcijfers kloppen nergens meer. Hoe ontstaat dat, en hoe lost u het op — zonder handmatig duizend producten door te lopen?

Oorzaak: geen unieke sleutel

Odoo herkent “bestaand versus nieuw” uitsluitend aan een External ID of een match op Internal Reference. Heeft uw Excel geen van beide, dan beschouwt Odoo elk ingelezen record als nieuw — ook als er al een product met exact dezelfde naam bestaat. De productnaam is voor Odoo géén sleutel, hoe uniek die er voor u ook uitziet.

Fix vooraf: External ID toevoegen

Voeg aan uw importbestand een kolom id (External ID) toe met een stabiel formaat, bijvoorbeeld import.product_SKU001. Bij elke volgende import matcht Odoo op die ID en werkt het bestaande record bij in plaats van een tweede aan te maken. Eén kolom extra in Excel, en het duplicatenprobleem is bij de bron opgelost.

Fix achteraf: duplicaten opsporen en samenvoegen

Staat het kwaad al in de database, ga dan zo te werk:

  1. Open Inkoop → Producten (of Voorraad → Producten) in lijstweergave.
  2. Groepeer op Internal Reference; groepen met meer dan één regel zijn verdacht.
  3. Selecteer de dubbelen en kies Actie → Merge. Odoo koppelt alle voorraadbewegingen, orders en historie aan één master-product.

Controleer bij het samenvoegen welk record de juiste kostprijs, BTW-instelling en routes heeft — dat wordt de overlever. Begin met een klein groepje en controleer het resultaat voordat u de hele lijst doorwerkt.

Voorkomen: uniciteit afdwingen

Wilt u dit structureel dichtzetten, dan kunt u onder Instellingen → Technisch → Database Structure → SQL Constraints een unique constraint op default_code laten zetten. Odoo weigert dan elk nieuw product met een al bestaande SKU — ook bij imports en ook als een enthousiaste collega handmatig een tweede record aanmaakt. Laat dit wel door iemand met technische kennis inrichten; een constraint op een vervuilde tabel geeft eerst foutmeldingen tot de bestaande dubbelen zijn opgeruimd.

Tot slot: een praktische tip

Spreek één vaste SKU-conventie af en maak één persoon eigenaar van het productbestand. Verreweg de meeste duplicaten ontstaan niet door techniek, maar doordat drie collega's elk hun eigen Excel importeren. Zit uw database al vol dubbelen, of wilt u de imports goed inrichten? Neem contact op met DAADit Group — we ruimen het graag met u op.

Vragen over uw Odoo implementatie? Doe de gratis Business Scan.

Start de Business Scan →

After a bulk import of products, duplicates suddenly appear in Odoo: two records for “M8 bolt, galvanised”, each with its own stock, its own price history and its own vendor lines. Purchasing orders against one record, sales delivers from the other, and your stock figures no longer add up anywhere. How does this happen, and how do you fix it — without manually reviewing a thousand products?

Cause: no unique key

Odoo recognises “existing versus new” exclusively by an External ID or a match on Internal Reference. If your Excel has neither, Odoo treats every imported record as new — even if a product with exactly the same name already exists. To Odoo, the product name is not a key, however unique it may look to you.

Fix in advance: add an External ID

Add an id (External ID) column to your import file with a stable format, for example import.product_SKU001. On every subsequent import, Odoo matches on that ID and updates the existing record instead of creating a second one. One extra column in Excel, and the duplicates problem is solved at the source.

Fix afterwards: find and merge duplicates

If the damage is already in the database, work like this:

  1. Open Purchase → Products (or Inventory → Products) in list view.
  2. Group by Internal Reference; groups with more than one line are suspect.
  3. Select the duplicates and choose Action → Merge. Odoo links all stock moves, orders and history to a single master product.

When merging, check which record has the correct cost price, tax settings and routes — that one becomes the survivor. Start with a small group and verify the result before working through the whole list.

Prevention: enforce uniqueness

To close this off structurally, you can have a unique constraint set on default_code under Settings → Technical → Database Structure → SQL Constraints. Odoo will then reject any new product with an existing SKU — during imports, and also when an enthusiastic colleague manually creates a second record. Do have someone with technical knowledge set this up; a constraint on a polluted table produces errors until the existing duplicates are cleaned up.

Finally: a practical tip

Agree on one fixed SKU convention and make one person the owner of the product master data. By far most duplicates are not caused by technology, but by three colleagues each importing their own Excel. Is your database already full of doubles, or do you want your imports set up properly? Contact DAADit Group — we are happy to clean it up with you.

Questions about your Odoo implementation? Take the free Business Scan.

Start the Business Scan →

Vraag niet beantwoord?

Onze Odoo-consultants denken graag met u mee. Plan een vrijblijvend kennismakingsgesprek.

Plan een afspraak
Sending emails centrally from Odoo instead of from the user
So that replies end up in the right place even when you're not there.