Volume & Tiered Discount

Overview

The Volume & Tiered Discount function follows the principle “the more you buy or spend, the bigger the discount.” It defines a series of escalating thresholds. By default, the customer receives the highest tier the cart reaches. On the order subtotal, you can also make each tier add to the one below it (see Incremental Tiers).

PropertyValue
Name in ShopifyVolume & Tiered discount function
Discount ClassesProduct, Order, Shipping
BillingPro plan and above
Condition SupportAll 16 condition types, the same as the Conditional function. The shipping discount checks only the 9 cart-level conditions.

Tiered discounts suit volume incentives, spending rewards, and wholesale pricing structures where you want to encourage larger orders.

Tier Types

The function supports three tier types. Each one measures a different metric to decide which tier the customer qualifies for. The editor calls this setting Tier based on.

Tier TypeEditor LabelMetricScopeBest For
cartQuantity (default)Cart total quantitySum of all cart line quantitiesCart-wide: all eligible items receive the same tier discountVolume discounts across the entire cart
cartSubtotalCart subtotal amountCart subtotal amount (before discounts), in store currencyCart-wide: same as aboveSpending threshold rewards
lineQuantityLine item quantityQuantity of each individual cart linePer-line: each line is evaluated independently and may land on a different tierWholesale or per-SKU quantity breaks

The lineQuantity type works per line only for product discounts. Order and shipping discounts use the sum of all cart line quantities, as cartQuantity does.

You enter cartSubtotal thresholds in your store currency. Checkout converts them to the customer’s currency.

Choosing the Right Tier Type

  • Use cartQuantity when you want the total number of items in the cart to determine the discount level. Example: “Buy 5+ items, get 15% off everything.”
  • Use cartSubtotal when the dollar amount matters more than the item count. Example: “Spend $100+, get 10% off.”
  • Use lineQuantity when each product should be evaluated on its own. Example: “Buy 10+ of the same SKU for wholesale pricing.” With this type, a customer buying 12 of Product A and 2 of Product B would get the 10+ tier on Product A only.

What Counts Toward a Threshold

The cartQuantity and cartSubtotal metrics count every line in the cart. Conditions, the product scope, and exclusions decide which lines get the discount. They do not change the count.

Gift cards count toward the metric, but they never receive a discount.

Tier Resolution Algorithm

By default, the Tier calculation setting is Highest tier reached. Tiers are then resolved with a simple descending-threshold algorithm:

  1. Sort all tiers in descending order by their threshold value.
  2. Walk through the sorted list and return the first tier where the measured metric is greater than or equal to the threshold.
  3. If no tier matches, fall back to the rule group’s base discount (if defined).

The editor requires a threshold greater than 0 on each tier, and a discount value on each tier.

Example

Given tiers with thresholds at 3, 6, and 10, and a cart quantity of 7:

Tier ThresholdCart Quantity (7) >= Threshold?Result
107 >= 10? NoSkip
67 >= 6? YesMatch
3(not evaluated)N/A

The customer receives the tier-6 discount.

Incremental Tiers

With Tier calculation set to Incremental: each tier adds to the one below, the tiers add up on the order subtotal:

  1. The lowest tier that the cart reaches takes its percentage of the whole order.
  2. Each higher tier that the cart reaches adds its percentage of only the amount above its own threshold.
  3. Below the lowest tier, the cart gets no discount.

Checkout gives the total as one fixed-amount order discount. The discount shows the message of the highest tier reached.

Example

Tiers at 500 (11%) and 2,000 (11%), with cartSubtotal thresholds:

Order SubtotalCalculationDiscount
Below 500No tier reached0.00
50011% of 50055.00
1,00011% of 1,000110.00
2,00011% of 2,000220.00
2,50011% of 2,500 + 11% of 500275.00 + 55.00 = 330.00
3,00011% of 3,000 + 11% of 1,000330.00 + 110.00 = 440.00

A 2,500 order with this discount costs the customer 2,170.

Requirements

The Tier calculation select shows only when the discount has the Order class and the rule group has Apply to order subtotal turned on. With Incremental selected, the editor blocks the save unless every requirement below is met.

RequirementReason
Tier type is Cart subtotal amount (cartSubtotal)Incremental tiers measure the order subtotal.
No product target and no shipping targetIncremental tiers apply only to the order subtotal.
Every tier is a percentageEach tier adds a percentage of part of the order.
Every tier has a different thresholdTwo tiers at one threshold would count the same amount twice.
No saved base discountIncremental tiers give nothing below the lowest tier. Use Remove the saved base discount to clear one.

The amount includes only the lines that the order discount covers. Gift cards, lines that fail the product-level conditions, and excluded products, variants, collections, and tags are left out. Gift cards still count toward reaching a tier.

The AI assistant can write incremental tiers. Ask for “an additional 11% only on the amount above 2,000”, for example. An AI update keeps the setting unless you ask to change it.

Incremental Configuration Example

{
  "version": "1.0",
  "strategy": "first",
  "ruleGroups": [
    {
      "id": "rg_1",
      "name": "Incremental Spend Tiers",
      "type": "tiered",
      "enabled": true,
      "conditionLogic": "and",
      "conditions": [],
      "targets": { "order": {} },
      "tierType": "cartSubtotal",
      "tierCalculation": "incremental",
      "tiers": [
        { "threshold": 500, "discount": { "type": "percentage", "value": 11 }, "message": "11% off from 500" },
        { "threshold": 2000, "discount": { "type": "percentage", "value": 11 }, "message": "An additional 11% on the amount above 2,000" }
      ]
    }
  ],
  "rejectionRules": []
}

Real-Life Use Cases

1. Volume Quantity Discount

Encourage customers to add more items to their cart with escalating percentage discounts.

ThresholdDiscount
2+ items10% off
5+ items20% off
10+ items30% off

Tier type: cartQuantity.

2. Spending Threshold Rewards

Reward higher-value carts with better discounts. This encourages customers to reach the next spending level.

ThresholdDiscount
$50+5% off
$100+10% off
$200+20% off

Tier type: cartSubtotal.

3. Wholesale Per-Line Pricing

Offer quantity breaks on a per-product basis. B2B and wholesale storefronts commonly use this pattern.

ThresholdDiscount
10+ of the same item15% off that item
25+ of the same item25% off that item
50+ of the same item35% off that item

Tier type: lineQuantity.

4. Tiered Shipping Discounts

Reduce shipping costs as the order value increases, with free shipping at the top tier.

ThresholdDiscount
$50+$5 off shipping
$100+Free shipping (100% off)

Tier type: cartSubtotal. Target: Shipping.

5. Incremental Spend Discount

Give 11% off orders of $500 or more, plus an additional 11% on the amount above $2,000.

Tier type: cartSubtotal. Tier calculation: Incremental. Target: Order subtotal.

Step-by-Step Setup

The following walkthrough creates a volume quantity discount with three tiers.

Step 1: Create the Discount

Navigate to Shopify Admin > Discounts > Create discount. Choose either Automatic discount or Discount code. In the app selection, pick Volume & Tiered discount function.

Step 2: Select the Tier Type

In the rule builder, set Tier based on to Cart total quantity. This tells the function to sum all item quantities in the cart when resolving tiers.

Step 3: Define the Tiers

Add three tiers:

TierThresholdDiscount TypeValueMessage
13Percentage10%“Buy 3+ save 10%“
26Percentage15%“Buy 6+ save 15%“
310Percentage20%“Buy 10+ save 20%”

Each tier can be a percentage or a fixed amount. A fixed price is available when the discount has the Product class, or when the tiers set only the shipping discount. A fixed price gives no order discount.

Step 4: Check for a Saved Base Discount

A base discount applies where no tier applies: below the lowest tier threshold, or on every cart when there are no tiers. The editor has no field to create one. A base discount comes from the AI assistant or the Admin API, for example a 5% base discount for any cart with at least 1 item.

When a rule group has a saved base discount, the tier editor shows it with its value. Click Remove the saved base discount to give no discount below the lowest tier. If the rule group has no base discount, skip this step.

Step 5: Set the Target

  • Class: Product
  • Scope: All (every item in the cart benefits from the tier discount)

Step 6: Add Conditions (Optional)

If you want to restrict the tiered discount to certain customers or products, add conditions. For example, add a customerTag condition with value ["wholesale"] to limit the discount to wholesale-tagged customers.

Step 7: Save

Click Save to activate. The function immediately begins evaluating carts against your tier thresholds.

Configuration Example

The following JSON represents a volume quantity discount with three tiers and a base discount.

{
  "version": "1.0",
  "strategy": "first",
  "ruleGroups": [
    {
      "id": "rg_001",
      "name": "Volume Discount",
      "type": "tiered",
      "enabled": true,
      "conditionLogic": "and",
      "conditions": [],
      "targets": {
        "product": { "scope": "all" }
      },
      "discount": {
        "type": "percentage",
        "value": 5,
        "message": "Volume discount"
      },
      "tierType": "cartQuantity",
      "tiers": [
        {
          "threshold": 3,
          "discount": { "type": "percentage", "value": 10 },
          "message": "Buy 3+ save 10%"
        },
        {
          "threshold": 6,
          "discount": { "type": "percentage", "value": 15 },
          "message": "Buy 6+ save 15%"
        },
        {
          "threshold": 10,
          "discount": { "type": "percentage", "value": 20 },
          "message": "Buy 10+ save 20%"
        }
      ]
    }
  ],
  "rejectionRules": []
}

Key Fields

FieldPurpose
tierTypeDetermines which metric is measured: "cartQuantity", "cartSubtotal", or "lineQuantity".
tiersArray of tier objects. Each has a threshold, a discount definition, and an optional message.
thresholdThe minimum value the metric must reach for this tier to activate.
discount (rule group level)The base discount applied when no tier threshold is met. Acts as a fallback. Incremental tiers ignore it.
tiers[].discountThe discount applied when this specific tier is matched. Overrides the base discount.
tierCalculationOptional. "incremental" makes each tier add to the one below on the order subtotal. Leave it out for the highest tier reached.
shippingDiscountOptional. One shipping value for every cart. It replaces the tiers and the base discount for shipping.

Message Priority

When the function builds the discount message shown to the customer for a product or order discount, it follows this priority order:

PriorityFieldDescription
1 (highest)tier.messageThe top-level message on the matched tier object.
2tier.discount.messageA message defined inside the tier’s discount object.
3 (lowest)ruleGroup.discount.messageThe base discount message on the rule group, used when the base discount applies.

This lets you set a generic fallback message on the rule group while providing specific, context-aware messages on each tier. For example, the base message might say “Volume discount” while tier-specific messages say “Buy 3+ save 10%” or “Buy 10+ save 20%”.

With incremental tiers, the message comes from the highest tier reached: its message, else its discount.message.

For a shipping discount, the message comes from the object that supplies the value: the tier, the shippingDiscount, or the base discount.

Tiered Shipping Discount Example

Reduce shipping costs based on order value, with free shipping at $100+.

{
  "version": "1.0",
  "strategy": "first",
  "ruleGroups": [
    {
      "id": "rg_001",
      "name": "Tiered Shipping Savings",
      "type": "tiered",
      "enabled": true,
      "conditionLogic": "and",
      "conditions": [],
      "targets": {
        "shipping": { "scope": "all" }
      },
      "tierType": "cartSubtotal",
      "tiers": [
        {
          "threshold": 50,
          "discount": { "type": "fixedAmount", "value": 5 },
          "message": "Spend $50+ save $5 on shipping"
        },
        {
          "threshold": 100,
          "discount": { "type": "percentage", "value": 100 },
          "message": "Free shipping on $100+"
        }
      ]
    }
  ],
  "rejectionRules": []
}

Notice that tier discount types can differ within the same rule group. The $50 tier uses a fixed amount ($5 off shipping) while the $100 tier uses a percentage (100% off, meaning free shipping). Below $50, the cart gets no shipping discount.

For shipping, checkout takes the value in this order:

  1. The rule group’s own shippingDiscount, when it has one. It applies to every cart.
  2. The discount of the tier the cart reaches.
  3. The base discount, below the lowest tier.

Next Steps