Hide bundle contents in customer confirmation emails
Follow the steps below to hide the contents of your bundles in customer confirmation emails (e.g., for mystery bundles).
A quick note on scope: this guide covers order and shipping notification emails specifically (the ones sent from Shopify's Notifications settings). These run on Liquid templates and are not affected by Shopify's Checkout Extensibility rollout, so the script method below continues to work for emails regardless of whether your store is on the new Thank You / Order Status pages. If you're also trying to hide bundle contents on the Thank You or Order Status page itself, that's a separate surface with its own requirements. See How can I hide bundle contents on customer orders and Upgrading and replacing your Thank You and Order status pages.
Steps
- Navigate to the Settings page in Shopify.
- Go to the Notifications section.
- Click into Customer notifications.
- From the list of customer notification templates, select the one that has line item contents you want to edit. In our example, we'll use Shipping confirmation.
Modifying Shipping and Local Delivery emails
This code and instructions apply to the emails listed below:
Shipping
- Fulfillment request
- Shipping confirmation
- Shipping update
- Out for delivery
- Delivered
Local delivery
- Out for delivery
- Delivered
- Missed delivery
In the email contents, look for the following code snippet:
{% for line in fulfillment.fulfillment_line_items %}

Right below the start of the for loop highlighted above, add the following liquid code snippet. You can view this code snippet on this Github Gist.
hide-bundle-contents.liquid
{% assign show_line_item = true %}
{% if line.line_item.discount_allocations %}
{% for discount_allocation in line.line_item.discount_allocations %}
{% if discount_allocation.discount_application.title contains "Simple Bundles:" %}
{% assign show_line_item = false %}
{% endif %}
{% endfor %}
{% endif %}
{% unless show_line_item %}
{% continue %}
{% endunless %}
Modifying Orders and Local pickup emails
If you aren't modifying the list of emails above, the code snippet is slightly modified. This code applies to the emails listed below:
Orders
- Order confirmation
- Order edited
- Order invoice
- Order canceled
- Order refund
- Draft order invoice
- Email cart from POS
- Abandoned checkout
- POS and mobile receipt
Local pickup
- Ready for pickup
- Picked up
In the email contents, look for the following code snippet:
{% for line in subtotal_line_items %}

Right below the start of the for loop highlighted above, add the following liquid code snippet. You can find the code snippet here: Github Gist.
hide-bundle-contents-order-pickup.liquid
{% assign show_line_item = true %}
{% if line.discount_allocations %}
{% for discount_allocation in line.discount_allocations %}
{% if discount_allocation.discount_application.title contains "Simple Bundles:" %}
{% assign show_line_item = false %}
{% endif %}
{% endfor %}
{% endif %}
{% unless show_line_item %}
{% continue %}
{% endunless %}
Want components hidden everywhere, not just in email?
If you're building a true mystery box, where components should stay hidden across cart, checkout, and email, editing notification templates alone won't cover checkout and order status. For that, we'd recommend setting the bundle up as a Single-SKU bundle instead, so the components never appear as separate line items in the first place. See the full walkthrough in How to create a mystery box in Simple Bundles.
One important caveat: Single-SKU bundles only stay hidden if Cart Transform is turned off for your store. Cart Transform is a store-wide setting, not something we can currently apply per bundle, so disabling it to keep a mystery box hidden will also stop expansion on any other bundles that rely on Cart Transform (e.g., bundles using Infinite Options or standard component breakdown). If you have other bundles that need to stay expanded, common workarounds are running the mystery box on a separate store or subdomain with Cart Transform off there only, or keeping Cart Transform on storewide and using our legacy fulfillment mode instead (components are added post-purchase and hidden at the order/email level via this script method, though they'll still be visible in cart and checkout). Reach out to us, and we're happy to help you figure out which setup fits best.
If your fulfillment provider or 3PL needs to see each bundle's individual components for picking, packing, or itemized packing slips, Single-SKU bundles alone won't work for that. In Single-SKU mode, only the parent bundle line ever reaches Shopify's order and any connected fulfillment app; the child items are never sent through. If you need itemized child SKUs on your packing slips, see Single-SKU bundle: How to show itemized bundle contents on Shopify packing slips, but note that method only works on Simple Bundles 2.0. If you're still on 1.0, itemized bundle contents can't be shown on packing slips this way; migrating to 2.0 is the path to get this working.
If you're currently on Simple Bundles 1.0, migrating to 2.0 is also worth considering here, since 2.0's Cart Transform and Single-SKU options give you more flexibility for this kind of setup than 1.0's script-only approach. Happy to walk you through what that would look like for your store.