How to let customers choose the quantity of each flavor in a pack on Shopify

Three glazed, two chocolate, one jelly — not "pick six different things." They are not the same feature.

If you sell doughnuts, cans, cupcakes, juices or cookies, you already know the request. The customer doesn't want six different flavours. They want three of the good one, two of the second one, and one of something they're curious about.

This gets asked on the Shopify forums constantly and it almost never gets a straight answer, because most replies quietly answer a different question — "pick any 6 items" — which is not what was asked.

The distinction matters enough to name properly, because it's the thing to check before you pay for any app.

Two features that look identical and aren't

What the shopper doesTypical name
Pick N distinctTicks six different products from a grid. Each item once.Mix and match, build a box, pick any 6
Quantity per optionSets a number next to each product. 3 · 2 · 1 · 0 · 0 · 6.Rarely named at all

The first is a checkbox grid. The second is a list of number inputs that has to add up to your pack size.

They feel like the same feature to a merchant, which is exactly why people buy the wrong app. A demo showing a beautiful six-item picker tells you nothing about whether a shopper can put the same doughnut in twice.

The one question to ask any app before you pay: "Can a customer put three of the same item in one box?" Not "does it do mix and match." The second question gets you a yes from apps that can't do the first.

Why variants can't do it

The instinct is to build it with product options. It fails quickly, and for a specific reason worth understanding so you don't keep circling back to it.

Shopify raised the variant ceiling to 2,048 per product in 2024, on every plan. But the option limit is unchanged at three — and Shopify's bundle documentation is explicit that you can't combine quantity options.

A twelve-slot pack across twelve flavours isn't three options. And the combination count is brutal: choosing 6 from 12 with repeats allowed is 12,376 possibilities. At twelve slots it runs to millions.

The variant ceiling isn't your obstacle. The option ceiling is, and no app can raise it.

The four ways it actually gets built

1. Quantity boxes as line item properties — free

Add a number field per flavour to your product template. The shopper's numbers ride along with the item into the cart and onto the order as text.

Free, and genuinely fine for made-to-order businesses. Two things to know:

Inventory: not tracked. Good for made-to-order, risky off a finite shelf.

2. Pre-built quantity variants — free

Instead of letting shoppers set numbers, you decide the useful combinations: "6 Glazed + 6 Chocolate," "4/4/4 Mixed," "Baker's Choice." Each is a real variant with real stock.

This is the underrated option. It isn't the feature that was asked for — but for a lot of shops, five sensible pre-built packs outsell a build-it-yourself grid, because most customers don't actually want to make twelve decisions about doughnuts.

Inventory: accurate. Costs nothing. Try this before buying anything.

3. Separate quantity fields with a bundle app — paid

The real version. Shopify's supported route for shopper-built boxes is the Cart Transform Function, which lets one cart line resolve into its true components at checkout, so each can decrements its own stock.

Shopify's own docs allow up to 150 components on a customized bundle, which is far more headroom than any pack needs.

One honest caveat straight from those docs: with cart-transform bundles, apps must maintain their own inventory logic on storefronts. Components get checked at cart and checkout, so a genuine oversell is blocked — but the product page can still show a flavour as available after it's gone, unless the app does that work. Worth asking about specifically.

Inventory: accurate at checkout. Product-page accuracy depends on the app.

4. Twelve separate line items — free, and ugly in a specific way

Skip boxes entirely. Let people add cans individually and apply a quantity discount at twelve.

Inventory is perfect, because every line is a real product. It costs nothing. Some bundle apps work this way deliberately.

The cost is presentational and operational: the cart shows twelve lines instead of one box, the order does too, and your packer sees a list rather than "1 × Build Your Own 12-Pack." For a small operation that's genuinely fine. At volume it's a picking-error generator.

Inventory: perfect. Presentation: poor.


The rules that make it work in practice

Whatever you build, these three settings decide whether the feature is pleasant or a source of refunds.

Exactly N, not "up to N"

A pack of twelve should refuse to add at eleven. "Up to twelve" produces short boxes and confused customers. Enforce the total server-side, not just in the browser.

A per-flavour maximum

Without one, somebody orders twelve of your hardest-to-make item. A cap of four per flavour on a twelve-pack keeps the box mixed and your production sane. This one setting prevents most of the operational pain.

Zero is a valid answer

Obvious, and frequently broken. If your form requires at least one of everything, it isn't a build-your-own box — it's a fixed pack with extra steps.


Which to use

Your situationUse
Made to order daily, stock isn't the constraintLine item properties — free
A handful of popular combinationsPre-built quantity variants — free
Low volume, don't mind a long cartIndividual items + quantity discount — free
Shopper sets quantities, finite stock, one clean order lineA bundle app with quantity per option

Three of the four are free. Only the last row needs a paid app — and only because it's solving presentation and inventory at the same time.


We build Choosebox for that last row. A shopper can take multiples of one item inside a minimum and maximum you set, and components stay real products so stock doesn't drift. If one of the free rows fits, use it — we'd rather you kept the money.

Related: How to let customers choose flavors on Shopify · Any 6 products for one fixed price

Sources: Shopify developer documentation — product bundles · Customized bundles & Cart Transform