> 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

The model behind the grid — one price list, a column per tag, a cell per variant — and the rules that decide which price a buyer actually pays.

Prices are set per variant and customer tag. Quantity and discount settings determine which price applies.

## 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.

<figure><img src="https://2844543096-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcVBfwy7Yj4tU8TsxkHEr%2Fuploads%2Fgit-blob-6c83e04c20cffb677d511a389d9bd97dae2ca5b4%2Fhome-grid-cell-chips-annotated.png?alt=media" alt="Price list grid with Base price, Default, wholesale and distributor columns; some wholesale cells show percent, minus-dollar, dollar and tier-count chips."><figcaption><p>Each row is a variant and each column a customer tag; chips show when a cell is more than a plain price.</p></figcaption></figure>

The grid on the home page lists only the variants that have a price. Choose **Edit** to see every variant.

A cell can hold more than a number. It can carry volume tiers, a case multiple, a loose-unit price and a price 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.

This means:

* Your Shopify catalog price stays unchanged. Guests and customers without a matching column can still receive a configured Default price.
* [Draft orders created in Admin](/dollarlabs-b2b-custom-pricing/price-list/draft-orders.md) can use customer pricing when you enable eligible automatic discounts on the draft.
* Test subscriptions and pre-orders with the apps and checkout flow your store uses before relying on the same result.
* 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. The order of the tag columns does not affect this.

When discount types differ, the app calculates the price for each one at the ordered quantity, then compares those prices.

Storefront blocks help buyers understand their price. Verify the final cart and checkout totals, especially for cases with loose units, multiple tags and other discounts. A displayed case-tier unit price alone is not a quote for an incomplete case order.

Tags with no pricing for a variant add no discount. A customer matching a price-list column does not fall back to Default just because that variant’s cell is empty.

{% hint style="info" %}
**Default is a fallback.** It applies when no customer column matches, including for guests. It is not an extra lowest-price candidate against matching customer columns. Without an applicable app price, the Shopify catalog price remains.
{% endhint %}

## Quantity decides the tier

For a regular per-item rule, the quantity on the cart line selects the tier: a tier at `12` applies from 12 units until the next tier. With cases and loose units, the completed-case quantity selects the tier; if there is no full case, the ordered quantity is used. Set case-tier thresholds on case boundaries.

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 to change settings

<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 size, part cases, price type</td><td>The cell's <strong>Pricing rule</strong> panel</td></tr><tr><td>A tag's checkout discount title, or rules that hide payment/delivery methods</td><td><a href="/dollarlabs-b2b-custom-pricing/getting-started/customer-tags-and-columns.md">Tag settings</a></td></tr><tr><td>Discount combinations, the default titles, the validation message</td><td><a href="/dollarlabs-b2b-custom-pricing/price-list/price-list-settings.md">Price list settings</a></td></tr><tr><td>Whether pricing is enabled</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="/dollarlabs-b2b-custom-pricing/show-final-prices-on.md">Theme app blocks</a></td></tr></tbody></table>
