Shopify

What Breaks During a Bulk Product Import on Shopify

A bulk import can look fine and still wreck your catalog. Here's what actually breaks, from variants to SKUs to handles, and how to catch it before you upload the whole file.

A person at a desk reviews a printed spreadsheet with a pen next to an open laptop with a dark screen, warehouse shelving blurred in the bac

You've got a supplier price sheet, a parts list, or an export from the old system, and somebody told you it's an afternoon of work to get it all into your store. It usually isn't. We ran a 917-product import for a wholesale client's portal build, and almost all of the real work happened before anything was uploaded, in the spreadsheet, row by row.

A bulk product import on Shopify runs off a CSV file, which makes it easy to start and slow to undo. Hundreds of products can land in your catalog wrong in about ninety seconds, and fixing them by hand takes days.

By the end of this page you'll know whether your product data is ready to go in, or whether it needs cleaning up first.

What breaks when you import hundreds of products at once

Shopify won't tell you the import went wrong. It'll tell you it succeeded, and then you find out three weeks later when a customer orders a part that doesn't exist.

Here's where it goes sideways:

  • Variants. Every size, color or voltage combination has to be spelled out in the CSV file in a way Shopify understands. One inconsistent option name and you get duplicate products instead of one product with four variants.
  • SKUs. If your source system allows blanks, duplicates, or the same part number written three different ways, all of that comes across.
  • Prices and cost fields. Retail price and cost per item are separate columns. Mix them up and your margin reports are wrong from day one.
  • **Inventory per location. If you stock a warehouse and a truck, each location is its own column. Miss one and everything reads as zero available.
  • Tags and collections. Automated collections pull from tags. Inconsistent tags mean half your products never show up on the page they belong on.
  • Handles. These become your product URLs. Get them wrong and you break links that already exist.

On that 917-product job, each of these problems was manageable by itself. They got hard because they all showed up at once, across a spreadsheet nobody had looked at closely in years. A bulk import copies the mess you already have, and it copies it faster.

Variants and SKUs are where most imports fall apart

A product with three sizes and four colors isn't one row in your CSV. It's twelve. Each of those rows repeats the same handle, and only the first one carries the title, the body copy and the images. The rest just carry option values, price, SKU and inventory.

Get that structure wrong and Shopify reads each row as a separate product. You end up with twelve near-identical listings, eleven of them missing their product descriptions and photos.

The other half of the problem is SKUs. Shopify doesn't force them to be unique, which sounds helpful until you import a few hundred at once. On the wholesale client's catalog, the same physical item had picked up two different SKUs over the years, and a handful of SKUs had been reused on discontinued products. Nothing in the export flagged it. It only surfaced after the import, when inventory counts wouldn't reconcile and two listings were fighting over the same stock.

Before you import anything, sort your source file by SKU and look for duplicates. Then sort by handle and count the rows against what the variants should be. Three sizes times four colors is twelve rows, every time. If the count is off, the option data is incomplete, and no amount of cleanup after the import will be cheaper than fixing it now.

Handles decide your URLs, so get them right the first time

The handle column is the product's web address. A product with the handle copper-fittings-half-inch lives at /products/copper-fittings-half-inch. Change that handle on a product that's already live, and the old URL stops working. Anyone who linked to it, bookmarked it, or found it in search lands on nothing.

Most CSV exports either leave the handle blank or generate one from the product title. Blank means the platform makes one up for you. Generated from a title means it changes the moment someone edits the title. Both are fine on a brand-new catalog. Both are quietly expensive on a store that already gets traffic.

Two things to check in the spreadsheet before you upload. First, every handle is unique — a repeat handle can merge two products into one or overwrite the first with the second. Second, for products already on your site, the handle in the file matches the handle live right now. Open a few product pages, copy what's after /products/, and compare.

Fix mismatches in the file. Not after.

Your CSV file is usually the real problem

The upload takes a minute. The week before it is where the work sits.

When we pulled 917 products out of an old system for a wholesale client, the export came out the way most exports do: inconsistent. Prices with currency symbols stuck to them. Weights in three different units, none of them labeled. Trailing spaces on SKUs, which makes two identical SKUs look different to the importer and identical to you. Body (HTML) fields carrying leftover markup from whatever editor built them years ago. Category fields that were filled in for some products and blank for others, because whoever entered them left in 2019.

None of that is Shopify's fault, and none of it shows up until you look.

Open the export in a spreadsheet and sort each column. Sorting surfaces the junk fast — blanks float to one end, weird characters to the other. Do that for SKU, price, cost, weight, vendor and product type. Use find-and-replace to strip symbols and extra spaces. Fill the gaps or decide, on purpose, to leave them empty.

Clean data imports cleanly. Dirty data imports dirty, at scale, into a live store.

Test twenty products before you bulk upload the whole catalog

Pull twenty products out of your sheet and import those first. Pick the messy ones on purpose: the item with eight variants, the one with a blank SKU, the one with a price that has a currency symbol stuck to it, the one with a name three lines long. If the ugly twenty land clean, the rest probably will too.

Then check them in the admin, not in the import summary. Open a product. Look at the variants, the price, the cost, the inventory count per location, the tags, the URL. Click through to the storefront page.

We ran a 917-product import for a wholesale client, and the small slice is what saved it. Every problem we found in the test set existed 900 more times in the full file.

That's the arithmetic. Fixing twenty products by hand takes an afternoon. Fixing several hundred after a bad bulk import takes days, and you're doing it on a live store while customers are looking at wrong prices.

Import the small CSV file. Fix the sheet. Import the small file again. Only then run the whole thing.

Updating products is different from creating them

A second import matches rows against what's already in the store, whatever you had in mind. The thing it matches on is the Handle. Same handle, it updates the existing product. Different handle, even by one character, it makes a new one.

That's how a price update turns into a duplicate catalog.

So before you re-import anything, pull a fresh export of your current products and use those handles as your starting column. Don't retype them. Don't rebuild them from the title, because a title edit since the first import will have left the handle behind. Copy the live values.

If you're only changing prices or inventory, you don't need every column. Handle, the variant identifier, and the fields you're actually changing is enough. Fewer columns means fewer ways to wipe out a description, a tag or a metafield you forgot was there.

Then check the product count in the admin before and after. If it went up and you weren't adding anything, stop and look at your handles before you touch another row.

Common questions about bulk product imports on Shopify

How do I bulk import products? Import in the Shopify admin. → To bulk upload a catalog, you send a CSV through Products → Import in the Shopify admin. → Import in the Shopify admin. The file needs one row per product and an extra row for each additional variant, with the handle repeated to tie those rows together. Export a product you already have first and use that file as your template.

How do I bulk edit more than a page of products at a time? The admin bulk editor only works on what you've selected, and the product list paginates, so it gets slow fast. For anything past a few dozen items, filter the list, export those products to CSV with the admin export or an app like Matrixify, change the columns you care about, and re-import. Same rules as a bulk import: keep the handles, keep the variant identifiers.

Can products be bundled? Yes, but a bundle is its own product with its own SKU. The CSV won't link it to the parts it's made of, so inventory for the components has to be handled separately or through an app.

If your catalog is bigger than a spreadsheet you want to babysit, book a New Project Consultation.

More onshopifywebsites

Chris Hobbick

About the author

Chris Hobbick

I build and fix websites, Shopify stores and business software. I work directly with business owners to understand the problem and agree on the work and price.

Meet Chris →

The Newsletter

One useful idea. Once a week.

Practical notes on websites, online stores and the daily work software can help with.

Unsubscribe whenever you want.