HADOOPT
TECHNOLOGIES
Schedule a Tech Consultation
Home
Services
Odoo ERP implementation Rollout, custom modules, migration and support. Web application development SaaS products, portals and internal platforms. Mobile application development Offline-first field apps and customer apps. AI development & automation LLM assistants, document processing, forecasting. Odoo version upgrades ↗ Move to a newer release, scoped and priced on its own site.
Products
OrgExp ↗ Budget, CAPEX and OPEX management.
Blog About Contact Schedule a Tech Consultation
Blog / Odoo 19: Complete Guide for Businesses
Odoo 19 6 min read

Products, variants and pricelists in Odoo 19

The Odoo 19 product catalogue: Goods, Service and Combo types, Track Inventory, variants and attributes, the new units of measure, and pricelist rules.

· ERP practice 22 Sep 2026

In Odoo 19 every product has one of three types: Goods, Service or Combo. Stock tracking is a separate Track Inventory checkbox on goods. Variants come from attributes, units of measure no longer use categories, and pricelists hold rule-based prices per customer group, quantity or period. Get the product master right before you import thousands of SKUs; it is the hardest thing to fix later.

This is part 8 of our Odoo 19 guide, after quotations and sales orders. Products and pricelists are a shared base module (Products & Pricelists, Community) used by Sales, Purchase, Inventory, Point of Sale and eCommerce alike.

Product types in Odoo 19: Goods, Service and Combo

The Product Type field has three values. In the database they are consu, service and combo; Goods is the default.

TypeUse it forNotes
GoodsAnything physical you sell or buyWith Inventory installed, tick Track Inventory to manage stock quantities; leave it off for consumables you do not count
ServiceLabour, consulting, installation, AMC contractsCan be invoiced on ordered or delivered quantities, milestones or timesheets
ComboMeal deals, bundles, "choose one from each group" offersBuilt from combo choices, each a list of products with optional extra prices; used in Sales, POS and eCommerce

If you are coming from Odoo 17 or earlier, the old "Storable Product" and "Consumable" types have gone. They are now one type, Goods, plus the Track Inventory checkbox. Once tracking is on you can also choose tracking by quantity, lots or unique serial numbers. Migration scripts map the old values, but check a sample after any upgrade.

For Indian companies, the product also carries an HSN/SAC Code field from the Indian localisation. It flows to invoices and to POS receipts, so fill it at product-creation time, not at GST-return time.

Variants and attributes

Turn on Variants in the Sales (or Inventory) settings. Attributes such as Size or Colour, and their values, are defined once. Each product template then picks the attributes and values it uses. Each value can carry an extra price on top of the template's sales price.

The key setting is on the attribute: Variant Creation.

  • Instantly creates a variant for every combination as soon as you save. Each variant can have its own barcode, internal reference, cost and stock.
  • Dynamically creates a variant only when that combination is first added to an order. This suits made-to-order configurations.
  • Never does not create variants at all. The value is recorded as a description on the order line, which suits engraving text, gift wrap or a "no onions" choice.

Odoo caps instant generation at 1,000 new variants per template by default (the system parameter product.dynamic_variant_limit). If you hit it, the model is wrong, not the limit. Three sizes by four colours is a variant problem; forty lengths by sixty finishes is usually a "Never" attribute plus a price rule. The Multi-checkbox display type only works with "Never", because a single variant cannot hold several values of the same attribute.

Other display types (Radio, Pills, Select, Color, Image) only change how the choice looks on the configurator, the website and in POS.

Units of measure and packagings in Odoo 19

Odoo 19 simplified units of measure. UoM categories are gone. Each unit now has a Reference Unit and a Contains factor: a Pack of 6 contains 6 Units, and a kg contains 1,000 g. Enable Units of Measure & Packagings in the settings and manage them under Sales › Configuration › Units & Packagings.

Packagings are now additional units on the product itself (the Packagings field): a box of 24 or a pallet of 40 boxes becomes a unit you can sell in. The purchase unit is set per vendor line on the product's vendor pricelist. That is where "we buy in cartons, sell in pieces" belongs.

Unit       Reference   Contains
Units      —           1
Pack of 6  Units       6
g          —           1
kg         g           1000
Box/24     Units       24     ← your own packaging
How units relate in Odoo 19. All but the last row ship with Odoo; Box/24 is an example of your own.

Pricelists and price rules

Enable Pricelists in Sales settings, then open Sales › Products › Pricelists. A pricelist has a currency, optional country groups (and a website, if you use eCommerce), and a set of rules. Each rule has:

  • Apply On: All Products, Product Category, Product or Product Variant.
  • Price Type: Discount (a percentage off), Formula, or Fixed Price.
  • Based on (for formulas): Sales Price, Cost or Other Pricelist, with a discount, a surcharge, rounding, and minimum and maximum margins.
  • Minimum quantity and a start and end date, for quantity breaks and time-limited promotions.

When several rules match, the most specific wins: variant, then product, then category, then all products, with higher minimum quantities checked first. Assign a pricelist to a customer on the contact form, in the Sales & Purchase tab, so dealers, distributors and retail customers each get their own prices automatically.

How the price shows on the quote matters to customers. If you enable the Discounts setting, Discount-type rules appear on the order line as the list price with a visible discount percentage. Formula and Fixed Price rules simply change the unit price. Use Discount rules when your customer expects to see "MRP less 15%"; use Formula or Fixed when the net price is the price.

Price by rule, not by hand. Every manual discount a salesperson types is a margin decision nobody reviewed.

A sensible order to set up the product catalogue

  1. Agree product categories, since they drive accounting properties and pricelist rules.
  2. Decide Goods vs Service vs Combo, and Track Inventory, for each product family.
  3. Define units and packagings before importing products.
  4. Create attributes and choose the Variant Creation mode for each.
  5. Import products with HSN/SAC codes, taxes, barcodes and vendor lines.
  6. Build pricelists last, as rules on categories rather than thousands of fixed prices.

If you are moving from Tally, expect the stock item master to need restructuring. Tally's stock groups and units rarely map one-to-one to Odoo categories, variants and packagings, and it is cheaper to redesign them than to import them as they are.

Next in the series: selling these products over the counter with Odoo 19 Point of Sale for retail and restaurants. For help restructuring a messy item master, see our Odoo implementation service.

Questions we get asked

What are the product types in Odoo 19?

Odoo 19 has three product types: Goods, Service and Combo, stored as consu, service and combo. Goods is the default. Whether goods are stock-managed is controlled by a separate Track Inventory checkbox, which replaced the old Storable Product type. Combo products bundle choices from groups of products, for example a meal deal or a gift hamper.

What happened to storable products in Odoo 19?

The separate Storable Product type no longer exists. Since Odoo 18, physical items are all of type Goods, and ticking Track Inventory on the product makes Odoo manage stock quantities, with optional tracking by lots or serial numbers. When a database is upgraded, former storable products become Goods with Track Inventory enabled.

When should I use variants instead of separate products in Odoo?

Use variants when products share a name, description and most settings but differ by attributes such as size or colour, and each combination needs its own stock, barcode or cost. Use separate products when items differ in category, taxes or vendors. For choices that do not need stock, such as engraving, set the attribute's Variant Creation to Never.

How do pricelist rules decide which price applies in Odoo 19?

Odoo looks at the rules on the customer's pricelist that match the product, quantity and date. The most specific rule wins: product variant first, then product, then product category, then all products, and higher minimum quantities are checked before lower ones. A rule can give a discount, a formula based on price or cost, or a fixed price.

← Previous Quotations and sales orders in Odoo 19: templates, e-signature and invoicing policy Next → Odoo 19 Point of Sale for retail and restaurants
Keep reading
Odoo 19 Getting started with Odoo 19: what changed and where to begin 6 min read Odoo 19 Installing Odoo 19 from source, Docker or packages 7 min read Odoo 19 Odoo 19 hosting: Odoo Online vs Odoo.sh vs on-premise 6 min read