Creating a Manual Pricing File
Manual pricing lets you set wholesale prices in bulk by uploading a single spreadsheet (CSV or Excel) instead of editing products one by one. You map each product variant — by SKU, barcode, or variant ID — to the price your wholesale customers should pay. The file can be as simple as one identifier and one price, or as rich as tiered volume discounts driven by percentages off a chosen price source.
This guide builds up in three stages:
A simple flat wholesale price.
Volume (quantity-break) pricing.
Advanced discounts using the optional
discount_typeandprice_sourcecolumns.
Prerequisites
A manual pricing rule. In the app, go to Pricing → Create pricing rule → Manual. The upload happens on that rule's page, in the Price upload card.
At least one customer group assigned to the rule, so the prices apply to the right buyers.
Matching variants in your store. Every identifier in your file must match a real variant's SKU, barcode, or variant ID. Rows that don't match any variant are ignored.
Cost per item set on your variants — only if you plan to use the cost-based options in Stage 3 (
COST_PRICE). Variants without a cost are skipped for those rows.
Tip: Download one of the three templates from the Supported templates list as your starting point. Pick the template that matches how you want to identify your products — by SKU, by barcode, or by variant ID.
Stage 1: A simple wholesale price
The smallest possible file has just two columns: one identifier and a price. Each row sets a single flat wholesale price for that variant.
Using SKUs:
sku,price sku-gift-1,9.01 sku-gift-2,12.50
You can identify variants by barcode or variant ID instead — just change the first column header:
barcode,price xlt-123-rtc,9.01
variantId,price 42524900950127,9.01
Notes:
You only need one identifier column. Use whichever is most reliable for your catalog.
The
priceis the exact amount the wholesale customer pays for one unit.Headers are forgiving about capitalization and spacing —
Variant ID,variant_id, andvariantidall work.
Behind the scenes: After you upload, prices are recalculated in the background and synced to your storefront. For large catalogs this can take a few minutes — you can keep working elsewhere while it runs. Re-uploading a file replaces the previous prices for that rule.
Stage 2: Volume (quantity-break) pricing
To reward larger orders, add a quantity column and include multiple rows per variant — one per quantity break. The quantity is the minimum units at which that price kicks in.
sku,quantity,price sku-gift-1,1,9.01 sku-gift-1,10,8.51 sku-gift-1,20,7.99
In this example, for sku-gift-1:
1–9 units → 9.01 each
10–19 units → 8.51 each
20+ units → 7.99 each
Notes:
The
quantitycolumn is optional. If you leave it out (as in Stage 1), every row is treated as quantity 1.You don't have to start at quantity 1. If your lowest break is, say, 10, then orders below 10 simply pay the variant's normal price.
One price per quantity. A variant can't have two rows with the same quantity — duplicates are rejected with an error that points to the conflicting rows (see Troubleshooting).
Stage 3: Discount types and price sources
By default every price value is treated as an exact wholesale price. Two optional columns let you instead express the price as a discount off (or markup on) one of the variant's existing prices:
discount_type— how thepricevalue is interpreted.price_source— which of the variant's prices the discount applies to.
discount_type values
Value | Meaning |
| The |
| The |
| The |
| The |
| The |
price_source values
Value | Meaning |
| The variant's retail price. |
| The variant's compare-at price. |
| The variant's cost per item. |
How they combine
FIXED_PRICEignoresprice_source— it's an absolute amount.PERCENTAGEandAMOUNT_OFFdiscount down from the chosen source (retail, compare-at, or cost).PERCENTAGE_INCREASEandAMOUNT_INCREASEmark up from cost — useful for "cost-plus" wholesale pricing.
Examples
20% off the compare-at price:
sku,quantity,price,discount_type,price_source sku-gift-2,1,20,PERCENTAGE,COMPARE_AT_PRICE
$5 off the cost price:
sku,quantity,price,discount_type,price_source sku-gift-3,1,5,AMOUNT_OFF,COST_PRICE
Cost price plus a 15% markup:
sku,quantity,price,discount_type,price_source sku-gift-4,1,15,PERCENTAGE_INCREASE,COST_PRICE
Volume breaks with a percentage discount (note the same discount_type and price_source on every row for the variant):
sku,quantity,price,discount_type,price_source sku-gift-5,1,10,PERCENTAGE,PRICE sku-gift-5,10,15,PERCENTAGE,PRICE sku-gift-5,20,20,PERCENTAGE,PRICE
Rules to keep in mind
One discount type and source per variant. Every row for the same SKU/barcode/variant ID must use the same
discount_typeandprice_source. You can vary the amounts across quantity breaks, but not the type or source.Markups are cost-only.
PERCENTAGE_INCREASEandAMOUNT_INCREASEare only valid withprice_source = COST_PRICE.Still one price per quantity — the no-duplicates rule from Stage 2 always applies.
Leaving
discount_type/price_sourceblank (or omitting the columns) falls back toFIXED_PRICE/PRICE, so older simple files keep working unchanged.
Behind the scenes: Cost-based prices are calculated at upload time and stored as fixed amounts. Retail- and compare-at-based percentages/amounts are applied live on the storefront, so they automatically follow any later changes to those prices.
Troubleshooting
Message | What it means / how to fix |
| Your file has no |
| Add at least one identifier column. |
| The quantity in that row isn't a number. Remove it (defaults to 1) or fix it. |
| Use one of: |
| Use one of: |
| Markups require cost price. Either switch the source to |
| All rows for the same variant must share one discount type and one price source. Make them consistent. |
| You have two rows for the same identifier and quantity. Remove one. (Remember: a blank/missing quantity counts as 1, so two no-quantity rows for the same variant collide.) |
A variant's price didn't update | Confirm the identifier matches a real variant, the rule is Active and assigned to the buyer's customer group, and — for cost-based rows — that the variant has a cost per item set. Allow a few minutes for background recalculation on large catalogs. |


