For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

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

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.

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, and Progressive case multiples for what happens to leftover units.

Where each thing is configured

What you want to change
Where

The price for one variant and one tag

The cell in the price list grid

Tiers, case multiple, loose pricing, discount type

The cell's settings panel

A tag's checkout discount title, or its payment/delivery rules

Discount combinations, the default titles, the validation message

Whether any of it is live

The status switch on the home page

How prices look on the storefront

Last updated