> For the complete documentation index, see [llms.txt](https://help.dollarlabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.dollarlabs.io/dollarlabs-b2b-custom-pricing/getting-started/how-pricing-works.md).

# How pricing works

Understanding four things will save you most of the debugging you would otherwise do.

## One price list, columns for tags

Your store has **one price list**, created for you on install. It holds every variant in your catalog as a row.

Each row has a column per **customer tag** you have added, plus an optional **Default** column. The value in a cell is that tag's pricing for that variant.

```
                        Default   Wholesale   Distributor
Hoodie / Small            —          25            18
Hoodie / Large            —          27            20
Snowboard                 —        1:900;12:700    —
```

A cell can hold more than a number. It can carry volume tiers, a case multiple, a loose-unit price and a discount type all at once — see [CSV import & export](/dollarlabs-b2b-custom-pricing/price-list/csv-import-and-export.md) for the full grammar.

An **empty cell means no pricing from that tag**, not "free" and not "zero".

## Discounts, not price changes

Dollarlabs never rewrites your product prices. It creates Shopify **discount functions** that apply in the cart and at checkout.

What follows from that:

* Retail customers cannot see wholesale prices, because the catalog price never changed.
* Pricing reaches draft orders, subscriptions and pre-orders.
* Your product and collection pages show the normal catalog price until you add the [storefront blocks](/dollarlabs-b2b-custom-pricing/show-final-prices-on.md). The blocks are display only — they do not affect what the buyer is charged.
* If the price list is disabled, nothing is discounted, regardless of what the grid says.

## The lowest price wins

If a customer carries several tags that all have pricing for a variant, they pay the **lowest effective price** for the quantity in their cart. Not the first tag, not the tag order in the grid.

"Effective" matters when you mix discount types. A `Percentage` cell and a `Specific price` cell are both resolved to what the buyer would actually pay at that quantity, and then compared.

The storefront blocks and the checkout use the same resolution, so what a buyer sees on the product page is what they are charged.

Tags with no pricing for a variant are skipped — they never make a price worse.

{% hint style="info" %}
This is also why the **Default** column deserves care. It applies to everyone, so a Default price lower than a wholesale price will quietly become the price everyone pays.
{% endhint %}

## Quantity decides the tier

When a cell has volume tiers, the tier that applies is chosen by the quantity of that variant in the cart. Tiers are matched on minimum quantity — a tier at `12` applies from 12 units up until the next tier takes over.

If the cell also has a case multiple, quantity does two jobs: it selects the tier *and* it is checked for validity. See [Volume tiers & case multiples](/dollarlabs-b2b-custom-pricing/getting-started/volume-tiers-and-case-multiples.md), and [Progressive case multiples](/dollarlabs-b2b-custom-pricing/getting-started/progressive-case-multiples-and-loose-unit-pricing.md) for what happens to leftover units.

## Where each thing is configured

<table><thead><tr><th width="290">What you want to change</th><th>Where</th></tr></thead><tbody><tr><td>The price for one variant and one tag</td><td>The cell in the price list grid</td></tr><tr><td>Tiers, case multiple, loose pricing, discount type</td><td>The cell's settings panel</td></tr><tr><td>A tag's checkout discount title, or its payment/delivery rules</td><td><a href="/pages/ufQJYRjcyCtMkl16jeex">Tag settings</a></td></tr><tr><td>Discount combinations, the default titles, the validation message</td><td><a href="/pages/mbCNTy3CdTX0YGPTkYLS">Price list settings</a></td></tr><tr><td>Whether any of it is live</td><td>The status switch on the home page</td></tr><tr><td>How prices <em>look</em> on the storefront</td><td><a href="/pages/4JMUAbno85AgI57DJQ5m">Theme app blocks</a></td></tr></tbody></table>
