Skip to main content

Tiered and volume pricing

Propeller supports bulk pricing — discounted prices that apply when a customer orders larger quantities. This page covers how to query and display tiered pricing.

How bulk pricing works

Bulk prices are quantity-based price tiers configured on a product. When a customer adds a product to the cart with a quantity that falls within a bulk price tier, the lower price is automatically applied.

For example, a product might have:

QuantityPrice (excl. tax)
1–9€10.00
10–49€8.50
50+€7.00

Propeller calculates the correct price based on the cart quantity. You don't need to apply the tier logic in your frontend.

Orders outside configured volume tiers fall back to the list price.

Discount calculation types

The priceData.bulkPriceDiscountType indicates how bulk discounts are calculated:

TypeDescriptionExample
COST_PRICE_PLUSCost price plus a percentage marginCost €40 + 25% margin = €50
LIST_PRICE_MINList price minus a percentageList €100 − 20% = €80
NET_PRICEFixed amount (direct price per unit)Price = €75

Querying bulk prices

Use the bulkPrices field on a product to retrieve the available price tiers:

query GetBulkPrices($productId: Int, $taxZone: String) {
product(productId: $productId) {
price(input: { taxZone: $taxZone }) {
gross
net
type
}
priceData {
list
bulkPriceDiscountType
}
bulkPrices(input: { taxZone: $taxZone }) {
gross
net
discount {
quantityFrom
validFrom
validTo
}
}
}
}

Response:

{
"data": {
"product": {
"price": { "gross": 24.25, "net": 29.34, "type": "DEFAULT" },
"priceData": { "list": 24.25, "bulkPriceDiscountType": "NET_PRICE" },
"bulkPrices": [
{
"gross": 23.43, "net": 28.35,
"discount": { "quantityFrom": 8, "validFrom": null, "validTo": null }
},
{
"gross": 22.35, "net": 27.04,
"discount": { "quantityFrom": 12, "validFrom": null, "validTo": null }
},
{
"gross": 21.95, "net": 26.56,
"discount": { "quantityFrom": 16, "validFrom": null, "validTo": null }
},
{
"gross": 20.34, "net": 24.61,
"discount": { "quantityFrom": 20, "validFrom": null, "validTo": null }
}
]
}
}
}

Bulk price fields

FieldDescription
grossTier price excluding tax
netTier price including tax
discount.quantityFromMinimum quantity for this tier to apply
discount.validFrom / discount.validToDate range when this tier is valid (null means no restriction)

The price.type field returns BULK_SALES_PRICE or BULK_COST_PRICE when a bulk tier is active.

Volume-based cost prices

Separately from bulk sales pricing, Propeller supports cost prices that vary by quantity. These are configured on the product's priceData.costPrices field:

priceData {
costPrices {
quantityFrom
value
}
}

Each cost price has a quantityFrom threshold and a value per unit. Volume-based cost prices are used for margin calculations when the discount type is COST_PRICE_PLUS.

Bulk pricing in the cart

When items are added to the cart, Propeller automatically applies the correct bulk price tier based on the total quantity. The cart response reflects the tiered price:

query {
cart(id: "018dcc9a-f965-7434-8fad-369aa9a8c276") {
items {
productId
quantity
price
priceNet
totalPrice
totalPriceNet
}
}
}

Next steps