The Shopify product CSV format puts product details into a spreadsheet. Each row describes a product, a variant or an extra image. Each column holds one type of data, such as the title, price or SKU.
Shopify’s built-in importer expects its own column names. Simple CSV can map differently named source columns to Shopify fields before an import.
How rows and columns fit together
The first row contains the column headings. Shopify’s current template uses headings such as Title, URL handle and Price. Older Shopify exports use headings such as Handle, Body (HTML) and Variant Price. Shopify keeps older headings working, so the file you export might not look exactly like a newer template.
For a new product without variants, Shopify only requires a title. A URL handle is also required when the product has variants. For an update through Shopify’s built-in importer, include the title and URL handle. The handle is the part at the end of the product page address, such as canvas-backpack in /products/canvas-backpack.
Keep the headings from the template or export that you started with. Do not rename only some of them or mix two template versions in one file. The reference tables below use Shopify’s current headings. A separate table lists their older equivalents.
Product column reference
These columns describe the product shared by all its variants. Put the shared details on the first row for that product.
| Column | What to enter |
|---|---|
| Title | The product name shown to shoppers. |
| URL handle | A unique value made from letters, numbers and dashes, with no spaces. Every variant of one product shares it. |
| Description | The product description. HTML is allowed. |
| Vendor | The brand, maker or supplier name. |
| Product category | A category from Shopify’s standard product list. |
| Type | Your own product type for store organization. |
| Tags | Tags separated by commas. Put the whole cell in quotes when it contains commas. |
| Published on online store | true or false. This controls publication to the Online Store. |
| Status | active, draft or archived in Shopify’s native format. |
| SEO title | The title used by search engines. |
| SEO description | The description used by search engines. |
The optional Collection column is a special case in Shopify’s built-in importer. It can add a product to one collection during import. Shopify does not include this column in product exports, and other custom columns can break the native format.
Variant, price and inventory columns
A variant is one version of a product, such as a medium blue T-shirt. Each variant gets its own row.
| Column | What to enter |
|---|---|
| Option1 name and Option1 value | The first choice and value, such as Size and Medium. |
| Option2 name and Option2 value | A second choice, such as Color and Blue. |
| Option3 name and Option3 value | A third choice when the product needs one. |
| SKU | Your stock keeping unit for this variant. Keep each SKU unique. |
| Price | The selling price as a number, without a currency symbol. |
| Compare-at price | The higher original price used to show a discount. |
| Barcodes | One barcode or several barcodes separated by semicolons. |
| Inventory tracker | Use shopify when Shopify tracks stock, or leave it blank when stock is not tracked. |
| Inventory quantity | The stock count. In Shopify’s product CSV this is for a store with one location. |
| Continue selling when out of stock | Use deny to stop sales at zero or continue to keep selling. |
| Fulfillment service | The service that fulfills the variant. Self-fulfilled products normally use manual. |
| Requires shipping | true for a physical item and false for a digital or non-shipped item. |
| Charge tax | true when the variant is taxable and false when it is not. |
| Weight value (grams) | The shipping weight in grams, such as 250. |
| Weight unit for display | The unit shown in the store: g, kg, lb or oz. |
| Cost per item | What the item costs you. Shoppers do not see it. |
Simple CSV reads, matches, exports and updates only the first barcode on each variant. A secondary barcode cannot match a product, and a mapped barcode column updates the first barcode while leaving the others in place.
Shopify rejects a native CSV that contains both the current Barcodes column and the older Barcode column. Keep the heading from the template or export that you started with.
Option columns depend on each other. If you update a SKU, weight or another variant field through Shopify’s importer, keep the option name and value columns that identify the variant. Leaving those columns out can replace the existing variants with a new default variant.
Changing an option value can also delete the old variant ID and create a new one. That can break apps or integrations that saved the old ID. Test changes to options on a small file first.
Shopify’s product CSV only sets inventory for a store with one location. For several locations, use Shopify’s separate inventory CSV. Simple CSV takes a different approach: every manual import updates one Shopify location chosen during setup. This location choice is available on Free, Pro and Scale. A Pro or Scale automation also updates its chosen location, so separate automations can update different locations on their own schedules.
How several variants share one product
Repeat the same handle on every variant row. Add the shared product details to the first row, then leave those details blank on the remaining variant rows.
URL handle,Title,Option1 name,Option1 value,SKU,Price
classic-tee,Classic Tee,Size,Small,TEE-S,29.99
classic-tee,,Size,Medium,TEE-M,29.99
classic-tee,,Size,Large,TEE-L,29.99
This creates one product with three sizes. Giving each row a different handle would create three separate products.
Image columns and extra image rows
Product CSV files contain image URLs, not the image files themselves.
| Column | What to enter |
|---|---|
| Product image URL | A public link to the product image. |
| Image position | A number that sets the image order, starting at 1. |
| Image alt text | A short description of the image for shoppers who use a screen reader. |
| Variant image URL | The image shown when a shopper selects that variant. |
For Simple CSV, start each image URL with https:// or //. A relative path such as /images/photo.jpg is skipped, and the product imports without that image. The URL must open without a sign-in and point to an image rather than a webpage.
Add extra product images on new rows. Repeat the handle, leave the product fields blank and fill in the image columns.
URL handle,Title,Product image URL,Image position
canvas-bag,Canvas Bag,https://example.com/bag-front.jpg,1
canvas-bag,,https://example.com/bag-side.jpg,2
Older Shopify header equivalents
Shopify still accepts its older product CSV headings. If your export uses the older format, keep those headings throughout the file.
| Current heading | Older heading |
|---|---|
| URL handle | Handle |
| Description | Body (HTML) |
| Product category | Product Category |
| Published on online store | Published |
| Option1 name / Option1 value | Option1 Name / Option1 Value |
| Option2 name / Option2 value | Option2 Name / Option2 Value |
| Option3 name / Option3 value | Option3 Name / Option3 Value |
| SKU | Variant SKU |
| Price | Variant Price |
| Compare-at price | Variant Compare At Price |
| Barcodes | Variant Barcode or Barcode |
| Inventory tracker | Variant Inventory Tracker |
| Inventory quantity | Variant Inventory Qty |
| Continue selling when out of stock | Variant Inventory Policy |
| Fulfillment service | Variant Fulfillment Service |
| Requires shipping | Variant Requires Shipping |
| Charge tax | Variant Taxable |
| Weight value (grams) | Variant Grams |
| Weight unit for display | Variant Weight Unit |
| Product image URL | Image Src |
| Image position | Image Position |
| Image alt text | Image Alt Text |
| Variant image URL | Variant Image |
| SEO title | SEO Title |
| SEO description | SEO Description |
Import new products as Active, Draft or Unlisted
When you add new products with Simple CSV, the Preview page shows the status that the import will write. You can keep the mapped Status value or use Override status for all new products to choose Active, Draft or Unlisted for every newly created product.
Unlisted products can be opened and bought through a direct link, but they stay out of Shopify-powered search, collections and recommendations.
The override replaces both the mapped Status column and the default status. Clear it with Use mapped status (default: Active) to use the file value again. Archived is not offered as an override.
This setting does not change existing products during an update import. It is available on every plan. A Pro or Scale automation saves the choice and uses it whenever the scheduled file is processed.
Blank cells are not the same as missing columns
This difference matters when you select Shopify’s option to overwrite products with matching handles.
- A blank cell in an included column can clear the existing value. A blank Vendor cell, for example, can remove the saved vendor.
- A column left out of the file leaves that existing field unchanged in most cases.
- A column that depends on missing option data can still remove variant information.
Export the products you plan to change, keep a backup and test a few rows before a large update. Shopify does not have a one-click undo for a product CSV import.
Spreadsheet and file rules
Save the file as CSV with UTF-8 encoding so names and descriptions keep their accents and other special characters. Shopify’s product CSV file limit is 15 MB, so split a larger file into smaller imports.
Watch for these spreadsheet changes:
- Excel or Google Sheets can turn a long barcode such as
8712345678901into8.71235E+12. Format the barcode column as Text before pasting values. - A comma inside a description or tag list must stay inside a quoted cell. Spreadsheet apps handle this when you export as CSV.
- Prices should contain numbers such as
29.99, not currency symbols such as$29.99. - Column names are case-sensitive in Shopify’s native importer. Copy them from the template instead of typing them again.
Using a Shopify CSV template
The safest starting point is an export of products from your own store. It uses the column names that Shopify currently gives your store and shows how your existing variants are arranged.
You can also download Shopify’s official product CSV template. Remove its example products before adding your own.
Simple CSV can generate an empty template, a template with an example row or a file based on your current store data. Open Simple CSV from Shopify Admin to choose one.
More help
If your import still fails, see Fix CSV import errors.
For the full native import workflow and more examples, read the complete Shopify CSV import guide.
If your supplier updates a feed regularly, read our Shopify supplier sync guide. Scheduled URL imports are available on Pro and Scale.