Odoo Pricelists: Advanced Pricing Rules and Formulas Guide 2026
One price for all customers rarely works in practice. B2B customers expect negotiated rates, international buyers need currency-specific pricing, and volume discounts reward larger orders. Odoo's pricelist system handles all of these scenarios and more with a flexible rule engine that adapts to any pricing strategy.
Understanding Odoo's Pricing Engine
Odoo determines product prices through a layered system. The base price comes from the product form, but pricelists can override this at multiple levels: by customer, by quantity, by product category, or by date range. Understanding how these layers interact is essential for setting up pricing that works.
The Pricing Hierarchy
When Odoo calculates a price, it evaluates rules in this order:
- Fixed price rules : Specific prices set for specific products or categories
- Formula-based rules : Prices calculated from the product's list price using discounts, surcharges, or custom formulas
- Product list price : The fallback when no pricelist rule applies
Pricelist Selection Logic
Odoo selects the applicable pricelist in this priority order:
- Sales order pricelist : If a specific pricelist is selected on the order, it takes precedence
- Customer pricelist : If the customer has a default pricelist on their contact record, it applies automatically
- Default pricelist : The company's default pricelist applies if no other pricelist matches
Creating Your First Pricelist
Navigate to Sales > Configuration > Pricelists. Create a new pricelist with these core settings:
- Name : Descriptive name like "Wholesale Pricing" or "European Customers"
- Configuration : Choose whether prices are based on the public price (list price) or a cost margin
- Available on : Restrict to specific websites (for e-commerce) or leave open for all channels
- Minimum amount : Optional threshold; the pricelist only applies when the order exceeds this amount
Price Rule Types
Each pricelist contains one or more rules. Rules define the conditions under which a specific pricing logic applies. Odoo evaluates rules from top to bottom and uses the first matching rule.
Type 1: Fixed Price
Set an exact price for a product or category, regardless of the list price. Use this for negotiated customer-specific prices or promotional pricing. Configure it by:
- Setting the rule's Compute Price to "Fixed"
- Entering the exact price in the Fixed Price field
- Specifying the product or category this rule applies to
Type 2: Percentage Discount
Apply a percentage discount to the product's list price. This is the most common rule type for general discount pricelists:
- Set Compute Price to "Discount"
- Enter the discount percentage (e.g., 15 for 15% off)
- Optionally apply to a specific product category for category-wide discounts
Type 3: Formula-Based Pricing
Formula rules calculate prices using a mathematical expression based on the product's cost or list price. This is powerful for margin-based pricing:
- Based on: Cost : Price = Cost × (1 + Margin%). Ensures consistent margins across all products
- Based on: Public Price : Price = List Price × (1 − Discount%) + Surcharge
- Rounding : Round prices to .99, .95, or whole numbers for cleaner presentation
Advanced Pricing Strategies
Volume Discounts (Quantity-Based Pricing)
Odoo supports tiered pricing where the unit price changes based on order quantity. Create multiple rules within a pricelist, each with a different "Minimum Quantity":
- 1+ units: List price (no discount)
- 10+ units: 5% discount
- 50+ units: 12% discount
- 100+ units: 20% discount
Odoo evaluates quantity rules from highest to lowest and applies the first rule where the ordered quantity meets the minimum. Higher quantities get the better price automatically.
Customer Group Pricing
Create separate pricelists for different customer segments and assign them to customer records:
- Wholesale pricelist : Assigned to wholesale customers with 25% across-the-board discount
- VIP pricelist : Assigned to top-tier customers with 15% discount plus free shipping threshold
- Distributor pricelist : Assigned to distributors with cost-plus pricing (cost × 1.3)
On the customer's contact form, set the Sales Pricelist field. Every sales order for that customer automatically uses the assigned pricelist.
Multi-Currency Pricelists
When selling internationally, pricelists handle currency conversion. Each pricelist has a currency field. When a pricelist uses a different currency than the company's base currency:
- Prices are stored in the pricelist's currency
- Odoo uses configured exchange rates for conversion when needed
- You can set fixed prices in foreign currencies to avoid exchange rate fluctuations
Enable multi-currency at Accounting > Configuration > Settings > Multi-Currencies and maintain exchange rates at Accounting > Configuration > Currency Rates.
Date-Range Pricing
Rules can have Valid From and Valid To dates. This enables time-limited promotions, seasonal pricing, and price increases that take effect on a specific date. Combine date ranges with other rule types for powerful promotional campaigns.
Pricelists in E-Commerce
Odoo's e-commerce integrates with pricelists to show customer-specific prices on the website. When a logged-in customer with an assigned pricelist browses the shop, product prices reflect their pricelist automatically.
Geo-IP Based Pricelist Selection
For anonymous website visitors, Odoo can select pricelists based on the visitor's location using Geo-IP. Configure this at Website > Configuration > Settings and enable Geolocate Customers. Visitors from different countries see prices in their local currency automatically.
Pricelist Visibility
Control which pricelists are available on your e-commerce site using the Available on field. Restrict wholesale pricing to logged-in B2B customers while keeping retail pricing available to all visitors.
Testing and Debugging Pricelist Rules
Complex pricelist configurations can produce unexpected prices. Use these techniques to verify your setup:
Use the Pricelist Test Feature
On a pricelist form, use the test feature to calculate prices for specific products and quantities. This shows which rule matched and the final calculated price, making it easy to debug rule conflicts.
Common Rule Conflicts
- Rule order matters : Odoo evaluates rules top to bottom. A general category discount placed above a specific product fixed price will override the specific price. Put specific rules above general ones.
- Multiple matching rules : Only the first matching rule applies. If two rules match, the one listed first wins regardless of which gives a better price.
- Missing product rules : If a product has no matching rule, Odoo falls back to the list price. This is usually correct but can be surprising when you expect a discount that was configured on the wrong category.
Best Practices for Pricelist Management
- Name rules clearly : Use descriptive names like "Wholesale - 10+ units - 15% off" so team members understand what each rule does
- Document your pricing strategy : Keep a reference document mapping customer segments to pricelists and rules
- Review pricelists quarterly : Pricing strategies drift over time. Schedule regular reviews to ensure rules still reflect current business needs
- Test before activating : Always test new pricelists with sample products and quantities before making them available to customers
- Use categories for bulk pricing : Instead of creating individual product rules, apply rules to product categories for easier maintenance
Summary
Key Takeaways
- Odoo evaluates pricelist rules top to bottom : the first matching rule wins
- Use fixed prices for negotiated rates, discounts for percentage reductions, and formulas for margin-based pricing
- Assign pricelists to customer records for automatic price application on every order
- Combine quantity thresholds with pricelist rules for volume discount tiers
- Multi-currency pricelists handle international pricing with automatic exchange rate conversion
Frequently Asked Questions
How do I set up volume discounts in Odoo?
Create multiple rules in a pricelist, each with a different Minimum Quantity. Set the discount percentage for each tier. Odoo applies the rule where the ordered quantity meets the minimum, giving larger orders better prices automatically.
Can I assign different pricelists to different customers?
Yes. On each customer's contact form, set the Sales Pricelist field. Every sales order created for that customer automatically uses the assigned pricelist, applying the correct prices without manual selection.
What happens when no pricelist rule matches a product?
Odoo falls back to the product's list price (the Sale Price on the product form). This ensures every product always has a price, even if no pricelist rules are configured for it.
How does Odoo handle pricelists with different currencies?
Each pricelist has a currency field. Prices in the pricelist are stored and displayed in that currency. Odoo uses configured exchange rates for conversion when reporting or when the company's base currency differs. You can set fixed prices in foreign currencies to avoid rate fluctuations.
Can pricelist rules have date ranges?
Yes. Each rule has Valid From and Valid To date fields. Rules outside their date range are ignored. This enables time-limited promotions, seasonal pricing, and scheduled price changes without manual intervention.
Optimize Your Pricing Strategy
Get expert help configuring pricelists, volume discounts, and multi-currency pricing for your business.