Building Scalable Product Variants in Odoo
In most businesses, products do not exist as single items, but as variations. Different sizes, colors, configurations, or specifications all represent the same product concept, but each must be tracked and managed independently.
Odoo handles this through product variants.
Rather than duplicating products for every version, Odoo introduces a structured model where a single product can generate multiple distinct items. This allows businesses to scale their catalog without losing control over inventory, pricing, or reporting.
How Variants Fit Into the Product Model
In Odoo, products are structured around a product template, as outlined in our product creation article.
The template defines shared configuration such as category, pricing logic, and operational behavior. Variants extend this structure by representing specific combinations of attributes, while remaining linked to that central template.
Although they share a common foundation, each variant operates as its own item. It maintains its own inventory, barcode, and internal reference, and moves independently through warehouse operations.
Enabling Product Variants in Odoo
Within Inventory settings, Odoo includes an option to activate Product Variants. Once enabled, the Attributes & Variants structure becomes available across product records.

Without variants, each variation must be managed as a separate product. With variants enabled, multiple versions are organized under a single product template.
Creating Attributes: Defining What Can Vary
Variants are driven entirely by attributes.
Attributes define what can change within a product. Size, color, or material are all common examples.
Each attribute contains a set of values, and Odoo generates variants by combining those values together. This means a single product can expand into multiple distinct items based on how those values combine, without requiring each version to be created manually.

For example, a T-shirt with Size (XS to 2XL) and Color (Red to Green) attributes will generate 30 variants, as each size is combined with each color (6 × 5). Each combination becomes its own variant, allowing it to be individually tracked and managed within the system.
Setting Up Attributes in Odoo
Attributes are created centrally in Odoo and can then be reused across multiple products.

To create an attribute, navigate to Inventory → Configuration → Attributes. From here, you can create and manage all attributes used across your product catalog.
When creating a new attribute, several fields define how it behaves within the system.
Attribute Name
The Attribute Name defines what the variation represents when assigning to products.
This should be clear and consistent across your product catalog. Common examples include size, color, material, or brand.

Well-defined attribute names make variants easier to understand, filter, and manage. Poor or inconsistent naming can quickly lead to confusion in both reporting and day-to-day operations.
Display Type
The Display Type controls how the attribute is presented to users when selecting a product.

While this does not impact inventory or variant generation, it does affect how easily users can interact with product options. This becomes particularly important in eCommerce or POS ordering environments and will be explored further in a dedicated article.
Variant Creation Methods
Each attribute also includes Variant Creation options, which determines when variants are generated.

When set to Instantly, all possible combinations are created as soon as the attribute is applied. This is the standard approach for stocked products where every combination exists in inventory.
When set to Dynamically, variants are only created when they are used, typically through a sales order. This is useful when products are configurable or made-to-order, and not every combination needs to exist upfront.
When set to Never, the attribute does not generate variants at all. It remains selectable, but no separate inventory records are created.
It's important to note that these Variant Creation settings cannot be changed once the attribute is in use.
Attribute Values
Each attribute contains a list of values that define the available options.
For example, a size attribute may include XS through 2XL, while a color attribute may include Red, White, or Black. These values are what Odoo uses to generate product variants when attributes are assigned.

Attribute values can include both a Default Extra Price and a Free Text setting, which influence how the product is priced and allow for users to add their own information to a value.

The Default Extra Price defines the standard price adjustment for each value at the attribute level. This serves as the baseline pricing behavior when the attribute is applied across products.
The Free Text option allows users to enter a custom value when selecting from predefined options.
Defining values clearly and consistently ensures that variants are generated correctly and remain easy to manage as the product catalog grows.
Generating Product Variants
Once attributes and values have been configured, they can be assigned to products through the Attributes & Variants tab.
Select the product you want to configure, choose the appropriate attributes and corresponding values, and save your changes. If the Instantly variant creation method is selected, Odoo will automatically generate all product variants.

Select the attribute(s) you wish to assign to the product

Select the value(s) you wish to assign from the attribute

Click save to confirm your attribute and value selection

Odoo automatically generates the product variants
Each combination becomes its own product variant. These variants are individual records that can be stocked, sold, and managed separately within the system.
Adjusting Variant Behavior at the Value Level
Once variants have been generated, additional adjustments can be made directly at the attribute value level within the product.
These changes apply only to the specific product and do not modify the attribute itself. This allows attributes to remain consistent and reusable across multiple products, while still providing flexibility where needed.

From the Attributes & Variants tab, click Configure on the attribute you want to adjust to access the Product Variant Values.

Select a value to open its configuration, where pricing and availability rules can be defined for that product.

At the product level, the Extra Price allows the default adjustment to be refined for a specific product. This makes it possible to override standard pricing where needed while maintaining consistency across the broader attribute structure.
The Exclude for field prevents this value from being combined with specific attribute values, ensuring only valid variant combinations are created and available for use.
Together, these controls ensure that product variants reflect real pricing and availability without compromising the integrity of the overall attribute structure.
It is important to note that removing an attribute value from a product will also remove any product-level adjustments associated with that value, including pricing and exclusion rules.
Working Within the Product Variant
Each variant has its own dedicated view.

While most configuration is inherited from the product template, key operational details are managed at the variant level. This includes internal references, barcodes, and any variant-specific adjustments such as pricing or logistics.
Key Fields Within the Variant
Within the variant view, several sections allow for targeted adjustments.

The Codes section defines identifiers such as the internal reference and barcode. These are critical for warehouse operations, scanning, and accurate product tracking.
The Pricing section allows you to manage the cost of the specific variant when required, particularly when standard costing methods are being used.
The Logistics section includes physical details such as weight and volume, which are used in shipping calculations and warehouse operations.
The Sales section supports additional configuration through packaging options, tags for improved filtering, and variant ribbons for eCommerce display.
Variant Media and Visual Representation
Images can also be managed at the variant level.

While the main product image is typically defined on the template, each variant can include its own image to reflect differences such as color or style. Additional media can be added through the Extra Variant Media section.
This becomes especially important in eCommerce environments, where displaying the exact variant selected improves clarity and reduces ordering errors.
How Variants Impact Inventory and Operations
Once created, variants behave as independent inventory items.
Each variant maintains its own stock levels and moves separately through warehouse operations. Receiving, picking, transfers, and deliveries all occur at the variant level.
This ensures that inventory accuracy is maintained across all variations of a product.
At the same time, variants remain tied to the structure defined by the product template. This balance between shared structure and operational independence is what allows Odoo to scale effectively.
Structuring Variants the Right Way
The decision to use variants should always be based on operational behavior, not just how products appear.
Variants are appropriate when differences are limited to characteristics such as size, color, or configuration, and when the underlying financial and operational logic remains consistent.
If products behave differently in costing, procurement, or accounting, they should not be grouped as variants. They should be structured as separate products.
Getting this distinction right early prevents significant restructuring later.
Final Thoughts
Product variants in Odoo often appear straightforward at first glance.
Adding attributes, generating combinations, and assigning SKUs can feel like a quick configuration step. In reality, the decisions made here directly shape how inventory is tracked, how orders are processed, and how the system performs as the business grows.
Early shortcuts tend to surface later as operational friction. Poorly structured attributes, inconsistent SKUs, or incorrectly grouped products can lead to picking errors, reporting gaps, and time-consuming corrections once the catalog scales.
Odoo provides a high degree of flexibility, but that flexibility depends on structure. The system will not prevent poor configuration, it will simply reflect it.
Taking the time to understand how variants function, or working with someone who does, ensures that the product structure supports the business rather than creating constraints.
When implemented correctly, variants provide clarity, consistency, and scalability. When implemented without a clear approach, they quickly become a major source of complexity within the system.
Frequently Asked Questions: Product Variants in Odoo 19
What are product variants in Odoo?
Product variants are different versions of the same product, created from combinations of attributes such as size, color, or material. Each variant is treated as its own item, with its own inventory, barcode, and internal reference .
What is the difference between a product template and a variant?
A product template defines shared information such as category and pricing logic, while variants represent specific combinations of attributes. Each variant operates independently but is linked to the template.
When should I use product variants instead of separate products?
Variants should be used when differences are limited to attributes like size, color, or material, and the underlying operational and financial behavior remains the same. If products differ in logistics, manufacturing, or accounting, they should be created as separate products.
Can I control which variant combinations are allowed?
Yes. Odoo allows you to exclude specific attribute combinations at the product level, ensuring only valid variants are created and available for use .
Do product variants have separate inventory?
Yes. Each variant maintains its own stock levels and moves independently through inventory operations such as receipts, transfers, and deliveries .
Can I assign different prices to product variants?
Yes. Pricing can be adjusted at the attribute value level or directly on the variant, allowing for flexible pricing while maintaining a consistent product structure .
What happens if I remove an attribute value from a product?
Removing an attribute value will also remove any associated variant configurations, including pricing adjustments and exclusion rules for that value .
Should I use dynamic or instant variant creation?
Instant creation is best when all combinations exist and need to be stocked. Dynamic creation is better for configurable or made-to-order products where not all combinations are needed upfront .
How do product variants impact operations?
Variants behave as independent items in operations. Each variant is received, stored, picked, and delivered separately, ensuring accurate inventory tracking across all product variations .