Skip to content

Quantity Breaks – Setup Guide

Theme discounts are visual only

  • The discount settings in this block control how bundle prices are displayed on the product page.
  • You must manually create the actual discounts in your Shopify admin (Dashboard). Checkout prices follow Shopify’s discount rules.
  • Ensure the discounts you set up in Shopify match what you configure here, so the shown prices align with the final checkout total.

See: Creating Discounts in Shopify and Shopify’s Discounts overview.

Use Quantity Breaks to offer bundle pricing for buying multiple units (e.g., 2-pack, 3-pack) with percentage or fixed discounts, optional gifts, and shipping labels.

This guide complements the Quantity Selector Block doc and focuses on setting up Breaks correctly and predictably.

Before you start

  • You must enable the Quantity Selector block and set Selector Type to Breaks.
  • If you plan to use Shopify-native discount codes, review our basics guide: Creating Discounts in Shopify. The UI here shows bundle prices; the actual checkout price is always authoritative.

Concepts at a glance

  • Breaks are quantity tiers: up to 4 (Break 1–4). A break is active when its quantity is > 0.
  • Discounts per break: None, Percentage, or Fixed amount.
  • Display styles: Grid (cards) or Pills (list-style with optional gift bar).
  • A single break can be the default selection. If the chosen default is invalid (quantity 0), the first active break becomes default automatically.
  • Pricing math is computed from the current variant price at render time. Compare-at price is used for strikethrough and savings.

Step 1 — Choose your style and default

  • Break Style: Grid for a compact card grid or Pills for a vertical list, ideal when showing gifts.
  • Default Break: Which tier should be preselected. If it’s disabled, the first enabled tier is used.
  • Optional title: Toggle Show title and customize the heading, e.g., “Bundle & Save”.

Step 2 — Configure each break

For each active break (1–4):

  1. Quantity
  • Set Break X quantity to the units in the bundle (e.g., 1, 2, 3, 4).
  • Set to 0 to disable a break.
  1. Discount
  • Discount type: None, Percentage, or Fixed.
  • Percentage: enter X% off as a whole number (e.g., 15 for 15%).
  • Fixed: enter a currency amount (e.g., 10 means $10 off the bundle total).

How the math works

  • Base bundle price = variant price × quantity
  • If Percentage: bundle price = base bundle price − (base × percent/100)
  • If Fixed: bundle price = base bundle price − (fixed × 100¢) [we convert to cents under the hood]
  • Compare-at price = variant compare-at × quantity; savings = compare-at − bundle price (only if > 0)
  • Price each = bundle price ÷ quantity
  1. Labels and badges
  • Label: short headline for the option. Supports dynamic tokens below.
  • Save text: optional subtext. Supports dynamic tokens below.
  • Badge: small highlight label. Choose position: Default, Top right, or Bar.
  1. Images (optional)
  • Show a small image per break (product variant, bundle collage, etc.).
  1. Gifts (Pills style only)
  • Toggle Show gift to display a gift bar under the button.
  • Optionally upload a gift image and write rich text to describe it (e.g., “+ FREE gift with this option”).
  1. Shipping info (optional)
  • Toggle Show shipping info to surface shipping labels per break.
  • Either check Free shipping or set a specific Shipping price text (e.g., "$4.99").
  • Control the generic labels via Free shipping text (e.g., “Free shipping”) and Shipping label text (e.g., “shipping”).

Dynamic tokens you can use

You can reference the following tokens in Badge, Label, and Save text. They’ll be replaced per break:

  • [quantity] – The quantity for this break (e.g., 3)
  • [price] – Bundle price, formatted (e.g., $49.99)
  • [compare_price] – Compare-at bundle price, formatted
  • [price_each] – Unit price after discount, formatted
  • [compare_price_each] – Unit price before discount, formatted
  • [amount_saved] – Amount saved across the bundle, formatted
  • [amount_saved_rounded] – Amount saved rounded up to nearest whole currency unit

Examples

  • Label: Buy [quantity]
  • Save text: Save [amount_saved] or Only [price_each] each
  • Badge: Best deal or Save [amount_saved_rounded]

Examples

Two-tier example

  • Break 1 quantity: 1, Discount: None
  • Break 2 quantity: 3, Discount: Percentage = 15
  • Label 1: Buy [quantity] → Shows single unit
  • Label 2: Buy [quantity] and Save text: Only [price_each] each
  • Badge 2: Most popular

Four-tier example

  • Quantities: 1, 2, 3, 5
  • Discounts: None, 10% off, $15 off, 20% off
  • Use Grid style for 4 cards; make break 2 or 3 the default depending on margin strategy.

How this interacts with Shopify discounts

  • The block visually shows discounted bundle prices on the product page. Checkout still applies Shopify pricing rules.
  • If you also run Shopify discount codes or automatic discounts, those will stack or not based on Shopify’s rules, not the theme. See Shopify’s guidance:
  • If you want the same bundle logic applied in cart/checkout, create matching discounts in Shopify or via apps. Start here: Creating Discounts in Shopify.

Troubleshooting

  • Default break doesn’t activate: ensure the default’s quantity is > 0. If not, the first active break becomes default.
  • Savings not showing: savings only show if compare-at price > calculated bundle price.
  • Fixed discount looks off: enter the amount in major currency units (e.g., 10 = $10). We convert to cents internally.
  • Token text appears literally: ensure tokens are spelled exactly and placed in Badge, Label, or Save text fields.
  • Shipping info missing: enable Show shipping info and set either Free shipping or a Shipping price for that break.
  • Gifts not visible: gifts render only in Pills style with Show gift enabled.

See also