Home / Help Center / pos-app / Products / Bulk Pricing
🧮 Products

Bulk Pricing

Bulk Pricing is a catalogue-wide view of quantity-based price tiers — the same tiers you can set per-product inside the Products form, but gathered into one searchable table so you can see and manage every product's bulk/wholesale rates without opening each product individually.

📍 Menu path: Products → Bulk Pricing
👤 Who uses it: All roles that can access Products — the page itself does not enforce any additional per-action permission checks

Overview

This page is built directly on top of the generic Product Price Tiers system — anything you set here is exactly what the Price Tiers card inside a product's own edit form would show, and vice versa.

Every product that has at least one price tier appears as a row with all of its slabs shown as pills (e.g. "10–49 → ₹450" or "Contractor · 50+ → ₹420"), so you can audit your entire wholesale pricing at a glance instead of digging through products one at a time.

At billing, the POS automatically applies whichever tier's Min–Max quantity range matches the quantity being sold — cashiers never need to manually pick a tier.

Before You Start

Step-by-Step Guide

1 Review existing bulk prices

  1. Open Bulk Pricing from the sidebar — every product that already has one or more price tiers is listed with its Base Price and all of its Bulk Slabs as pills.
  2. Use the search box to filter the list down to a specific product by name.
  3. Faded/translucent pills indicate a tier that has been marked inactive but not deleted.

2 Add bulk pricing to a new product

  1. Click "Add Bulk Price" to open the product picker.
  2. Type at least part of a product name to search; click a result to jump straight into its tier editor.
  3. Add one or more tiers: Tier Name, Min Qty, Max Qty (leave blank for no upper limit), Price, an optional Customer Group, and an optional Description.
  4. Click Save Tiers — the editor closes and the main list refreshes automatically to show the product's new slabs.

3 Edit or remove a product's bulk prices

  1. Click the edit (pencil) icon on any row to reopen its tier editor and adjust quantities, prices or the customer group.
  2. Click the delete (trash) icon to clear every bulk price tier for that product in one action — you will be asked to confirm first, since this cannot be undone from this screen.

Every Field & Button, Explained

Field / ButtonWhat it does
Search productsFilters the bulk-pricing list by product name only (client-side, instant).
Add Bulk PriceOpens a product-picker modal so you can start adding tiers to a product that does not yet have any.
Product picker searchServer-side product search (debounced 250ms) used only inside the "Add Bulk Price" modal.
Product columnProduct name plus its base selling unit (e.g. "per kg") when set.
Base Price columnThe product's normal (non-tiered) selling price, shown for comparison against the bulk slabs.
Bulk Slabs columnOne pill per tier, formatted as "[Customer Group ·] Min–Max (or Min+) → Price"; faded pills are inactive tiers.
Edit (row action)Opens the same Price Tiers editor used inside the product form, scoped to this one product.
Delete (row action)Clears all price tiers for that product after a confirmation prompt.
Tier editor: Tier Name / Min Qty / Max Qty / Price / Customer Group / DescriptionIdentical fields to the Price Tiers card inside Products → Products; see that page for full field descriptions.

Tips & Best Practices

Troubleshooting & FAQ

A product I know has bulk pricing is not showing up in the list.
Only products with at least one saved price tier appear here. Use "Add Bulk Price" to search for it and create its first tier.
I deleted a product's bulk prices by mistake.
Deleting from this page clears every tier for that product and cannot be undone from here — you would need to re-enter the tiers manually via "Add Bulk Price" or the product's own Price Tiers card.
The cashier billed a bulk quantity but the base price was charged instead of my tier price.
Check that the sold quantity actually falls inside a tier's Min–Max range, and that the tier is Active. If it is scoped to a Customer Group, confirm the sale was linked to a customer in that group.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/products/BulkPricingPage.jsx
  • frontend-app/packages/pos-react-lib/src/pages/products/PriceTierManager.jsx

Backend endpoints used:

  • GET /products/price-tiers/all
  • GET /products
  • PUT /products/:id/price-tiers
  • GET /settings/customer-groups

Related tables (db-core repositories):

  • ProductPriceTier
  • Product
  • CustomerGroup

Feature flag key: billing

BulkPricingPage.jsx is a read/aggregate view over the same ProductPriceTier rows the per-product Price Tier Manager edits — it reuses the exact PriceTierManager component inside its edit modal, so there is only one price-tier editing implementation in the codebase, not two.