Selling inventory-limited products with inventory-unlimited frame variants

Shopify’s built-in variants feature is not really appropriate for our scenario. We sell physical products (vintage college pennants) that require at choice of variant options (frame colors) but the availability of each option is not at all dependent on product inventory (we have an unlimited supply of frames).

Shopify’s built-in variants feature requires us to distribute our inventory across the frame options (for example, 4 total Indiana products have to be listed as, say, 2 black, 1 mahogany, and 1 white). Once the inventory goes down to two, one variant will show as out of stock, which isn’t accurate in real life and means a missed sale from a customer who wanted that variant.

If we had 2 total items, and listed 2 for each variant and then tried to trigger at order time a custom automation (through, say, the Mechanic app) that decrements the inventory for other variants, we could run into overselling, if someone ordered one of each variant.

If we use Liquid Code for variants on the product page template, it won’t show on our Instagram Shop.

Owner will consider Shopify apps that have a stellar rating (as we can’t risk the kind of problem stories we see in some of the app reviews). Trunk seems like it has stellar reviews, so we can look into that. Anyone using? And using successfully with Collective retailers, Instagram Shop, etc.

Has anyone with a similar product model (limited inventory/unlimited variants, working across all channels, limited complexity to make it easy for Shopify Collective partners to resell our product, etc.) found solutions that satisfy all the requirements?

I see Trunk is over $1k/year when significant volume is reached. Surprised that this isn’t something Shopify can handle natively, as it doesn’t seem like an unusual type of product offering.

Hi @AM-Seller :waving_hand: So the pennant the main product , with ALL options just being frames.
But frames are unlimited but you track them as a proxy for the real products inventory.

Once the inventory goes down to two, one variant will show as out of stock

If frames are unlimited all frames should be set to two.
That should only be incorrect if automations are sync’ing the inventory badly and not using deltas.
in mechanic most sync tasks need a prerun where you set all the inventory values to be equal THEN turn on the task
Or the “unlimited” description is ommiting detail that work to get into.

I do work like this on mechanic scripts, and you can find me in the mechanic slack from time to time.
Reach out if you need sync processes and info-arch gone over.

Hypothetically that’s just a purchase-maximums||qty-limits app that blocks any total variant qty greater than any one variants qty, but I don’t know of any that actually do that specific logic, though some might check for a metafield /shrug.

There’s Shopify checkout functions which only Plus stores can make private custom apps for AND enterprise plans have access to the fetch network request.
For non-Plus stores a public app would need to be made or found that can check for some pooled-inventory value on the product to stop the checkout.
A proxy value has it’s on possible sync/race-condition issues, but it’s the makedo approach since inventory isn’t in validations functions input on the merchandise productVariant at this time. For some dumb reason prolly like they’ve over abstracted the thing so stock no longer actually exists on the variants themselves and is shuffled away to InventoryItem.


Fixing on the frontends at least for the online sales channel, is doing stuff like draft orders process
e.g. https://tasks.mechanic.dev/create-a-draft-order-from-the-cart
Or as you said liquid customizations to set maximums on qty’s etc.
But no good solve for other channels.

And there’s just handling this AFTER checkout just having validations and remediation to automate before fulfillment, that should probably be in place anyway.


Alternative can just be to use bundling so the unlimited supply of frames is it’s own product and not complicating the variant space.
Or for stores on enterprise/Plus plans using combined listings.

But those can be their own problems when multichannel.

Thanks, Paul.

My concern with using Mechanic code is my assumption (if correct) that it would run after the order is placed. So even if I set each of the three frame options to 2 say, and I have 2 total in stock, and someone orders one of each (or, another example, if I only have 1 total and I set each to 1 and they order one black and on mahogany), then we’ll have an order come in for more than we actually have in stock (which we need to avoid).

At this point, to avoid the multi-channel challenge, we’re now thinking we can might just limit our Instagram store listings to only those rarer specialty items where customers already have to contact us for framing and matting preferences.

Currently, we use Custom Liquid code on the product page (that’s applied to any frame-included product) that renders a selector requiring users to choose a frame option (not using Shopify’s built-in tool), and that choice gets passed to the checkout page, and ultimately to the order itself so we know what frame to use. This way, our inventory is accurate and we’re not overselling. It does require me to work with our Collective retailers so that they know how to add the custom code to a separate page template that they apply to our product listings. I believe they also have to make it so that Quick Buy is turned off—at least for our collection of products (if they want it available for their other products)—to not bypass the selector code.

I’m thinking staying with Custom Liquid (if not selling our main products on Instagram Shop) might be our best bet, since I don’t know whether inventory apps can change inventory variant counts on the fly as users select them (i.e., before ordering), which I believe we’d need in order to avoid that same overselling issue mentioned above (unless these apps somehow bypass the Shopify variants feature altogether and offer their own means of doing this that easily works on Shopify Collective retailers sites too).

Thanks again!

Yeah, this is a common problem when you’ve got one limited item plus unlimited add-ons. The way most stores handle this is to split them into two products: the pennant as the main product with tracked inventory, and then the frame as a separate required product add-on (using something that forces a frame selection at purchase). That way your 4 Indiana pennants stay as 4 total, and customers pick their frame color without it affecting the count. Are you currently using any product customization or add-on functionality, or just the default variant setup?

Thanks! Recently, we stopped using Shopify’s default variants setup, in favor of some Custom Liquid code (on the product page template) that inserts button options for each of the three frame types that are required before being able to click the buy button (in addition to the code, this also requires that we and our Shopify Collective retail partners not have Quick Buy turned on for our products).