Multi-store7 min read
Shopify Product CSV Import and Export: A Practical Guide
How the Shopify product CSV works, how variants and images map to rows, and a safe routine for bulk editing and moving products between stores.
In this guide
The product CSV is the most useful bulk tool Shopify has. With it you can edit hundreds of prices at once, back up your catalog, and move products from one store to another. It is also easy to get wrong: one misplaced row can create a duplicate product, and one blank cell can wipe a field you meant to keep.
This guide explains how the file is structured, how export and import behave, and a routine that keeps imports safe.
Exporting: pick the right scope and format
From the Products page, Shopify lets you export (Shopify Help Center):
- the current page of products,
- all products,
- the products you have selected,
- or the products that match your search and filters.
You also choose the format: a CSV for Excel, Numbers or another spreadsheet program, or a plain CSV file for a text editor. Small exports download in your browser; for the current page and selected products options, the file is emailed instead if any single product has more than 100 variants. If you are not the store owner, the owner receives a copy by email too.
One thing the export does not contain: the images themselves. When you import the file into a new store, Shopify notes that images are created only if they are still viewable at the source, so leave the original store and its products in place until the new store has its images (Shopify Help Center). Shopify also warns that sorting the file in a spreadsheet can separate variants or image URLs from their product.
The product CSV holds products only. For an order file, see how to export Shopify orders with tracking numbers and line-item properties.
How the file is structured
One product, several rows
A product CSV is not one row per product. It is one row per variant, and extra rows for extra images. Rows that share the same handle belong to the same product (Shopify Help Center).
- The first row of a product carries product-level fields: title, description, vendor, type, tags and status.
- Following rows with the same handle skip the title, description, vendor and tags columns and carry only variant fields, such as option values, SKU and price, or an extra image.
If you sort the file by anything other than handle, you can split a product’s rows apart. Keep rows for one product together.
The handle is the key
The handle is the product’s URL slug, for example linen-shirt-white. A valid handle contains letters, dashes and numbers, and no spaces. On import, Shopify uses it to decide whether a row updates an existing product or creates a new one. That has two consequences:
- Change a handle in the file, and the import creates a new product instead of updating the old one.
- Rows for two different products that share a handle are read as one product.
Treat the handle column as read-only unless you mean to create products.
Options and variants
Each variant is defined by up to three options, such as Size, Color and Material. The option names sit on the product’s first row; each variant row carries its values. A shirt in three sizes and two colors is six variant rows under one handle.
Images
Images are referenced by public URL, with one row per image. Shopify downloads them during import, so the URLs must be reachable. To add several images to one product, add extra rows with the same handle and only the image columns filled.
Status
If the Status column is present, every product needs a value in it. If you remove the column, imported products are set to active. That second rule is easy to miss: import new products without a Status column and they go live straight away.
The two rules that cause most damage
Blank cells overwrite. When you import with overwrite on, a blank cell in a column that is not required overwrites the matching value in your store with nothing (Shopify Help Center).
Missing columns don’t. With overwrite on, values are replaced for the columns included in the file, and columns you leave out keep their current values (Shopify Help Center).
Put together, the safest edit file has only the handle, the columns you are changing, and the columns the format requires. Delete the rest before importing rather than leaving them blank.
A safe routine for bulk edits
- Export first. Export the products you want to change, or the whole catalog, before editing anything. That file is your backup.
- Edit a copy. Never edit the backup. Work on a copy and keep the original untouched.
- Remove columns you are not changing. Fewer columns means fewer cells that can overwrite something by accident.
- Keep the encoding. Save as UTF-8 with LF-style line endings, as Shopify asks. Some spreadsheet apps change encoding or reformat numbers; barcodes with leading zeros and long numbers are the usual victims. Format those columns as text before editing.
- Check the file size. A product CSV can’t exceed 15 MB, so split large catalogs into several files (Shopify Help Center).
- Test with a few products. Import a file with three or four products first and check them in the admin before importing the rest.
- Import with overwrite only when you mean it. With “Overwrite products with matching handles” ticked, existing products are updated; without it, products with matching handles are skipped.
- Review the summary, then check the result. Shopify shows the import details before you confirm. Afterwards, spot-check prices, variants, status and images.
Stock belongs in a different file
The product CSV has an inventory quantity column, but Shopify notes it is used only for stores with a single location (Shopify Help Center). With several locations, use the inventory CSV, which has a row per variant and location and, in its All states format, protection against overwriting changes made after you exported (Shopify Help Center). Our post-holiday stocktake guide walks through that file.
Moving products between stores
The same file format is how you copy a catalog to a second store, for example a new regional store:
- Export from the source store.
- Remove products that should not carry over, such as items that do not sell in the new region.
- Leave the source store and its products intact until the import has finished, so the images can still be fetched.
- Adjust prices for the new store’s currency if needed.
- Decide the status: keep new products as drafts until you have reviewed them.
- Import into the target store with a small sample first, then the rest.
- Set stock in the new store separately, because locations differ between stores.
The copy is a one-off. Nothing keeps the two catalogs in step afterwards, so a later price change has to be made in each store; see how to keep inventory in step across multiple Shopify stores for the options.
Common errors and fixes
| Problem | Likely cause | Fix |
|---|---|---|
| Duplicate products after import | Handles changed, or spaces in the handle | Restore the original handles from the backup |
| Variants missing | Rows for one product split apart, or option values blank | Sort by handle and fill option values |
| Fields wiped | Blank cells imported with overwrite on | Re-import those columns from the backup |
| New products live too early | No Status column in the file | Add Status with draft |
| Images not showing | URL not public, or redirects to a login page | Host images at public URLs |
| Barcodes lost leading zeros | Spreadsheet treated the column as a number | Format as text, re-enter from backup |
| Accented characters broken | File not saved as UTF-8 | Re-save as UTF-8 |
Pre-import checklist
- Backup export saved and untouched
- Only needed columns left in the edit file
- Handles unchanged
- Status column present, with
draftfor new products - UTF-8, under 15 MB
- Test import of a few products checked
- Overwrite option chosen on purpose
FAQ
What is the maximum size of a Shopify product CSV?
15 MB. Split larger catalogs into several files and import them one after another.
Why did my import create duplicate products?
Shopify matches products by handle. If a handle was changed, or contains spaces, the import treats the row as a new product.
Does a blank cell in the CSV delete existing data?
With overwrite on, yes: a blank cell in a column that is not required overwrites the store’s value with nothing. Remove columns you are not changing instead of leaving them empty.
Does the product CSV export include images?
No. Shopify notes that the images aren’t included in the CSV file. When you import into another store, images come across only if they are still viewable at the source, so keep the original store and its products intact until the import is done.
Can I update stock with the product CSV?
Only for stores with a single location. With several locations, use the inventory CSV, which handles quantities per location.