What Shopify's CSV import actually does: 35 test imports
We imported 35 small product CSVs into a Shopify development store in October 2026 to see what the import really does. Its preview warned about none of the data loss: blank cells cleared existing values, variant columns without Option1 deleted variants, and a blank price skipped the product. BulkSheet's own CSV import avoids all three.
Shopify's help page for product CSVs is the usual reference, but it describes what a file should look like, not what happens when one doesn't. So we tested it. This guide covers how, the three behaviours worth knowing before your next import, what makes Shopify reject a file outright, and where Shopify turned out to be more forgiving than its own documentation.
How we tested
Each test was one small CSV built to check one claim, imported through Products > Import in the Shopify admin of a development store, with Overwrite products with matching handles on and Publish new products to all sales channels off. We read every product back afterwards to see what actually changed, rather than trusting the preview or the “Products imported” message. The files used Shopify's own export column names (Handle, Body (HTML), Variant Price and so on), taken from a real export of the same store. Results are as of October 2026; Shopify changes its admin, so treat them as a snapshot.
Three things the import preview won't tell you
1. A blank cell clears the existing value
We imported an existing product with the Body (HTML) column present and its cell empty. The preview showed the description as empty, with no warning, and the import cleared the product's description. Any column you include is written for every row in the file, so a blank cell means “make this empty”, not “leave this alone”. A column you leave out of the file entirely is left alone.
Shopify's own export contains genuine blanks too (a product with no vendor, a variant with no barcode), so the risk is a blank you didn't intend: a column copied from another sheet, or values deleted while editing.
2. Variant columns without Option1 delete variants
We imported a file for an existing two-variant product with Handle, Title, Variant SKU and Variant Price columns, but no Option1 Name or Option1 Value columns. Shopify deleted one variant and re-created the other with a new variant ID and the option value “Default Title”. The preview showed a single “Default Title” variant, but nothing said existing variants would be removed. A new variant ID matters beyond the catalog: anything that stored the old ID (apps, feeds, saved links) now points at nothing.
Changing option values re-creates variants too: when a later import put the original Option1 values back, both variants came back with new IDs again.
3. A blank price skips the product
Shopify's help page says a blank price defaults to 0.00, and the import preview agreed, showing $0.00. But when we imported it, nothing on that product changed: not the price, and not the description the same file also restored. A clean file imported right afterwards applied normally. The product was skipped, and nothing in the admin showed it: the import reported success and the product simply kept its old values.
A duplicate variant behaves the same way. Two rows of one product with identical option values meant the product wasn't created at all.
What makes Shopify reject the whole file
These stopped the import at upload, before the preview, so nothing was written. The quoted text is Shopify's error message.
| Status blank on a product's first row, or not active, draft or archived | "Status isn't valid. Set the status as active, draft, or archived." |
|---|---|
| Variant Inventory Policy not deny or continue | "Inventory policy is not included in the list" |
| Both Variant Barcode and Variant Barcodes columns | "Cannot have both Variant Barcode and Variant Barcodes. Remove one of these columns and try importing again." |
| No Title column | Shopify opens its column-mapping screen: "A product title column is required." |
| A blank Title on a product's first row | "Title must be specified" |
| Some but not all packed product dimensions filled in | "Packed product length, width, height, and unit must all be blank, or all dimensions must be positive and less than 2,000,000,000 with a valid unit." |
| More than 20 barcodes on one variant | "Can only specify a maximum of 20 barcodes per variant" |
| Image Alt Text longer than 512 characters | "The alt value exceeds the maximum limit of 512 characters." |
| Gift Card true with Taxable or Requires Shipping true | "Taxable cannot be applied to gift cards" and "Requires shipping cannot be applied to gift cards" |
One more file passed upload but its product was never created: a correctly formatted product metafield column whose value most likely didn't fit the type of that metafield's definition in the store. Metafield values have to match the definition you set up under Settings > Custom data.
Where Shopify was more forgiving than its documentation
Several things the help page warns about, or that we expected to fail, imported without complaint:
| File saved as Windows-1252 instead of UTF-8 | Imported; "Café Crème" kept its accents |
|---|---|
| Semicolons instead of commas | Imported; every field landed in the right place |
| Prices written "$10.00", "10,50" and "1,200.00" | Imported as 10.00, 10.50 and 1200.00 |
| Image URL starting with http:// instead of https:// | Imported; Shopify fetched the image and stored its own copy |
| 251 tags on one product | Imported; all 251 kept |
| Status "DRAFT", Published "FALSE" (uppercase) | Imported; values are not case-sensitive |
| Weight unit "pounds" | Imported with the store's default weight unit instead |
| An option value with no option name | Imported; Shopify named the option "Title" |
| Gift Card true, Taxable and Requires Shipping blank | Imported as a gift card, although the help page says CSV can't create one |
Columns Shopify doesn't recognise were accepted without any message, including an unknown column, a variant metafield column (the help page says variant metafields aren't supported in the product CSV) and a metafield column written in another tool's Metafield: namespace.key [type] format. Don't take a clean import as proof that a column was used.
One more mismatch: the help page lists columns such as URL handle, Description and Price, but the export we downloaded from the same admin used the older names, Handle, Body (HTML) and Variant Price. If a guide tells you to look for a column you can't find, check for its older name.
Before your next import
- Export first. A fresh export is your only restore point if the import goes wrong - what to do when an import wipes your data covers recovery.
- Delete the columns you aren't changing. Keep Handle, the columns you edited and, if you touched variant columns, Option1 Name and Option1 Value. Fewer columns means fewer blanks that can overwrite something.
- Search your edited columns for empty cells, especially Body (HTML), Variant Price and Status on each product's first row.
- Check for duplicate option values within each product.
- Open a few products afterwards and compare them with your file. “Products imported” doesn't mean every row was applied.
We're building a free checker that runs these checks on your file in your browser before you import it. It will be linked here when it launches.
Editing products you already have? BulkSheet's Import CSV reads your file in the browser, matches rows to existing products by Variant ID, URL handle or SKU, and loads every changed value as an unsaved edit you can review. A blank cell never changes anything, the import never creates or deletes products, and nothing is written to Shopify until you save.
See the Shopify bulk product editorFrequently asked questions
Does a blank cell in a Shopify CSV delete data?
It can. In our test, a product CSV that included the Body (HTML) column with an empty cell cleared that product's existing description when we imported it with “Overwrite products with matching handles” on. Shopify's preview showed the description as empty but gave no warning. Leave out any column you don't mean to change: a column that isn't in the file leaves the existing value alone.
Why did my product disappear or not update after a CSV import?
Two things we saw in testing do this without an obvious error in the preview. A blank price on a variant row made Shopify skip that product's update entirely, even though the preview showed the price as $0.00. And two rows of the same product with identical option values meant the product wasn't created. In both cases the import still reported success, so open a few products afterwards and compare them with your file.
Do I need to save my CSV as UTF-8 for Shopify?
Shopify's help page says so, but in our test a file saved as Windows-1252 (what Excel on Windows often writes) imported with its accented characters intact, and a semicolon-separated file imported correctly too. Saving as CSV UTF-8 with commas is still the safest choice, because it's the format Shopify documents.
Related: how to export Shopify products to CSV, bulk editing prices without a CSV, and when Shopify's native bulk editor isn't enough. See the pricing page for plans, or install BulkSheet to try it.