What this does
Offer your customers tier-based discounts directly from the product page. Define quantity tiers (e.g. 1, 3, 6, 12 units) with a discount per tier — Subi shows the tiers and the savings on the product page, lets the customer add the chosen quantity to cart, and a Shopify Function applies the right discount at checkout. The customer can also subscribe at the same time and stack the subscription discount on top.
No more relying on quick-checkout-links or hiding Subi's widget behind FastBundle.
What the customer sees
On a product page covered by an active Volume Discount plan, Subi replaces the regular subscription widget with the volume-discount widget. The customer sees the available tiers along a savings track, the per-tier discount, and a live subtotal that updates as they bump the quantity. They can pick a tier, optionally choose a billing frequency, and Subi keeps the theme's quantity stepper in sync with the widget — change the qty in either, and the other follows.
Add to cart adds a hidden line property that tells our Shopify Function which plan to use; the discount is applied at checkout.
How to create a Volume Discount plan
Go to Selling plans → New plan.
Pick the Volume Discount card.
Name the discount and add tiers — each tier needs a title (what the customer sees) and a value (the percentage or fixed-amount discount).
Choose which products it applies to (Specific products, Collections, or All products) and pick the purchase type — one-time, subscription, or both.
(Optional) Add billing intervals — every 30 days, every 60 days, etc. — each with its own subscription discount. The subscription discount stacks on top of the tier discount.
Save.
How the discount applies at checkout
The Function reads the line property and matches the cart quantity for that line against the merchant's tiers.
Below the smallest tier minimum, no discount is applied to that line.
If the customer also chose a subscription billing interval, the per-interval subscription discount stacks on top of the tier discount.
Lines without the line property are ignored — non-VD products in the same cart are unaffected.
Stacking with regular subscriptions
If a product has both a regular subscription plan and a Volume Discount plan, Subi shows the Volume Discount widget — the regular subscription widget is suppressed on that product. The customer still gets a subscription option through the volume-discount widget's frequency selector.
What's not in this version
Customer portal qty editing for VD lines — coming in the next release. For now, customers can subscribe to a Volume Discount plan from the storefront, but if they later change quantity from the customer portal the tier won't recompute. We'll ship the recompute and tier-transition banners shortly.
Lock to tier quantities — there's a row labelled Coming soon on the plan form. v1 always allows the customer to pick any quantity inside a tier range; the lock-to-quantities option is on the roadmap.
Per-line tier override in the admin, multi-currency tier pricing nuances beyond Shopify's currency-conversion defaults.
Why we built this natively
Until now, merchants who wanted volume discounts on subscriptions had three workarounds, all with downsides — quick-checkout-links (no widget), FastBundle integration (two widgets, subscription discounts invisible), or a generic automatic-discount app (no PDP visibility). The native Volume Discount plan removes those tradeoffs and lets the discount tier and the subscription option live in the same widget.
For developers
The SDK fetches each VD product's data on demand via Shopify's
/products/{handle}.jsat storefront render time, so plans aren't capped by Shopify's 128-itemlist.product_referencemetafield limit.Add-to-cart adds the line property
_volume_discount_plan_id; the Function keys off this property and the line's selling plan to apply the right discount.Backend exposes CRUD endpoints under the volume-discount-plan namespace; selling plans are created with 0% pricing policies and the real discount lives on the VD plan record so the Function can read it.



