Volume Discounts — Reasoning & Recommendations

A 3-tier pattern for consumable supplies on PDP, PLP, cart, and account surfaces
May 2026
View on PDP →
Markdown source →

01TL;DR

Use BigCommerce's native Bulk Pricing Rules to drive volume discounts. Render a 3-tier table on the PDP between price and ATC that live-highlights the active tier as qty changes. Show a "Bulk save" pill on PLP cards. Show a nudge on cart rows when a buyer is one tier away from a break, plus a summary savings line.

Fully shippable in Stencil — no app, no replatform. Phase 3 (contract pricing + approval flows) starts to push toward Catalyst.

PhaseSurfaceEffort
Phase 1 PilotUniform 3-tier table (1–5 / 6–11 / 12+) on PDP, badge on PLP, nudge + summary on cart.Low — Stencil native; theme edits only
Phase 2 IterateCategory-driven tier templates per SKU family. Per-SKU overrides.Low — admin config only
Phase 3 FutureContract pricing per National Account + approval-flow integration in the nudge.Higher — B2B Edition Customer Groups + Approval Workflows

02Current state

Consumable SKUs (vacuum bags, brushes, chemicals) are the highest-volume B2B reorder items. The current site shows base unit price only — there's no signal that buying in quantity costs less, even when the warehouse runs informal bulk pricing for known accounts.

Why it matters: B2B procurement buyers are trained to expect price breaks for volume. Hiding the tier is leaving margin on the table. Surfacing it converts the qty-1 buyer into a qty-12 buyer in one decision.

03References

Grainger volume pricing

Per-SKU tier table, admin-edited, rendered inline under the price. Tier is computed live as qty changes.

Amazon Business "Quantity Discounts"

3–5 tiers, live-highlight active tier, "you saved $X" at checkout.

McMaster-Carr

Minimalist inline price-per-quantity. Engineers know what they want — no fanfare.

HD Supply

Contract-driven per Company, surfaced inline on the PDP for logged-in customers with that contract.

04What BC Stencil gives us

Native Bulk Pricing Rules — directly addresses this feature without any apps or custom code.

  • Admin: Settings → Products → [Product] → Pricing → Bulk Pricing Rules. Unlimited tier rules per product.
  • Stencil rendering: stock templates iterate {{#each product.bulk_discount_rates}} to render the tier table.
  • Cart engine: BC computes the applicable rate automatically at cart and checkout.
  • API: /v3/catalog/products/{product_id}/bulk-pricing-rules

Plays well with Customer Group pricing (B2B Edition) and the Promotions API (coupons stack on top).

05Stencil limitations

  • No native "you're N away from the next tier" nudge on the cart page. Custom theme JS required.
  • No native cart-summary savings line. Bulk-pricing savings are baked into the line price, not surfaced separately. We compute and show it via theme template logic.
  • PLP card "has bulk pricing" badge isn't a native field, but product.bulk_discount_rates is queryable in the PLP loop — render iff non-empty.
  • No native UI for category-driven tier defaults. Phase 2 needs admin-side automation, not a Stencil feature.
  • Approval-workflow integration (Phase 3) requires custom integration with B2B Edition's Approval API.

06App marketplace shortlist

AppWhat it doesWorth it now?
(Native) Bulk Pricing RulesBuilt into BC core — qty tiers, %/$ off, per-SKU config. Use this
Discounts by Customer GroupTier discounts gated by customer group.Maybe — B2B Edition covers most
Better Bulk DiscountsSlicker admin UI for native Bulk Pricing Rules.Skip — no new capability
Generic urgency/countdown apps"Add N more to save X%" overlays.Skip — build in Caster

07Caster impact

  • New pattern .volume-pricing — 3-tier inline table, active-tier highlight, pairs with .pdp-price. Inline in v2/pdp.html for now; promote to Caster /patterns/ on second consumer.
  • New pill variant .pill--volume (PDP) and .product-card__badge-volume (PLP) — amber-tinted, indicates "has bulk pricing."
  • New cart pattern .cart-row__nudge — dashed amber callout under row meta. "Add N more to save X%."
  • New summary line .summary__savings — single success-tinted strip under grand total.

Downstream impact: teams adding new PDPs should include the volume pill iff the SKU has bulk pricing. Same for PLP cards — show iff product.bulk_discount_rates.length > 0.

08Phased recommendation

Phase 1 — Uniform default tiers

Single uniform rule across all consumable SKUs: 1–5 base, 6–11 saves 5%, 12+ saves 15%. Admin config; no code beyond the theme template edits.

What "winning" looks like: measurable shift in average order qty for consumables, repeat-order frequency drops (buyers order larger less often), no measurable impact on cart abandonment.

Phase 2 — Category-driven tiers (data-gated)

Different categories warrant different tier tables. Paper bags ≠ chemicals ≠ batteries. Trigger: 1–2 months of Phase 1 data showing which tiers convert per category. Group SKUs into 3–4 "tier templates."

Per-SKU overrides for outliers (4-pack SKU vs. single-unit SKU).

Phase 3 — Contract pricing + approval flows

National Account customers see their contract tiers via B2B Edition Customer Groups. For accounts with Approval Workflows, the cart nudge gates differently: "Adding 5 more saves 5% — Tom needs to approve" vs. the retail "Add 5 →".

Trigger: top-10 accounts asking for negotiated breaks beyond public tiers, plus 3+ accounts with Approval Workflows configured.

09Implementation notes

Stencil theme edits required (Phase 1)

  1. PDP price block — volume-pricing partial under templates/components/products/, iterates product.bulk_discount_rates.
  2. PLP card — extend card.html to render the volume badge iff bulk_discount_rates.length.
  3. Cart row — extend cart/content.html with the dashed amber nudge, computing "qty until next tier."
  4. Cart summary — sum (line.list_price - line.sale_price) across all bulk-priced lines.

Analytics

Tier conversion (qty distribution across tiers), nudge engagement (click-through rate per SKU), AOV shift on bulk-priced PDPs vs. control, repeat-order cadence (should lengthen for volume-purchased SKUs).

Accessibility

Tier table should be a real <table> with <caption> and <th> for screen readers (the prototype uses CSS grid for the visual). Active-tier change announces via aria-live="polite". "Bulk save" pill has explicit text, not icon-only. Cart nudge "Add 5 →" is a real button with descriptive aria-label.

10Catalyst / replatform candidacy

Phase 1 ships well in Stencil. Bulk Pricing Rules is one of BC's strongest native features; the tier UI is a straightforward theme edit.

Phase 3 starts to feel headless. The interaction between volume pricing + contract pricing + approval workflows is a multi-system orchestration: catalog price, customer-group price, B2B Edition approval queue, cart engine. Stencil templates can do it but the logic becomes spaghetti at the partial level. Phase 3 is a forcing function for Catalyst — the React storefront can express the conditional UI cleanly and call BC APIs server-side.

Recommendation: ship Phase 1 + Phase 2 in Stencil. When Phase 3 work begins, treat it as the first piece of a Catalyst replatform rather than further Stencil-template surgery.

11Sources