Managing bundles
Import and Export Bundles
Export your bundle configuration to a CSV for backup, bulk editing, or moving bundles to another store. Import reads that file (or a file from another bundle app or spreadsheet) and creates bundles from it.
#Where to find it
On the Bundles page, click Import/Export in the header. The dropdown shows two options:
Export CSV: download all your bundles as a spreadsheet.Import: open the import wizard.

#Exporting
Clicking Export CSV downloads a file to your computer. It includes every bundle in your store (all statuses: draft, active, paused, archived, scheduled), up to 1,000 bundles. The file is named bundles-{your-store}-{today's date}.csv.
The file does not include analytics data (views, revenue). Those are on the Analytics page.
#CSV structure
One row = one bundle. Products are stored as parallel pipe-separated lists within that row: the third handle, third SKU, and third quantity all belong to the same product. In a spreadsheet, each row is one complete bundle.
#Column reference
| Column | What it holds | Accepted values |
|---|---|---|
| Bundle Name | The bundle's name | Any text |
| Description | Internal description | Any text |
| Bundle Type | The type of bundle | Fixed Bundle, Buy X Get Y, BOGO, Volume Discount, Mix And Match |
| Status | Current status (read-only on import) | Arrives as Draft regardless; see Defaults on import |
| Cart Presentation | How components appear in the cart | Grouped, Separate |
| Priority | Numeric priority for overlapping bundles | Number |
| Priority Type | How the priority is applied | Index Based, Discount Based |
| Discount Type | How the discount is calculated | Percentage, Fixed Amount, Custom Price, No Discount, Quantity Breaks |
| Discount Value | The discount amount or percentage | Number |
| Discount Application | What the discount applies to | Bundle, Products |
| Min Order Value | Minimum cart total before the discount applies | Number |
| Max Discount Amount | Cap on the total discount | Number |
| Free Shipping | Whether the bundle includes free shipping | Yes, No |
| Volume Tiers | Tiered discounts as min:discount pairs, pipe-separated | e.g. 3:10|5:15 |
| Volume Discount Type | Whether Volume Tiers are percentages or amounts | Percentage, Fixed Amount |
| Uses Per Order Limit | Times this discount can apply per order | Number |
| Buy Quantity | Quantity to buy (Buy X Get Y and BOGO) | Number |
| Get Quantity | Quantity to receive free (Buy X Get Y and BOGO) | Number |
| Minimum Items | Minimum items a shopper must select | Number |
| Maximum Items | Maximum items a shopper may select | Number |
| Allow Mix And Match | Whether mix-and-match selection is enabled | Yes, No |
| Mix And Match Price | Fixed price for a mix-and-match set | Number |
| Start Date | Date the bundle becomes active | YYYY-MM-DD |
| End Date | Date the bundle is paused | YYYY-MM-DD |
| Products | Product handles, pipe-separated | e.g. blue-hoodie|red-hoodie |
| Product SKUs | Variant SKUs, pipe-separated | e.g. HOODIE-BL|HOODIE-RD |
| Variant IDs | Shopify variant GIDs, pipe-separated | Useful when re-importing into the same store |
| Product Titles | Product titles (for reference) | Any text |
| Variant Titles | Variant titles; blank for products with no variants | Any text |
| Quantities | Per-product quantities, pipe-separated | e.g. 1|2 |
| Roles | Per-product roles, pipe-separated | Trigger, Reward, Included, Optional, Group Option |
| Product Groups | Group each product belongs to, pipe-separated | Any text |
| Custom Prices | Per-product price override, pipe-separated | Number |
| Required | Whether each product is required, pipe-separated | Yes, No |
| Allow Variant Choice | Whether shoppers choose a variant, pipe-separated | Yes, No |
| Min Quantities | Per-product minimum quantity, pipe-separated | Number |
| Max Quantities | Per-product maximum quantity, pipe-separated | Number |
| Group Names | Mix-and-match group names, pipe-separated | Any text |
| Group Min Selections | Minimum selections per group, pipe-separated | Number |
| Group Max Selections | Maximum selections per group, pipe-separated | Number |
| Group Sources | How each group's products are sourced, pipe-separated | Products, Collection |
| Group Collections | Collection handle for collection-backed groups, pipe-separated | Any text |
| Bundle Product ID | Shopify product ID of the bundle-as-product | Read-only |
| Bundle Variant ID | Shopify variant ID of the bundle-as-product | Read-only |
| Parent Variants | Bundle-as-product variant configuration | Read-only |
Volume Discount Type matters when your volume tiers use fixed amounts rather than percentages. Without it, a fixed-amount ladder re-imports as a percentage ladder. Files exported from this app always include it.
#Importing step by step
The wizard has four steps, shown across the top: Choose file, Match columns, Review and Done. Nothing is written to your store until you confirm on the Review step.
#Step 1: Choose file
Click Import from the Import/Export menu. Drag your CSV onto the drop zone, or click Choose CSV file. Only .csv files are accepted.
The file loads in your browser. The wizard then shows the file name with its row count, column count and size. Click Replace to pick a different file, or Continue to proceed.
Three links sit under the drop zone:
Download a sample CSV: a two-bundle file showing the layout the importer expects.Export your current bundles: the same file asExport CSV, handy as a starting point.How importing works: opens this page.

#Step 2: Match columns
Group rows into bundles by. The blue panel at the top asks which column says two rows belong to the same bundle. It starts on the column holding the bundle name, which is right for files exported from this app. Beside it, the wizard shows what the choice produces, for example 142 rows → 71 bundles. If your file has one row per product (common in exports from other apps), check that this is the bundle name column. Pick the wrong one and every row becomes its own bundle.
Matched columns. The line 39 columns matched lists what the matched columns cover: bundle details, discount, products, groups. Click Review to open the table:
Your column: the header as it appears in your CSV.Imports as: the field it will write. Change it with the dropdown, or chooseIgnore this columnto skip it.First value: the first value from that column. For a list column it shows the first entry and a badge such as3 values.
The first eight columns show at once; click + N more matched columns for the rest.
Read but not imported. Two columns are read and never written: Status (every bundle arrives as a draft) and Bundle Product ID (created by the app when you turn on bundle as product).
Ignored columns. Click Show N ignored columns to see the columns the wizard could not match. Click one to add it to the table and choose what it imports as.
Two fields are required: Bundle name and Bundle type. The wizard will not let you continue until both are mapped.
Click Continue to review. The wizard matches your products against this store before showing the review.

#Step 3: Review
When the Review step opens, it checks your bundles against your store. Three counts appear at the top:
New bundles: names your store does not have yet.Already in your store: names that match an existing bundle.Can't be imported: bundles with a problem, shown in red.
When names already exist, choose what happens to them:
Skip them(default): your existing bundles stay exactly as they are.Replace them: their products and discount are overwritten with the file's. See When a bundle name already exists.Import as copies: both are kept, and the new one gets(Copy)added to its name ((Copy 2)if that is taken too).
Bundles that can't be imported are listed under a red heading with the reason, for example a product handle or SKU that is not in this store. Fix them in your file and import again, or click download the problem list for a CSV of every problem.
Bundles in this file lists every bundle, problems first, with a badge: Will import, Already exists (when skipping) or Will skip. Click Show to open it. Untick bundles to leave them out, or use Select all and Select none. Importing five or ten first is a good way to try a new file.
Click Import {n} bundles. The count is what will actually be written. A confirmation appears before anything is written; if you chose Replace them, it warns that this cannot be undone.
While the import runs, a progress bar counts the bundles as they finish. Keep the window open until it is done.

#Step 4: Done
The results screen shows four counts:
Created: new bundles added, including copies.Replaced: existing bundles whose products and discount were overwritten.Skipped (already exist): bundles left alone because the name existed and you chose to skip.Not imported: bundles that could not be created. Each is listed with its reason.
Click Show all to see each bundle's result on screen, or Download import report (CSV) for the same list as a file.
New bundles land as drafts. Click View imported drafts to open the Bundles page on the Draft tab, then activate the ones you want live.

#When a bundle name already exists
With Skip them, an existing bundle is left untouched. With Replace them, the existing bundle's products and discount are replaced by the file's version. Everything else (images, schedule, priority, cart presentation, and whether the bundle is currently live) is kept exactly as it is. A live bundle stays live and shoppers see the new products and discount immediately. With Import as copies, the existing bundle is left alone and the file's version is created as a new draft named Original name (Copy).
Name matching ignores upper and lower case.
#Moving bundles between stores
Products in the CSV travel by SKU and handle, not by internal ID. For each product the app uses its SKU when the row has one, and its handle otherwise.
- If a SKU or handle matches nothing in the new store, the whole bundle is skipped and the Review step explains which term was not found.
- If a SKU matches more than one variant (Shopify does not require unique SKUs), the bundle is skipped with an "ambiguous" message. Make that SKU unique in Shopify, then import again.
The app does not create products for you. Products must already exist in the destination store.
#Defaults on import
| What | Default | Why |
|---|---|---|
| Status | Draft | Imported bundles start as drafts so nothing goes live without your review, whatever the file's Status column says. |
| Layout | The type's default layout | The same starting layout a brand-new bundle of that type gets. |
| Bundle as Product | Off | A bundle-as-product's Shopify product ID points at a specific store. Import does not re-create that connection; turn on Create product for bundle in the bundle after importing. |
#Limits
| Limit | Value |
|---|---|
| Bundles exported per file | 1,000 |
| Rows per import file | 5,000 |
The hourly rate limit for creating bundles applies to the whole import as one operation, not per bundle. A 35-bundle import counts as one action.
#Errors and where they appear
Match columns step. Mapping-level problems: a required column unmapped, two columns mapped to the same field, an unrecognised value in a typed field, a grouping column that makes every row its own bundle. Fix these before continuing.
Review step. Per-bundle problems: product not found, unsupported bundle type, product columns of different lengths. These bundles are counted under Can't be imported and are left out of the import. Download the problem list, correct the file and import it again.
#Common mistakes
Wrong grouping column when the file has one row per product. If ten rows all belong to "Winter Kit" and you leave the grouping column set to a SKU, you get ten one-product bundles. The Review step shows the count. Go back and choose the column that holds the bundle name.
Editing product lists in a spreadsheet and deleting one entry. Products in a row span parallel columns: handles, SKUs, quantities, roles. Deleting one handle without deleting the matching SKU and quantity shifts every product after it onto the wrong values. The Review step flags rows where those lists are different lengths.
Expecting Replace to draft a live bundle. Replace them replaces products and discount but does not change whether the bundle is live. An active bundle stays active and shoppers see the change right away.