Key Insights in 60 Seconds
Skim the highlights, then jump to the verdict row that matches what you see.
What You'll Learn
A bundle that was Active yesterday is Draft this morning, and nobody opened it. Or the bundle shows zero while every component in it has stock. Or you open the bundle in the Shopify Bundles app and find a line you did not write: Option values were updated on the product and removed from the bundle. If one of those is your admin right now, this page is the diagnosis and the repair, in that order.
None of it makes sense at first because a bundle is a product of its own, tied to specific variants and option values of its components. Change the component and the bundle changes with it — and on the bundles pages of the Help Center we read on September 11, 2026, nothing in the admin announces that change beyond one message inside the Bundles app. Merchants have been describing the same bundles flipping from Active to Draft on Shopify Community since 2023.
What follows is what Shopify's own pages say causes it, what they leave undocumented, and who should be watching.
The Quick Verdict
Key takeaway
Two rows for what just broke, three for who should watch it next; every figure below is proven in the body.
What to do, by what you see and who edits your catalogue
| Your situation | Pick | Why |
|---|---|---|
| One live bundle went to Draft and nobody opened the bundle | Open it in the Bundles app and click Save and continue | A removed variant or option linked to the bundle, or a renamed variant or option title, puts the bundle in Draft; Save and continue updates the bundle and resolves the issue. If every fixed bundle went to Draft at once, check the store's eligibility too — see the third trigger. |
| The bundle shows 0 while every component is in stock | Check each component's per-bundle quantity and its continue-selling switch | Each component's stock divided by its per-bundle quantity, lowest result rounded down, sets the number; a continue-selling or untracked component is ignored in the calculation |
| A handful of bundles; only you edit components | A weekly look at Products, no automation | Both documented component triggers are edits to a component's variants or options; the bundle's page in the Bundles app names the culprit |
| Staff or imports touch components; you want to know the same day | A Shopify Flow alert on Product status updated | Condition on status plus a tag you set, action Send internal email; an outside call needs Send HTTP request, on Plus, Advanced or Grow |
| More than 100 bundles and feeds rewriting variants | A scripted check on the Admin API, or a watcher app, scoped first | The event-driven Flow alert, as built on this page, filters on a tag on every bundle, and the sweep's Get product data step returns up to 100 products at a time; the API's hasVariantsThatRequiresComponents field reports whether at least one of a product's variants requires bundle components, with no tag |
What Changed in a Component — and What It Did to the Bundle
Key takeaway
Everything below is keyed to the thing that changed, because that is what you can search your memory for: who touched which component, and when. Find the row, read what Shopify says happens, and go to the repair. Where Shopify says nothing, the row says so.
The changes Shopify documents
Key takeaway
A bundle is tied to particular variants and option values, and a value you removed stays connected to the bundle until the bundle is re-saved — which is exactly why the bundle stops being valid. Shopify puts it this way:
With bundles, deleted variants or options are still considered connected until the bundle is updated. This causes the bundle product to go into Draft status because it's no longer considered valid.
Six component changes and what each does to a fixed bundle
| Change in a component | What happens to the bundle | Where you see it | What Shopify documents | How to fix it |
|---|---|---|---|---|
| A variant or option linked to the bundle is removed from a component | The bundle drops to Draft: the removed value is still treated as connected until the bundle is updated, so the bundle is no longer valid | The bundle's page in the Bundles app — “Option values were updated on the product and removed from the bundle”, then the value's name; status Draft in Products | Shopify Bundles app — Troubleshoot bundle product keeps changing to draft status | Click Save and continue next to the product, or remove the product from the bundle and add it back |
| The title of a variant or option is renamed | Automatically triggers the bundle to change to Draft | The same message on the same page | The same Troubleshooting section | The same two remedies |
| A component's SKU changes | The bundle has to be deleted and recreated | Documented as a rule, not as a message on the bundle's page | Bundle eligibility and considerations | Delete the bundle and recreate it |
| A component's price changes, by hand or by price import | The bundle price does not update | The bundle product's own price in the admin | Shopify Bundles app page (the same page as the Draft rules) | Update the bundle price by hand in the admin |
| A component's tracked stock falls below the quantity the bundle needs | The bundle's available inventory falls: it is derived from each component's available inventory and the quantity required for the bundle | The bundle's inventory number; in Products, the Inventory column reads “Bundle with XX variants” | Bundle eligibility and considerations (the same page as the SKU rule) | Restock, or lower that component's quantity in the bundle |
| A component is set to Continue selling when out of stock, or its inventory is not tracked | That component is ignored in the bundle quantity calculation, so the bundle's number no longer reflects that component's stock | The bundle's inventory number | Bundle eligibility and considerations (the same page) | Decide per component whether it should count |
Source: the Shopify Bundles app page and the Bundle eligibility and considerations page, Shopify Help Center, read on September 11, 2026. Each row's fourth cell names the page it rests on.
Look at which routines sit behind those six rows. A seasonal rename of an option value is row two. A variant clean-up before a new range is row one. A supplier price file is row four, a SKU re-coding is row three, and a warehouse switching a slow line to continue-selling is row six.
None of those jobs mentions bundles, which is why the bundle is the last thing anyone checks.
The rename rule is the one that catches merchants who deleted nothing. A title is part of what the bundle is tied to, so changing it counts as much as removing it:
When the title of a variant or option is changed, it also automatically triggers the bundle product to change to Draft status.
The changes no page we read describes
Key takeaway
The rows that follow are the ones merchants ask about most and Shopify's pages answer least. For each we read four pages of the bundles section of the Help Center and the Bundles app's own App Store listing; the box under the table names them, and what the developer docs, the Flow pages and the changelog add.
Four component changes the documentation is silent on
| Change in a component | What happens to the bundle | Where you see it | What Shopify documents | What to do |
|---|---|---|---|---|
| A component is set to Draft or Archived | Unknown from the documentation | — | No page we read describes it — see the box below | Test step 4, before you archive anything a live bundle uses |
| A component loses its image | What the bundle's page shows is not described | — | No page we read describes what the bundle shows without it | Test step 5 |
| A component product is deleted outright | Not described separately from a removed variant; the closest documented case is row one of the table above | — | No page we read separates a deleted product from a removed variant or option | Test step 6 |
| Any of the above — does the admin tell you? | The one message we found sits on the bundle's page inside the Bundles app; the bundle email feature Shopify documents is the grouped display of bundle line items in order emails, not a status alert | The bundle's page in the Bundles app — the one place we found | No email, banner or Inbox alert on any page we read | Test step 7; then the Flow alert below, or the weekly check |
Read on September 11, 2026. A dash means there is no documented place in the admin to look; the test steps are in the development-store protocol below.
Every absence on this page is an absence in a named set of pages, not a statement about what Shopify has never written anywhere. On September 11, 2026 we read four pages of the bundles section of the Help Center and the app's own App Store listing.
The pages we read
- the Shopify Bundles app page
- the bundle eligibility and considerations page
- the bundles-and-Scripts page
- the grouped-view email template page
- the Shopify Bundles listing on the App Store
What none of them describes
- a component set to Draft or Archived
- a component without an image
- a component product deleted as distinct from a removed variant
- an email, banner or Inbox alert for the status change
- any tag the Bundles app sets automatically
What else we read the same day
- shopify.dev — the product bundles page with the ProductBundleOperation and ProductBundleComponent objects, which describe no status change when a component changes;
- Shopify Flow — the trigger pages for Product status updated, Product variant deleted, Product variant inventory quantity changed and Product deleted, which name no bundle marker and no bundle template;
- Changelogs — the entries the changelog.shopify.com and shopify.dev changelog feeds showed that day, none of which changes how a bundle goes to Draft.
The absence is the finding, and steps 4–7 of the development-store test below record exactly these cases on a store of your own.
The third trigger is your store, not a component
Key takeaway
The third documented route into Draft has nothing to do with components. Bundles need an eligible store — the Online Store sales channel or a custom storefront, a bundles app installed, and an upgraded checkout, because stores that use checkout.liquid customisations are incompatible with product bundles — and Shopify says what happens when a store that already has bundles stops qualifying:
If you've previously created bundles, but your store then becomes ineligible, then one of the following actions will take place: For fixed bundles, the status is set to Draft and the bundle isn't published to your sales channels.
So when every fixed bundle drops to Draft at once, check the store's eligibility too. Start with the three eligibility requirements listed above.
How do you fix a bundle that went to Draft?
Key takeaway
The repair for both documented component changes is the same, and it lives where the message lives — inside the Bundles app. Shopify's own wording:
If a variant or option was removed or renamed, then you see the message "Option values were updated on the product and removed from the bundle: <variant/option name>". Click Save and continue next to the product to update the bundle and resolve the issue.
Shopify's page states that after you create a bundle, its product status is set to Draft, and that publishing it means setting the status to Active yourself. The case this article covers is different: a bundle you already set to Active that went back to Draft without anyone opening it.
One change has no repair button. If a component's SKU changes, Shopify's rule is to delete and recreate the entire bundle, and a price change on a component leaves the bundle's price untouched until you edit it — both are part of what the free app charges you in hours, which our bundles guide prices in what the free app costs you in time.
Why does a bundle show zero when the components are in stock?
Key takeaway
Zero is rarely a bug. The bundle's inventory is not a number you set — Shopify derives it from the components, and the rule has two parts that are easy to miss:
For each product in the bundle, divide the product's total available inventory by the quantity required for the bundle. The lowest resulting number (rounded down to the nearest whole number) determines how many complete bundles can be sold.
Three checks, in this order, explain almost every zero:
- Divide each component's available inventory by its per-bundle quantity and take the lowest result. A bundle that uses two of something can only be half as available as that component's stock suggests, and Shopify rounds the lowest result down to the nearest whole number.
- Open each component and look at Continue selling when out of stock, and at whether inventory is tracked. A component with either setting is ignored in the bundle quantity calculation, so the bundle's number stops reflecting that component's stock.
- Remember that the number is overall stock. Bundles don't track inventory by location, so the bundle quotes a total drawn from every location together — where those locations are several, our multi-location inventory guide is where that total gets split back into places that can actually ship.
The arithmetic is worth running once with your own numbers before you promise a quantity to anyone; our bundles guide works Shopify's chair-and-desk example line by line in how many bundles can you actually sell.
The continue-selling switch deserves a decision per component rather than a default. It is the same switch that lets a single product oversell, and whether to leave it on is its own question — should you let Shopify keep selling when stock hits zero answers it for the product itself.
Who should watch your bundles: you, Flow, or an app?
Key takeaway
On the pages we read, neither documented component trigger announces itself: the bundle changes, the admin shows the new status, and the message waits inside the app for someone to open it. So the real decision is not which trigger hit you — the table above settles that — but who finds out, and how long after. Three forms cover the range.
Three forms of oversight for a live bundle
| A weekly look at Products | A Shopify Flow alert on Product status updated | A watcher app, or a scripted check on the Admin API | |
|---|---|---|---|
| What it catches | A bundle sitting in Draft, and the message on its page in the Bundles app | A status change on any product you tagged as a bundle, the moment it happens Provided the trigger fires on the Bundles app's own change, which step 7 of the test checks | Component state and bundle status across the whole catalogue, read from the Admin API's bundle fields rather than a tag on each bundle |
| What it needs | Knowing which rows are bundles — the Inventory column reads “Bundle with XX variants” | A tag on every live bundle (no page we read shows a bundle field for this workflow's condition), a condition on status and tag, and Send internal email or Send Slack message | A subscription, or a developer to scope the check on hasVariants |
| Where it stops | Anything that happens between two looks A zero caused by a component's stock, which is the inventory check above | Detection, not repair: the documented repair is Save and continue in the Bundles app, and no page we read says setting a Draft bundle back to Active repairs it An outside call needs Send HTTP request, on Plus, Advanced or Grow | Still detection: the documented repair is a click in the Bundles app |
| What it costs | Your time, weekly | No app subscription; your plan has to carry Flow | A subscription — one watcher listing as of September 11, 2026 — or a scoped build |
Flow facts from the Shopify Flow reference pages (Product status updated, Send internal email, Send Slack message, Send HTTP request, Get product data), read on September 11, 2026; the App Store count is from searches run the same day.
The manual check, and what it can and cannot see
Key takeaway
For a small catalogue with one pair of hands on it, nothing beats looking. When only you edit components, both documented component triggers — a rename, a deletion — are edits you made, so you are also the one who can re-save the bundle the same afternoon.
The check itself is short:
- In Products, find the rows whose Inventory column reads “Bundle with XX variants” — Shopify's documented way of identifying a bundle in the list.
- Read each one's status. A bundle you set Active that now reads Draft is the case this page is about.
- Open a Draft bundle in the Bundles app and read the message: if a variant or option was removed or renamed, it names that variant or option.
- Before staff rename or delete option values, have them list the bundles that use them; bundles don't support import, export or bulk editing, so that list is kept by hand, and the re-save is a click if it happens the same day.
What the look cannot see is the number. A bundle that stays Active can still stop selling because a component's stock fell; the status check does not cover that, so pair it with the inventory check above.
And if the components themselves show sold out while your report says there is stock, that is an availability question at the location level rather than a bundle one — why a product shows as sold out with stock on hand walks through it.
Shopify Flow: an email the moment a bundle drops to Draft
Key takeaway
The trigger you want exists, and it is the event this recipe is built on:
The Product status updated trigger starts a workflow when a user in your organization or a third-party app changes the status of a product.
One word in that sentence decides how much to trust it. Shopify describes a user or a third-party app changing the status; the Draft you care about is set by the Bundles app itself. Treat that as something to prove on a test bundle — step 7 of the development-store test below — before you rely on the email arriving.
The recipe is four moves:
It will not fix the bundle. Flow has an Update product status action, but Shopify says it should not be combined with triggers related to product updates, such as Product status updated, because the workflow then runs forever unless a condition stops it, and no page we read says that setting a Draft bundle back to Active repairs it; the documented repair stays Save and continue inside the Bundles app.
It will not catch a bundle whose status never changed but whose number fell. For that there is the Product variant inventory quantity changed trigger, which fires even when tracking is off; no page we read says whether it fires when a bundle's derived number changes, so test that before filtering every stock movement in the store.
It will not start from a general product-updated event. The product-level triggers on Shopify's list are Product added to store, Product status updated and Product deleted, so a rename has no event of its own there; if it reaches this workflow, it is through the status change it causes, which step 7 of the test checks.
Two gates sit around this recipe, and neither is inside it. If the alert has to reach a system outside Shopify — a helpdesk ticket, a webhook — the action is Send HTTP request, and that action is only available on the Shopify Plus, Advanced or Grow plans. Whether your plan carries Flow at all is the other gate, and which plans do — plus the price of stepping up for the HTTP action — is laid out in our automation guide's two gates inside Flow.
The scheduled sweep, if you would rather poll than react
Key takeaway
If the event trigger would mean ten emails on import days and you would rather read one daily list, Flow has that shape too. The Scheduled time trigger starts a workflow on a schedule you set rather than on an event, and Shopify limits it to running at most once every 10 minutes.
The workflow then calls Get product data with a query string, and the action returns up to 100 results at a time, so a catalogue larger than that needs either a narrower query or the event trigger above.
Shopify's example query filters on updated_at with the scheduledAt variable. For the sweep, the product-filter list that page links to includes bundles:true and a status filter, so a query can narrow to Draft bundles without a tag — confirm on a test store that the query returns your bundles before relying on it.
The event-driven alert above keeps the tag until a test store shows otherwise: Shopify says Flow has access to nearly all the fields in the GraphQL Admin API, where Product.hasVariantsThatRequiresComponents exists, but no page we read on September 11, 2026 shows that field in this trigger's condition.
When Flow is not enough: watcher apps and scripted checks
Key takeaway
Flow's costs are the tag on every bundle for the event-driven alert and, for the scheduled sweep, the 100-per-run cap, and both disappear the moment something reads the catalogue through the Admin API instead.
The API describes bundles in its own fields:
- Product.hasVariantsThatRequiresComponents is “whether at least one of the product variants requires bundle components”;
- Product.bundleComponents is “a list of components that are associated with a product in a bundle”;
- on the variant side, ProductVariant.requiresComponents defaults to false and, when true, means the variant can only be purchased as a parent bundle with components.
A scheduled script that lists products where the first flag is true and the status is draft needs no tag on anything and no cap but the API's own — and the same fields are what an app in this class would read.
When we searched the App Store on September 11, 2026, one listing advertised that job, launched in August 2026; a second listing from the same developer displays the products, variants, images and quantities inside native fixed bundles rather than monitoring them. No other listing we found describes bundle monitoring, and the App Store's own search renders in the browser, so a search that finds nothing proves nothing.
Treat the class as young: before paying for any watcher, run steps 2 and 3 of the test below against it and see whether it reports the two documented component triggers.
The point where a scoped check earns its cost is the catalogue where tagging every bundle is itself the job.
Which form of oversight fits your catalogue?
The verdict table at the top answers by one signal at a time — how many bundles, who edits. This answers by combination, because the route depends on five things at once: the size of the catalogue, who changes components, how often names change, how you would learn today, and what should happen when a bundle drops out. Answer as the store runs today.
Test the undocumented changes on a development store
Key takeaway
Steps 1–3 apply to everyone, whichever route the quiz gave you: they build the bundle and prove, with the two documented component triggers, that the test itself works — a protocol that cannot reproduce a known behaviour tells you nothing about an unknown one.
Steps 4–7 are the four rows of the undocumented table, in the same order. Step 7 is also where a Flow alert, if you built one, either arrived or did not; do it before you trust the email.
The component-drift test: eight steps on a development store
Run it on a development store or a test bundle, never on the bundle customers are buying today.
Create one fixed bundle from two components on a development store, set it to Active, and write down its status, its inventory number and the “Bundle with XX variants” line in Products.
Before you tick this off
- The bundle is Active and visible on the development storefront
- Its inventory number and both components' stock are written down
- If you built the Flow alert, the bundle carries the tag the workflow checks
Rename one option value on a component and confirm the bundle changes to Draft and its page in the Bundles app shows the “Option values were updated” message — this proves the test itself works.
Before you tick this off
- The bundle's status changed to Draft
- The message on the bundle's page names the renamed value
- Save and continue restored the bundle and you set it back to Active
Delete one variant of a component and confirm the same Draft status and message, then repair it with Save and continue or by removing and re-adding the product.
Before you tick this off
- Draft again, with the message naming the deleted variant
- The repair worked and the bundle is Active
- The minutes each repair took are noted — that is the cost of one such change
Change one component's status to Draft and record what the bundle shows in the admin and on the storefront, then archive the component and record both again.
Before you tick this off
- Bundle status and inventory recorded after the component went to Draft
- Recorded again after the component was archived
- The component restored to Active and the bundle re-checked
Delete the component's product media and record what the bundle's storefront page and its page in the Bundles app show.
Before you tick this off
- Storefront bundle page checked and described
- Bundle page in the Bundles app checked
- Image restored
Delete the whole component product, record the bundle's status and any message on its page, then recreate the component and try to add it back.
Before you tick this off
- Bundle status recorded after the deletion
- Message on the bundle's page recorded, or its absence
- Re-adding a replacement component tested
Go through every place the admin could have announced steps 2 to 6 — the store's email, the admin home page, any banner on the product or bundle pages — and, if you built the Flow alert, confirm the email or Slack message arrived for steps 2 and 3.
Before you tick this off
- Email at the store's sender address checked
- Admin home page and the product and bundle pages checked for banners
- Flow alert arrived, or did not — written down
Write each observation with the date next to its row in the tables above, then choose the route — the weekly look, the Flow alert or a scoped check — from what the store actually did.
Before you tick this off
- Every row of the undocumented table has a dated observation
- The Flow alert's behaviour on an automatic Draft is known
- The oversight route is chosen and written down
The Bottom Line
Key takeaway
The repair takes a click and the diagnosis takes a table; the part that lasts is deciding who finds out next time. Match the oversight to the catalogue you actually run, not to the one you plan, and revisit it the day a second pair of hands or an import starts touching components.
Frequently Asked Questions
Front-end developer specializing in Shopify since 2017. Experienced in building custom Liquid themes, optimizing storefront performance, and integrating third-party apps. Directs the editorial process behind Shopify Ecom: sets each topic, and checks facts, links, and interactive elements before publication.
This article was written entirely by AI under human editorial direction. The editor sets the topic and structure, runs multi-stage validation on facts, links, and interactive elements, and verifies the output is useful from a business perspective. All claims are checked against official Shopify sources. Details may change — always confirm critical data at shopify.com.
Editorial PolicyWhat to Read Next
Shopify Bundles: Where the Free App Stops
The free Shopify Bundles app builds fixed bundles and multipacks — here are the limits it will not cross, what a paid app removes, and when to switch.
Read articleShopify Multi-Location Inventory & Life After Stocky
How Shopify tracks stock across locations: plan limits, order routing, transfers, and what replaces Stocky's forecasting now that it has shut down.
Read articleShopify Barcodes: When You Need GS1 and When You Don't
Which Shopify barcodes need a GS1 GTIN and which can be your own, by channel: POS, Google, Amazon, eBay. GS1 US prices and the traps that break listings.
Read article