What this guide covers
When you need to add a hundred products, or change a value across a thousand variants, you do not do it by hand. You reach for the Shopify CSV import. It is the native way to move catalog data in and out of your store in bulk, and for the initial heavy lifting it is genuinely useful.
It is also strict. A CSV is a flat text file with a precise structure, and Shopify reads it literally. One wrong header, one bad encoding, one missing handle, and the import either fails or, worse, succeeds in the wrong way. This guide explains how the import works, the errors that catch people out, and where a previewed, undoable workflow saves you from the parts that hurt.
What a Shopify product CSV actually is
A CSV (comma-separated values) file is a spreadsheet saved as plain text, where each line is a row and each value is separated by a comma. Shopify's product CSV has a fixed set of column headers it understands, such as Handle, Title, Variant SKU, and Variant Price.
The key idea that confuses most newcomers: one product can span several rows. A product with five variants is five rows that all share the same Handle. The first row carries the product-level data (title, description, images), and the following rows fill in only the variant columns. Get the handle grouping wrong and you split one product into many, or merge several into one.
How to import a CSV file into Shopify
The native flow is short:
- In your Shopify admin, go to Products, then click Import.
- Upload your
.csvfile. The safest starting point is to first export your current products, so you have the exact column structure Shopify expects. - Choose whether to overwrite existing products that have the same handle. This single checkbox is the most dangerous setting in the whole flow, because it lets the import replace live data.
- Preview the first few rows Shopify shows, then start the import. Large files are processed in the background and you get an email when it finishes.
For a brand-new catalog, this is the fastest path. The risk rises sharply the moment you are importing over products that are already selling.
The columns that matter most
- Handle: the unique slug that groups rows into one product. This is the backbone of the whole file.
- Title, Body (HTML), Vendor, Type, Tags: product-level fields, set on the first row of each handle.
- Option1 Name / Option1 Value: how variants are defined, for example Size and Large.
- Variant SKU, Variant Price, Variant Compare At Price, Variant Inventory Qty: the per-variant data most edits actually target.
- Image Src: a publicly reachable URL for each image. If the URL is not accessible, the image silently does not import.
- Metafield columns: optional, and the most format-sensitive of all. The header has to name the metafield and its type exactly.
Why CSV imports fail: the common errors
Almost every failed import comes down to one of these:
- Wrong encoding. The file must be saved as UTF-8. Open it in the wrong program, save it again, and accents or symbols turn into garbled characters, or the import is rejected outright.
- A broken or renamed header. Shopify matches columns by their exact header text.
Variant Priceworks;Pricedoes not. - Missing or duplicated handles. A blank handle drops the row. An accidental duplicate merges products that should be separate.
- Inventory that does not update. Stock is tied to a location, so an inventory change often needs the right location columns, not just a quantity.
- Image URLs that are not public. Links behind a login, or local file paths, simply do not import.
- Files that are too large. Very big catalogs can time out or need to be split into smaller files.
- Commas inside values. A description with commas that is not properly quoted shifts every column after it.
The frustrating part is that some of these fail loudly, and some fail quietly, writing the wrong data without an error. You only find out when a customer does.
The deeper limits: no preview, no undo
Even a perfectly formatted import has two structural gaps that no amount of careful formatting fixes:
- There is no real before-and-after preview. Shopify shows you a sample of incoming rows, not a comparison of the current value against the new value for every product you are about to change. You cannot see, at a glance, that 12 prices are about to move the wrong way.
- There is no one-click undo. Once an import runs with overwrite on, the previous values are gone. Recovering means finding an earlier export and importing it back, which is itself another risky import.
A safer way for recurring edits
For ongoing changes to prices and variant data, the workflow you want keeps the spreadsheet comfort and adds the two things CSV import lacks: a preview and an undo. That is exactly what Gridwell does. It connects a private Google Sheet to your store, so you edit in a sheet and push changes with a safety net.
Step 1: Connect your sheet
Connect a Google Sheet through Google's secure file picker, so the app only ever sees the one sheet you choose. No exporting, re-saving, and re-uploading a fragile text file each time.
Step 2: Map once, reuse forever
Map the column that identifies the variant (such as SKU) and the columns you want to push, for example variant price or a variant metafield. You set this mapping once and reuse it for every future update, instead of wrestling with exact header text on every file.
Step 3: Preview every change
Before anything is written, you see a before-and-after preview: the current value, the new value, and exactly which variants change. This is where the typo or the row that should not have moved gets caught, while it is still harmless.
Step 4: Push, and undo if needed
Push the batch in one click. If something is wrong, Gridwell keeps a snapshot of the values it changed, so you can undo the last push and restore the previous values instantly. That is the safety net a raw CSV import never had.
CSV import vs a Google Sheet
| Shopify CSV import | Gridwell (Google Sheet) | |
|---|---|---|
| Create brand-new products in bulk | Yes | Built for edits, not first import |
| Recurring edits to prices and variants | Workable but manual | Built for it |
| Before-and-after preview | No | Yes |
| One-click undo | No | Yes |
| Reuse the same setup | Re-format each file | Saved mapping |
| Risk on a wrong change | Higher, hard to reverse | Lower, reversible |
They are not rivals so much as different tools. Use the CSV import to bring a catalog into Shopify or to rebuild it wholesale. Use a previewed Google Sheet for the recurring price and variant edits you make for the rest of the store's life, where a mistake is one click from being undone.
Edit your catalog without the CSV anxiety
Connect a Google Sheet once, preview every change, push in bulk, and undo anytime. Free to start on the Shopify App Store.
View Gridwell on the Shopify App Store →Frequently asked questions
How do I import products to Shopify with a CSV?
In your admin, go to Products, click Import, and upload a UTF-8 CSV file that uses Shopify's exact column headers. Export your existing products first to get the correct structure. Decide carefully whether to overwrite products with the same handle, because that replaces live data.
Why does my Shopify CSV import keep failing?
The usual causes are wrong file encoding (it must be UTF-8), renamed or misspelled column headers, blank or duplicated handles, image URLs that are not publicly reachable, unquoted commas inside a value, or a file that is too large and needs splitting. Re-exporting a sample from Shopify and matching its structure fixes most cases.
Can I undo a Shopify CSV import?
Not natively. Once an import runs with overwrite enabled, the previous values are gone and you have to restore from an earlier export, which is another risky import. A Google Sheet app like Gridwell keeps a snapshot of what it changed so you can undo a bulk edit in one click.
Is there a better way to bulk edit Shopify products than CSV?
For recurring edits to prices and variant data, yes. A Google Sheet workflow with a before-and-after preview and one-click undo, such as Gridwell, is safer than re-importing a CSV each time. CSV import remains the right tool for the initial bulk creation of a catalog.
What format does a Shopify CSV need to be?
A plain-text, comma-separated file saved in UTF-8, using Shopify's exact column headers, with all rows of a single product sharing one handle. The safest template is an export of your own products from the Shopify admin.