Skip to main content

How Shopify Product CSVs Handle Bulk Imports and Exports, and Their Limitations

BulkFlow | | 10/15/2026

Adding hundreds of products, updating prices across a catalog or backing up your listings one product at a time in the Shopify admin quickly becomes impractical. Shopify’s built-in solution is the product CSV (comma-separated values) file, which lets you change many products in a single pass.

This guide explains how the bulk import and export workflow works, how to prepare a file that imports cleanly and where native CSV stops being enough.

How Shopify Bulk Import and Export Works

Exporting writes your product data from Shopify into a specially formatted CSV file. Importing reads that file back into your store. Most bulk product jobs follow the same round trip:

  1. Export your existing products from Shopify to a CSV file.
  2. Open the file in a spreadsheet and make your changes, such as adjusting prices or adding rows for new products.
  3. Import the edited file back into Shopify.

Export first even if you only plan to add new products. The exported file shows the exact structure Shopify expects, so you can use it as a template and match new rows to the same columns and formatting. It also serves as a copy of your catalog before you make any edits.

For exact column names and click-by-click instructions, use Shopify’s Help Center section on importing and exporting products. It covers CSV files, importing, exporting and common import problems.

Preparing Your Product CSV File

A product CSV imports correctly when each value sits in the matching Shopify column and every row for a product shares the same handle. The handle is the unique, URL-friendly identifier Shopify uses to recognize a product. Because Shopify treats rows with the same handle as one product, keep a product’s first row, its variant rows and any extra image rows directly next to each other.

Start by mapping your supplier sheet or spreadsheet columns to the columns in your exported file. A value without a matching column will not import, so decide where it belongs before you build the file. Some bulk-import apps require a specific sheet name or detect columns automatically, but those are app conventions, not rules of Shopify’s native import.

Variants and Options

Options are the attributes customers choose, such as size, color or material. Each variant needs its own combination of option values within the product. A T-shirt can have “Small / Blue” and “Small / Red” rows, but not two “Small / Blue” rows, because Shopify cannot tell them apart.

A product is generally reported to support up to 3 options and up to 2,048 variants. Confirm these figures in Shopify’s current documentation before designing a large catalog around them, since they determine whether a product with many combinations fits in one listing or needs to be split.

Shopify also limits how many products and variants a store can create. These limits can slow or interrupt very large imports, especially on stores that are not on Shopify Plus, so check your store’s current limits before importing thousands of new items at once.

Product Images

Put a public, direct link to each image file in the Image Src column. Shopify downloads the image from that link, so it must open the file itself rather than a login or preview page. Links to private folders or file-sharing pages that require sign-in will fail.

For a product with several images, place each image on its own row under the same handle. Shopify adds images in file order unless you set an image position value, so arrange the rows in the order you want shoppers to see them. Image-only rows attach photos to the product as a whole, which means they cannot link a photo to a specific color or size.

Weight and Packed Dimensions

Shopify stores weight and packed dimensions per variant, since a large and a small version of the same item can ship differently. Set these values on each variant row rather than once per product.

Weight accepts grams (g), kilograms (kg), ounces (oz) or pounds (lb). Packed dimensions need length, width and height filled in together, in centimeters (cm) or inches (in). If any of the three is missing, Shopify does not save the packed size for that variant, and if you leave the unit empty, it uses your store’s default unit system.

Shopify has changed how it handles shipping measurements over time. Confirm the current behavior in its documentation and test a few variants before relying on it for a full catalog.

Running the Import and Fixing Errors

Most import problems can be caught before the upload. Start with the column headers, because Shopify ignores a misspelled or unrecognized header without warning. A typo such as an extra space or a changed word can quietly drop a column of prices, weights or image links, so compare your headers character by character against the exported file, especially any column you added or renamed.

Before uploading the full file, import a small test batch and check the results. Structural problems are much easier to fix at this stage.

Next, read the preview count. The import counts whole products, not file rows, so a T-shirt with six variants on six rows counts as one product. If you expect 120 products and the preview shows a different number, stop. A mismatch usually means a handle differs between rows of the same product, or rows are split or merged incorrectly.

Some errors appear only after the import runs. If “Small / Red” appears on two rows of the same product, that product fails with an error saying the variant already exists, while the rest of the file can still import. To fix it:

  1. Correct the option values so each combination appears only once for that product.
  2. Delete the rows for every product that imported successfully.
  3. Re-import the smaller file containing only the failed products.

Keeping each retry small means any new error points straight to the products that still need work.

What a Product CSV Can’t Handle: Collections and Metafields

A product CSV handles product and variant data well, but it offers only limited control over collections and no confirmed route for metafields. If your job depends on either, plan for extra work outside the import file.

Collections

A product import can assign products to collections, but the result depends on the collection type. If you add a collection column and the named collection doesn’t exist, the import reportedly creates it as a manual collection, where you choose the products yourself.

Automatic collections add products based on conditions such as a tag or price range. If your file assigns a product to an existing automatic collection, the product must meet those conditions or the import fails. This behavior isn’t fully documented, so test it with a small file before assigning collections across your catalog.

Shopify collections also have no levels or folders, so a nested category tree such as Clothing > Men > Shirts can’t be imported as a hierarchy. Flatten those categories into separate collections, then recreate the parent-child structure with drop-down menus in your store’s navigation.

Metafields

Metafields are custom fields for data with no standard Shopify field, such as fabric composition or care instructions. Product-level metafields hold one value for the whole product, while variant-level metafields hold values that differ by variant, such as a measurement that changes with each size.

The native product CSV has no confirmed method for importing or exporting metafields in bulk, and third-party apps are the usual route at scale. If your catalog depends on metafields, check the exported file for those values before editing, and don’t expect a re-import to update them.

When Native CSV Isn’t Enough

The native workflow works best when your data already fits Shopify’s CSV template and products are matched by handle. A dedicated bulk-data app is worth considering when your job keeps forcing workarounds, such as in these situations:

  • Your source data isn’t a CSV. Some bulk apps accept Excel XLSX files or shared Google Sheets directly, so you don’t have to convert and reformat every file. Some also let you keep extra reference columns, such as internal notes, and ignore them during import.
  • You need metafields. An app is the usual way to move metafield values in bulk.
  • You want to update existing products by SKU. Apps can match products by SKU, which helps when supplier or inventory records aren’t organized by Shopify handle.
  • You need a result for every row. Apps can return a results file listing each item’s status with comments on any errors, so you can spot failed rows directly instead of rebuilding a retry file.

If you hit one of these gaps only occasionally, careful CSV preparation may still be enough. For recurring jobs, choose an app based on the specific gap you need to close.

Conclusion

Shopify bulk import and export handles most product jobs well when the CSV file is built carefully, and most failures trace back to the file rather than the import itself. With a clear view of how the workflow operates and where it stops, you can update your catalog confidently and recognize when an app is the better tool. We hope this guide helps you complete your next bulk product job accurately.

How Shopify Product CSVs Handle Bulk Imports and Exports, and Their Limitations
BulkFlow provides a solution to import data in bulk from CSV/Excels Files, FTP, Google Sheet, XML,… to e-commerce platforms such as Shopify, WooCommerce,… automatically and quickly.