This question has been flagged
6 Replies
The almost complete guide to pricelist behavior
Author Best Answer

Product Pricing Setup and Behavior

1. Overview:

There are three levels of price control available in Odoo.

1. One sale price per product, defined on the product form. This is the default method.

2. Multiple sale prices per product, defined on the product form

3. Multiple sale prices per product, defined on a separate pricelist document. This option allows the use of formulas to calculate prices.

Technical Note: When you enable option 2 or 3, you install a model called product.pricelist and product.pricelist.line. These models are used to store pricing data. If you select option 2, you can still import pricelist lines as such even though they are not visible on the product.pricelist form view.

2. Behavior Details:

Pricing behavior is dictated by the following rules.

  1. Only one pricelist may be used on any given order.

  2. The pricelist for an order is selected based on the pricelist set on the customer.

  3. Prices are computed according to the order pricelist at the time the line item is added.

  4. If a product does not have a price listed in the pricelist selected on a sale order, the list price will be used.

  5. If there are multiple pricelist items on a single pricelist for a given product and more than one could be applied to an order, the one with the greatest specificity will be used. If the specificity level of two pricelist items is identical, the one with the highest price will be used.

  6. If you change the pricelist of an order with existing line items, prices of existing line items will not be recomputed but newly-added items will use the new pricelist.

  7. If you save a contact without a pricelist selected, the default pricelist will be set on that customer automatically.

  8. The default pricelist is the one at the top of the list of pricelists

  9. If a customer is logged in and places a web order, if the customer pricelist is not allowed on the website, the next available pricelist is selected from the list of pricelists


  1. Prior to version 11.0, the POS pricelist superceds the customer pricelist. It is not possible to have customer-specific prices in the POS.

  2. In Version 11.0, the customer pricelist in the POS overrides the default POS pricelist when the customer is selected, provided the customer pricelist is allowed in that POS.

  3. In 11.0, the cashier may select the pricelist manually for any order in the POS from the list of allowed prices in that POS.

  4. When the pricelist is changed on a POS order, prices for all products already in the order will be recomputed according to the new pricelist UNLESS the price of a line item has been changed manually by the cashier.

3. Setup:

A. Pricing tiers by customer

  1. Enable pricelists in the sales app settings

  2. Enable "Discounted Prices" option in the Website App Settings

  3. Create pricelists in the sales app > catalog > pricelists. You'll need one pricelist for the POS, one for the website, and some number of team/wholesale/special pricelists.

  4. Create your prSet prices for each pricelist on products

  5. Set pricelists on each POS till

  6. Set pricelists on customers

B. Pricing tiers by quantity

1. Enable pricelists in the sales app settings. Either option works.

2. If you have different pricelists for different customers, create any necessary pricelists beyond the default one.

3. For each product in each pricelist, create one pricelist item per quantity tier

For example, if a product is priced at 30 dollars each or 25 dollars each if you purchase 10 or more, create two lines as follows:


Pricelist: Public Pricelist

Price: 30

Minimum quantity: 0


Pricelist: Public

Pricelist Price: 25

Minimum quantity: 10

C. Point of Sale

1. Set up your pricelists according to the above

2. On each POS settings, set the default pricelist and any other allowed pricelists

3. On each customer, set a pricelist

4. Recommendations:

  1. Use the default public pricelist as your website pricelist

  2. Be sure that every item has a price listed for every pricelist.

  3. Set the list price to the MSRP of the product to show the appropriate discount (if applicable)

5. Special Cases:

A. Variants

There are two ways to manage variant prices. One is to use the third level price control option and create a pricelist line for each variant.

The other method is to use attribute price modifiers in conjunction with a pricelist line for the product template. This method requires the same price modifier be used for an attribute value regardless of which product template it is used on. This works well in certain cases and is a limitation in others.

B. Multi-Currency

A pricelist has a currency defined on it. The currency of an order comes from the pricelist.

C. Multi-Company

5. Importing

It’s possible to import all your pricelists and prices in one file using any of the above three methods of price management. Variant price extras will require an additional import.

Pricelists with pricelist items can be imported in the product.pricelist list view even if the pricelist items are not displayed on the pricelist form view, as in the second method. See the attached import template for an example.

Pricelist Set on Contact Behavior:

Create a new contact and save, a pricelist will be automatically assigned. Note: pricelist is not a required field (support claims this is not a bug).


Here's how Odoo chooses which pricelist to assign. 

  1.  - It looks first if you have not enforced a specific pricelist for the partner,

  2.  - It then look for the first pricelist having countries set, and if the customer country is among these countries it choose it,

  3.  - It then look for all pricelist which do not have countries set,

  4.  - It then fallback to the general company property for pricelist (the default pricelist for the current company),

  5.  - Then, and only then, it searchs for all pricelists, choosing the one with the lowest sequence.


Thank you for all this information! Did you create this guide? Or is this documented on any website for future reference?

Hi Marc Antoine, Thank you for all this information and document this. I have case and hopefully you know what the best solutions is/ the way to go.

A Customer do have a pricelist per country.
They have products with standard price on the product.template, the have pricelist standard EU (Default) and per customer a specific pricelist. But from one of their customers they have a different pricelist per country were they deliver. Do you have any ideas about this ?

Best Answer

This is great ... but telling that one has to find it in a forum post ... instead of in the documentation.

Best Answer

How can I use pricelist to determine different rates for my timesheet hours based on the timesheet dates?


HI did you find any solution to this? I need the same solution - I also need to define a per hour / per day price for future services, but without affecting current (running) orders.

Best Answer

I have this situation.

I use a Public price list for all the products, on POS and the same on Website. When I set an discount and select from the pricelist to show both prices to customers, it takes the public price, wich I don't use to compare the prices.

Best Answer

This is great thank you so much!

Best Answer

I have a product that I sell on various territories with different currency. is it possible to associate a specific accounting account for each price list? as the accounting accounts are in specific currency.


You can select the country groups for the pricelist and therefore the countries.
If you activate the multi currencies access right (in developper mode) for a user, you can select the currency of the pricelist.