All Insights
Odoo implementation4 min read

Agree product codes and units before an Odoo import

Review product identity, supplier references and units before import. Reconcile a purchase-to-issue example and preserve stable product identifiers.

An illustrative purchase of four boxes containing six kits each produces 24 kits; issuing five leaves 19.
An original DATUM decision aid. Illustrative, not customer data. Open full-size diagram

Before importing products into Odoo, agree which record identifies the item and how each quantity is measured. A product name alone is rarely enough to explain whether two rows represent the same item, different variants, different packaging or an obsolete code.

Build a product identity sheet that purchasing, inventory and operations can review together. Keep the supplier's description and code as references rather than assuming they should become the business's own product identity.

Odoo 19 supports different configured units for purchasing and inventory and describes conversion between them. The documentation also distinguishes inventory units from sales packaging. These settings deserve a test with actual quantities before a bulk import. Odoo 19 units of measure.

Resolve identity before formatting the file

Consider a fictional buyer who orders “seal kit, box” while the warehouse issues individual kits. One supplier's box contains six kits; another supplier sells a differently packaged product with a similar description. Copying both descriptions into one product name could hide a meaningful difference.

First decide whether the underlying kit is the same approved item. If it is, record the supplier-specific ordering information and its verified conversion. If it is not, keep separate identities. If interchangeability is unknown, assign that question to the person responsible for the product specification.

Use the same discipline as the customer identity review: similarity creates a candidate for investigation, not automatic permission to combine records.

Use a product definition sheet

FieldDecision required before import
Internal identityStable code and intended destination identifier
Working descriptionWords operators use to distinguish the item
Variant or revisionWhich differences require separate identification
Inventory unitUnit used to count and move the item
Purchase unitUnit the supplier actually quotes and delivers
ConversionVerified relationship, source and any rounding rule
Supplier referenceSupplier-specific code and description
StatusCurrent, superseded or held for review
OwnerPerson authorized to resolve identity and unit questions

Do not use one generic “box” conversion for every product unless that is actually the approved definition. A packaging label is not evidence of the contained quantity. Keep the supplier specification or another reliable source with the decision.

Reconcile an example by hand

For a fictional test, suppose one verified purchase box contains six kits. An order for four boxes represents 4 × 6 = 24 kits. If five kits are then issued and no other movement occurs, the expected remaining quantity is 24 − 5 = 19 kits.

Those numbers are a chosen test, not a product recommendation. Run the same purchase, receipt and issue in the rehearsal database. Inspect the unit shown on each document and the resulting on-hand quantity. A matching purchase amount does not prove that the warehouse quantity is correct.

Add a partial receipt to expose the practical conversion. If two of the four boxes arrive, can the receiver record the intended quantity and show what remains open without guessing whether the field means boxes or kits? Preserve the resulting documents as evidence.

Keep technical identifiers stable

Odoo's import documentation explains how External IDs support updating existing records and connecting related data. Choose and preserve the mapping rather than regenerating identifiers whenever the display name changes. Odoo 19 export and import data.

Import a small sample containing a normal item, a variant, a supplier reference and a held ambiguity that is deliberately excluded. Then apply a permitted update and confirm that it changes the intended record instead of creating another product. Use the migration rehearsal controls to reconcile record counts and rejected rows.

Also inspect the references from a bill of materials or open order in the test. A clean product list is not sufficient if the related documents point to a superseded identity or use the wrong unit.

Give ambiguous rows a visible disposition

Hold unresolved combinations with a reason and owner. Examples include an unknown pack quantity, two codes that may be substitutes or a product whose revision cannot be established. Decide how that hold affects open purchasing and production work before the release date.

Avoid changing units on established live records as a casual cleanup step. Plan and test the correction with the people responsible for quantities, history and valuation. This guide defines import readiness, not an instruction to rewrite existing stock history.

The accepted output is a product set whose identities and quantity conversions the operating team can explain. Once that agreement exists, the import file becomes a representation of decisions already made rather than the place where those decisions are accidentally invented.

Put it to work

Map one handoff

How we research and review these articles