Skip to content
B2B Pricing Suite — Tiered Pricing, MOQ, Quantity Steps & Volume Discount for Odoo eCommerce icon
Website/E-Commerce

B2B Pricing Suite — Tiered Pricing, MOQ, Quantity Steps & Volume Discount for Odoo eCommerce

Tiered pricing table, MOQ enforcement, quantity steps, volume discount, savings messages & guest price hiding for Odoo 17 eCommerce.

Odoo 17Odoo 18Odoo 19

B2B Pricing Suite

Tiered Pricing, MOQ, Quantity Steps & Guest Price Hiding for Odoo eCommerce

Odoo 17.0+ B2B Pricing Tools MOQ Enforcement EN/ES/FR Translations
Get B2B Pricing Suite — $79

Free lifetime updates & bug fixes · OPL-1 License

What's Included

Everything you need to transform your Odoo store into a B2B sales engine

What You Get Details
Tiered Pricing Table Display all quantity breaks with per-unit savings on product pages
Best-Price Highlight Automatically highlights the best-value tier in the pricing table
Date-Based Pricing Set start/end dates on tiers; expired tiers auto-hidden with expiring-soon badges
Price Range on Shop "From X to Y" range on the shop grid for tiered products
Savings Messages Live-updating "Order N more to get $X each" upsell prompts
Minimum Order Quantity Per-product MOQ enforcement on frontend + backend (cannot be bypassed)
Quantity Step Force quantities in multiples (5, 10, 50) with clear error messages
Unit Price Display Show price per kg, per item, per hour — any configurable label
Guest Price Hiding Per-product toggle to require login before revealing prices
Multi-Website Works correctly in multi-website environments
Multi-Currency Proper decimal formatting per currency symbol
Multi-Language Full EN / ES / FR translations included
32 Unit Tests Comprehensive test coverage for controllers, models, and hooks
Free Lifetime Updates Bug fixes and feature improvements included at no extra cost

Overview

Give your B2B customers the pricing transparency they need to buy more

The B2B Pricing Suite brings your backend pricelists to life on the frontend. Customers can see quantity breaks with per-unit savings, minimum order quantities are enforced, and dynamic messages encourage upsell — all powered by your existing Odoo pricelist items.

Server-side validation ensures MOQ and quantity step rules cannot be bypassed. Cart validation runs on the backend, giving you peace of mind that your pricing rules are enforced.

Hide prices from guests with a per-product toggle. Non-logged-in visitors see a login prompt instead of prices, "Add to Cart", or tiered tables — perfect for wholesale and B2B stores that require registration.

Batch-loaded for performance. Shop grids with 100+ products load pricing data in a single RPC call. CSS custom properties adapt to any Odoo theme automatically.

15
Features
4
API Endpoints
32
Tests
3
Languages

Key Features

Everything you need for B2B pricing on the website

Tiered Pricing Table

Show all quantity breaks with per-unit savings on the product page. Works with existing pricelists — no duplicate data entry.

Best-Price Highlight

The tiered table automatically highlights the row with the lowest per-unit price, so customers instantly spot the best value.

Price Range on Shop

Show "From $X to $Y" on the shop grid for tiered products. Helps customers identify bulk discounts without opening each product page.

Savings Messages

"Order 20 more to get $3.50 each" — live-updating messages that drive upsell and increase average order value.

Minimum Order Quantity

Enforce per-product minimums with frontend input clamping and server-side validation. Cannot be bypassed.

Quantity Step

Force quantities in multiples (5, 10, 50). Validated on both client and server with clear error messages.

Unit Price Display

Show price per kg, per item, per hour — any label you choose. Dynamically updates to reflect the selected tier.

Hide Prices from Guests

Per-product toggle to hide prices, "Add to Cart", and tiered tables from non-logged-in visitors with a login prompt.

Date-Based Pricing

Set start/end dates on pricelist tiers. Expired tiers auto-hide, with optional "expiring soon" countdown badges.

Theme-Compatible CSS

Uses CSS custom properties to adapt to any Odoo website theme automatically. No theme-specific overrides needed.

Multi-Website

Works correctly in multi-website environments with proper website resolution and pricelist scoping.

Multi-Language

Full translations included for English, Spanish, and French. All customer-facing strings are translatable.

See It In Action

Screenshots from the Odoo frontend

Tiered Pricing Table, Price Range & Date Columns

Product page showing price range, tiered pricing table with quantity breaks, unit prices, savings, and expiration dates

The product page displays a price range above the tiered pricing table. When date-based pricing is enabled, each tier shows its expiration date. Tiers expiring within 30 days get an amber expiring-soon badge with a red countdown — e.g. "22 Jul 2026 (1d)" — while far-out dates show as clean purple badges. This drives urgency and helps customers plan their orders.

Price Range on Shop Grid

Odoo shop page showing price range from lowest to highest tier and expiring-soon badges on products with tiered pricing

Products with tiered pricing show a "€X - €Y" range directly on the shop grid. Products with hidden prices show "Log in for price" instead. When date-based pricing is active, tiers expiring within 30 days display expiring-soon badges with a countdown — giving customers urgency to buy.

Server-Side MOQ Enforcement

Cart showing MOQ validation warning: quantity below minimum order triggers server-side enforcement

When a customer tries to checkout with a quantity below the minimum, the cart shows a clear validation warning — "Quantity adjustments needed: min 5 (currently 1)." MOQ and quantity step rules are enforced both on the frontend and the backend. Customers cannot bypass these rules to place an order that violates your B2B requirements.

Hide Prices from Guests — Product Page

Product page showing login prompt instead of prices for non-logged-in visitors

When "Show Price to Customers" is unchecked on a product, non-logged-in visitors see a clean login prompt instead of prices, "Add to Cart" button, or the tiered pricing table. Logging in restores full visibility automatically.

Hide Prices from Guests — Shop Grid

Shop page showing 'Log in for price' on products with hidden prices for non-logged-in visitors

On the shop grid, products with hidden prices display "Log in for price" instead of the actual price or price range. This gives non-logged-in visitors a clear call to action while keeping your B2B pricing private. Once logged in, the full price range and tiered pricing table become visible.

Why Buy the B2B Pricing Suite?

See what you get vs. Odoo out of the box

Feature Odoo Default B2B Pricing Suite
Tiered pricing table on product page Not visible to customers Fully displayed with savings
Price range on shop grid Single price only "€X - €Y" range for tiered products + "Log in for price"
Dynamic upsell messages Not available Live "Order N more" prompts
Minimum order quantity Not enforced on website Frontend + backend validation
Quantity step enforcement Not available Per-product multiples enforced
Unit price display Not available Configurable per product
Best-price highlight in table Not available Auto-highlights best value tier
Hide prices from guests Not available Per-product login gate
Variant-level pricing Backend only Fully supported on website
Multi-currency Default behavior Proper decimal formatting per currency
Batch performance (100+ products) N/A Single RPC call for all products
Date-based pricing tiers Not available Auto-filter expired, expiring-soon badges
Configuration N/A Per-feature toggles in Settings
No duplicate data entry. Tiered pricing is read directly from your existing Odoo pricelist items. Configure pricing in one place, display it everywhere.

Technical Specifications

Built with Odoo best practices

Dependencies:

  • base
  • web
  • website
  • website_sale
  • product
  • sale

Compatibility:

  • Odoo 17.0 Community Edition
  • Odoo 17.0 Enterprise Edition
  • Bootstrap 5 compatible
  • Works with all standard themes

Test Coverage:

  • 32 unit tests (controllers + models + hooks)
  • MOQ validation edge cases
  • Multi-currency support
  • Variant-level pricelist deduplication
  • Public user price hiding
  • Date-based tier filtering & expiring-soon detection

API Endpoints:

  • /shop/b2b-pricing-config — Get global module configuration
  • /shop/b2b-pricing-data — Get pricing data for a product
  • /shop/b2b-pricing-batch — Batch pricing for multiple products
  • /shop/b2b-validate-cart — Validate cart against MOQ/step rules

File Structure:

ecommerce_b2b_pricing_suite/
├── controllers/
│   ├── __init__.py
│   └── main.py              # 4 JSON-RPC endpoints
├── data/
│   └── default_config.xml    # Default settings
├── i18n/
│   ├── es.po
│   ├── fr.po
│   └── ecommerce_b2b_pricing_suite.pot
├── models/
│   ├── __init__.py
│   ├── product_template.py   # MOQ, step, unit price fields
│   ├── res_config_settings.py # Settings panel
│   └── sale_order.py         # Server-side validation
├── static/
│   ├── description/
│   │   ├── icon.png
│   │   ├── index.html
│   │   └── images/
│   │       ├── product_page.png
│   │       ├── shop_page.png
│   │       ├── shop_guest.png
│   │       ├── cart_page.png
│   │       ├── guest_hidden_price.png
│   │       └── settings_page.png
│   └── src/
│       ├── css/
│       │   └── pricing_suite.css
│       └── js/
│           └── pricing_suite.js
├── tests/
│   ├── __init__.py
│   ├── test_controllers.py   # 21 tests
│   └── test_models.py        # 11 tests
├── views/
│   ├── product_view.xml
│   ├── res_config_settings_view.xml
│   └── website_templates.xml
├── __init__.py
├── __manifest__.py
├── hooks.py                  # Clean uninstall
├── LICENSE
└── README.md

Perfect For

Ideal for these business types

  • Wholesalers — Show bulk pricing tiers that increase with order volume
  • Manufacturers — Display price per unit and enforce MOQ from suppliers
  • Distributors — Customer-specific pricelists with tiered visibility
  • Any B2B Store — Increase average order value with savings incentives
  • Office Supplies — Enforce case-pack quantities with step enforcement
  • Raw Materials — Show price per kg/ton with tiered volume discounts
  • Subscription Products — Display per-unit pricing for multi-quantity orders
  • Membership Stores — Hide prices from non-members with guest gating

Quick Configuration

Get started in minutes

  1. Go to Settings → B2B Pricing Suite and enable the module
  2. Toggle individual features on/off (tiered table, price range, savings messages, unit price)
  3. On each product, configure MOQ and unit price label in the B2B Pricing tab
  4. Tiered pricing is automatically read from your existing pricelist items
Quick Start: Install the module, enable it in Settings, and your existing pricelist items are instantly displayed as a tiered pricing table on the product page — no additional configuration needed.

Settings Panel

Every feature individually toggleable

Odoo Settings panel showing B2B Pricing Suite configuration toggles: enable module, hide prices, tiered table, price range, savings messages, unit price, date visibility

All features are individually toggleable in Settings → B2B Pricing Suite. The Pricing Visibility section controls the master toggle and guest price hiding. Customer Engagement toggles the tiered table, price range, savings messages, unit price display, and date visibility (Always Show Dates, Expiring Soon Only, or Disabled). Tiered pricing data is read directly from your existing Sales → Products → Pricelists items — no duplicate data entry.

What's New in v2.1.0

Recent improvements and additions

New Features

  • Date-Based Pricing Tiers — Tiers with date_start/date_end are automatically filtered; expired tiers hidden
  • Show Dates Setting — Three modes: Disabled, Always Show Dates, Only When Expiring Within 30 Days
  • Expiring Soon Badge — Visual countdown for tiers about to expire (within 30 days)
  • Valid Until Column — Optional date column in the tiered pricing table

Improvements

  • 7 New Tests — Date filtering, expiring-soon detection, show_dates config (32 total)
  • Multi-Website Support — No longer hardcodes website ID 1
  • jQuery Removed — Migrated to native fetch() API
  • SEO Structured Data — Schema.org AggregateOffer markup

Frequently Asked Questions

Common questions about the B2B Pricing Suite

Does this module work with existing Odoo pricelists?

Yes. The B2B Pricing Suite reads tiered pricing directly from your existing Odoo pricelist items. No duplicate data entry — configure pricing once in Sales → Products → Pricelists, and it automatically displays on your storefront.

Can I hide prices from non-logged-in visitors?

Yes. You can hide prices globally for all products or per-product using the "Show Price to Customers" toggle. Non-logged-in visitors see a "Log in for price" prompt instead of prices, the "Add to Cart" button, or the tiered pricing table.

Does it support multi-website and multi-currency?

Yes. The module works correctly in multi-website environments with proper website resolution and pricelist scoping. Multi-currency is fully supported with proper decimal formatting per currency.

Is the minimum order quantity enforced on the backend?

Yes. MOQ and quantity step rules are enforced both on the frontend (JavaScript) and the backend (sale.order.line constraints). Customers cannot bypass these rules to place orders that violate your B2B requirements.

Does it work with product variants?

Yes. The module supports both template-level and variant-level pricelist items. When a customer selects a variant, the pricing data automatically refreshes to show variant-specific tiers.

Is there a jQuery dependency?

No. The module uses pure vanilla JavaScript with the native fetch() API. Zero jQuery dependency means faster page loads and no conflicts with other modules.

The Perfect Companion

Need to replace "Add to Cart" with "Request a Quote"?

Request for Quote — $49 →

Pair the B2B Pricing Suite with our free Request for Quote module for a complete B2B e-commerce experience — tiered pricing on products you sell, quote-only for products you negotiate.

Bundle & Save: Get both modules together in the B2B Commerce Suite for $99 (save $29 vs buying separately).

Support

For technical support or feature requests, contact [email protected]

B2B Pricing Suite v2.1.0 | Developed by Hexalian LLC

License: OPL-1. This software is provided "as is", without warranty of any kind.

Related Odoo modules (Odoo 17)

Before You Buy

  • Confirm your Odoo version: v17, v18, v19.
  • Review module scope carefully to validate your exact use case.
  • Plan installation on staging first, then deploy to production.
  • Need help evaluating fit? Email [email protected].
From $79.99
One-time purchase · Instant download

Secure checkout · No account required

Download link sent to your email after payment. Lost your link?

Powered by Stripe

What You Get
Complete module source code, instant email delivery, and version coverage for Odoo 17, Odoo 18, Odoo 19. No subscription lock-in.
  • 100% source code included
  • Lifetime access to download
  • Odoo 17 & 18 & 19 supported
  • Email delivery (72h link)
  • Sold as-is under OPL1 — all sales final

Production-grade Odoo modules with full source code.

Changelog — Odoo 19
v19.0.1.0.0