MerchantFlowMerchantFlow Docs
Profit & Loss

Price Breaks - Quantity-Tiered Product Costs

Enter supplier volume pricing as quantity price breaks in MerchantFlow. Covers total-vs-per-item entry, the Bundles measured scope setting, and worked examples for bundles sold as separate variant lines.

Price Breaks

Price breaks let you enter your supplier's volume pricing exactly as they quote it - "1 pair $4.69, 2 pairs $5.85 total" - instead of pre-calculating a per-item rate yourself. This is a product cost feature: it changes what a unit costs on the COGS side of your P&L, and is completely separate from Country Fulfillment Rates, which price delivery. This guide covers how to set up a price-break ladder, the Bundles measured setting that decides which orders qualify for a break, and how the two work together.

Note: In-app labels use the British spelling "Fulfilment" for delivery costs - this guide quotes on-screen labels exactly as they appear. Price breaks themselves are a product-cost feature and always use the American spelling in the UI.

Prerequisites

None. Unlike country fulfilment rates, price breaks are not gated by your fulfilment cost method or whether a 3PL is connected - a supplier volume discount on the product itself has nothing to do with how you cost delivery, so every variant can have a price-break ladder regardless of your other settings.

How to Access

  1. Go to Profit > COGS and expand a product to its variants
  2. Under a variant's cost, click "Price breaks" (the layers icon)
  3. In the Price breaks modal:
    • "Your supplier quotes" - choose "a total for the quantity" if your supplier's paperwork shows a lump sum for a bundle, or "a price per item" if they already quote per unit
    • The first row (quantity "1") is your ordinary unit cost - the same value shown on the COGS table
    • Click "Add a price break" to add a quantity floor and what you pay at that quantity. The "Per item" column shows the effective per-unit cost automatically - you never need to do the division yourself
  4. Click "Save price breaks"

A preview panel titled "What this means" shows the largest break in plain language (for example, "An order of 3 books $8.10.") along with a note on how bundles are currently measured, so you can confirm the ladder does what you expect before saving.

Two Ways to Enter a Break: Total vs Per Item

The "Your supplier quotes" setting tells MerchantFlow how to read the amount you type into "You pay" for every break row (the base quantity-1 row is always a plain per-item cost):

SettingWhat "You pay" meansExample
"a total for the quantity" (per_group)The TOTAL your supplier bills for that many units, stored exactly as quoted"2 pairs cost $5.85 total" -> enter 5.85 at quantity 2. Per item shows $2.93
"a price per item" (per_unit)The per-unit rate at that quantity"2 pairs cost $2.93 each" -> enter 2.93 at quantity 2. Per item shows $2.93

Both settings resolve to the same underlying cost - pick whichever matches the number actually printed on your supplier's invoice, and let MerchantFlow do the division. A break quantity must be a whole number of at least 1; a "total for the quantity" row specifically needs a quantity of at least 1 too, since "the total for 0 units" has no per-item value.

Note: MerchantFlow warns you (without blocking the save) if the per-item cost you have entered rises as quantity increases. That pattern is almost always a total typed into a per-item row, or the reverse - a supplier really can charge more for an odd quantity, but it is worth double-checking.

Bundles Measured: Which Quantity a Break Compares Against

A price break only fires once an order reaches its quantity floor - but "the order's quantity" is ambiguous the moment a bundle is split across more than one line item, which is common with mix-and-match apps and order-level discounts. Bundles measured (Tenant.cogsTierScope) decides how that quantity is counted, and lives in the Cost settings card at the top of Profit > COGS (not on the Financial Preferences settings page):

OptionQuantity compared against a breakChoose this when
"Per order line" (default)Just that one line's own quantityYour storefront sells the bundle as a single line at quantity 2, 3, 4... - the ordinary case
"Per product in the order"Every line in the order that resolves to the same product, added togetherA bundle discount app splits "buy 2" into two separate lines of the same product at quantity 1 each - no per-line tier could ever fire for that shape
"Across the whole order"Every line in the order, whatever the productYour supplier prices by total parcel contents regardless of which items are in it

"Per order line" is the default and reproduces exactly how price breaks behaved before this setting existed - if you have never touched it, nothing changes. Changing it, like changing a price break itself, recomputes historical profit: MerchantFlow re-evaluates every order against the new measurement rule.

Important: This same setting also governs how a parcel-priced ("whole order") fulfilment rate is grouped - see Fulfillment Costs and Country Fulfillment Rates. If you only need Bundles measured for price breaks, you can still leave it on the default; but if you are also using a per-order fulfilment rate, the two settings interact and are worth reviewing together.

Worked Example: A Bundle Sold as Separate Lines

Your supplier quotes shoe-lace pairs like this:

QuantitySupplier charges
1 pair$4.69
2 pairs$5.85 total
3 pairs$8.10 total
4 pairs$10.20 total

Your store runs a "Buy 2, Save" promotion through a bundle app. Instead of one line at quantity 2, the order lands in MerchantFlow as two separate line items of the same variant, each at quantity 1.

Step 1 - set Bundles measured. With the default "Per order line", each qty-1 line only ever sees the base tier ($4.69 x 2 = $9.38 for the pair) - the 2-pair break can never fire. Switch Bundles measured to "Per product in the order" so MerchantFlow adds the two qty-1 lines together before checking tiers.

Step 2 - build the ladder. Open Price breaks on the variant, set "Your supplier quotes" to "a total for the quantity", and enter:

QuantityYou payPer item (shown automatically)
14.69$4.69
25.85$2.93
38.10$2.70
410.20$2.55

Result. An order with two qty-1 lines of this variant now resolves the 2-pair break. MerchantFlow normalises the group total to a per-unit amount ($5.85 / 2 = $2.925) and applies it to each line's own quantity, so the two lines together book exactly $5.85 - not $9.38. Because the division happens before any multiplication, the lines always sum back to the group total the ladder describes.

Where Bundle Pricing Shows Up

Once a price break resolves for an order, the order's line-item cost breakdown (visible from the order detail view) reflects the allocated share of the group total on each affected line - so a bundle split across several lines never shows an inflated per-line cost, and the lines still add up to exactly what the ladder says the group costs.

Bulk Setup via CSV

Price breaks can be loaded through the COGS CSV importer instead of the modal, using the same min_quantity and cost_basis columns documented in full at Importing COGS:

  • Add one row per break, sharing the same sku (or variant_id) and differing only in min_quantity and cost
  • Set cost_basis to per_group for a total-for-the-quantity row, or leave it blank/per_unit for a per-item row
  • The downloadable CSV template (Profit > COGS > Import) already includes empty min_quantity and cost_basis columns, pre-filled per variant, ready for you to fill in

Price Breaks Are Edited in Place - Unlike Ordinary Cost History

COGS Accuracy explains the general rule for cost entries: add a new dated entry, never edit the old one, so historical profit stays untouched. Price breaks are the deliberate exception. A merchant thinks of their break ladder as one current list, so saving the Price Breaks modal replaces the whole ladder: every break row for that variant is deleted across its entire effective-date history and rewritten at today's date. Any break you removed is actually removed, not superseded by a newer row that quietly outranks it.

The base row (shown as quantity 1 in the modal, stored internally as the quantity-0 entry) is treated more gently: its older history is left alone, so back-dated cost cards survive. It is still re-saved at today's date exactly as the inline cost editor would, which means two things follow: it is written as a manual entry, and its handling cost is reset to 0 - the same sharp edge described in COGS Accuracy.

Because removed rows may have been effective long ago, the recompute triggered by a save runs from the earliest date any deleted break was effective from, not from today.

One consequence: the Price Breaks modal always saves at today's date. To schedule a future price-break change, there is currently no equivalent of Schedule Price Change for the ladder itself - only the base unit cost supports a future effective date.

Best Practices

1. Match Bundles Measured to How the Bundle Actually Arrives

Check an example order in Customers > Orders before choosing a scope. If the bundle is one line at the full quantity, the default "Per order line" already works and you do not need to change anything.

2. Enter Numbers Exactly as Your Supplier Wrote Them

Use "a total for the quantity" whenever your invoice shows a lump sum - resist the urge to divide by hand. Division errors are the most common source of a price-break ladder that quietly overcosts or undercosts orders.

3. Watch the Preview Before Saving

The "What this means" panel restates your largest break as a sentence and names the current Bundles-measured scope. If either reads wrong, fix the ladder or the scope before saving rather than after.

Troubleshooting

My quantity break is not firing

Cause: The bundle is arriving as several separate line items, but Bundles measured is still "Per order line" (the default only looks at one line's own quantity). Solution: Check how the bundle actually appears on an order, then switch to "Per product in the order" (same product, split lines) or "Across the whole order" (mixed products, priced by total parcel contents).

The per-item cost shown looks wrong

Cause: A basis mismatch - a total was entered while "a price per item" was selected, or the reverse. Solution: Re-check the "Your supplier quotes" setting against your invoice, and watch for the amber warning that appears when per-item cost rises with quantity.

I get a "duplicate quantity" error

Cause: Two break rows share the same quantity floor. The modal reports "You already have a price break at that quantity." Solution: Each quantity in the ladder must be unique, and every break quantity must be a whole number of 1 or more. Remove or renumber the duplicate row.

I removed a break, but a past order still shows the old cost

Cause: Saving the ladder triggers a background recompute of historical profit; large stores can take a few minutes to fully catch up. Solution: Wait a few minutes and refresh. See COGS Accuracy for why product-level and order-level figures can briefly disagree after any cost change.

Frequently Asked Questions

Does a price break replace my base cost?

No. The quantity-1 row is your ordinary unit cost and keeps normal effective-dated history, exactly like the inline cost editor. Only the break rows above it (quantity 2 and up) are replaced wholesale each time you save.

Can I schedule a price-break change for a future date?

Not from the Price Breaks modal - it always saves at today's date. Use the base cost's own Schedule Price Change flow (see COGS Management) if you need a future-dated change to the unit cost itself.

What currency are price breaks entered in?

Your store currency. The Price Breaks modal does not offer a currency selector.

Does changing Bundles measured affect fulfilment cost too?

Yes, if you use a "the whole order" (parcel) fulfilment rate - the same setting decides how many line items are grouped together for both product-cost breaks and parcel-priced fulfilment. See Fulfillment Costs.

Is this the same as Country Fulfillment Rates?

No. Price breaks change your product cost (COGS). Country Fulfillment Rates change your delivery cost and can also carry quantity tiers, but the two are configured, stored, and resolved independently - a variant can have both at once.


Last updated: August 23, 2026

Last updated on

On this page