Support article

Shopify CSV Format Explained

Get the Shopify CSV template: fields, variants, images and common mistakes explained.

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.

ColumnWhat to enter
TitleThe product name shown to shoppers.
URL handleA unique value made from letters, numbers and dashes, with no spaces. Every variant of one product shares it.
DescriptionThe product description. HTML is allowed.
VendorThe brand, maker or supplier name.
Product categoryA category from Shopify’s standard product list.
TypeYour own product type for store organization.
TagsTags separated by commas. Put the whole cell in quotes when it contains commas.
Published on online storetrue or false. This controls publication to the Online Store.
Statusactive, draft or archived in Shopify’s native format.
SEO titleThe title used by search engines.
SEO descriptionThe 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.

ColumnWhat to enter
Option1 name and Option1 valueThe first choice and value, such as Size and Medium.
Option2 name and Option2 valueA second choice, such as Color and Blue.
Option3 name and Option3 valueA third choice when the product needs one.
SKUYour stock keeping unit for this variant. Keep each SKU unique.
PriceThe selling price as a number, without a currency symbol.
Compare-at priceThe higher original price used to show a discount.
BarcodesOne barcode or several barcodes separated by semicolons.
Inventory trackerUse shopify when Shopify tracks stock, or leave it blank when stock is not tracked.
Inventory quantityThe stock count. In Shopify’s product CSV this is for a store with one location.
Continue selling when out of stockUse deny to stop sales at zero or continue to keep selling.
Fulfillment serviceThe service that fulfills the variant. Self-fulfilled products normally use manual.
Requires shippingtrue for a physical item and false for a digital or non-shipped item.
Charge taxtrue 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 displayThe unit shown in the store: g, kg, lb or oz.
Cost per itemWhat 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.

ColumnWhat to enter
Product image URLA public link to the product image.
Image positionA number that sets the image order, starting at 1.
Image alt textA short description of the image for shoppers who use a screen reader.
Variant image URLThe 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 headingOlder heading
URL handleHandle
DescriptionBody (HTML)
Product categoryProduct Category
Published on online storePublished
Option1 name / Option1 valueOption1 Name / Option1 Value
Option2 name / Option2 valueOption2 Name / Option2 Value
Option3 name / Option3 valueOption3 Name / Option3 Value
SKUVariant SKU
PriceVariant Price
Compare-at priceVariant Compare At Price
BarcodesVariant Barcode or Barcode
Inventory trackerVariant Inventory Tracker
Inventory quantityVariant Inventory Qty
Continue selling when out of stockVariant Inventory Policy
Fulfillment serviceVariant Fulfillment Service
Requires shippingVariant Requires Shipping
Charge taxVariant Taxable
Weight value (grams)Variant Grams
Weight unit for displayVariant Weight Unit
Product image URLImage Src
Image positionImage Position
Image alt textImage Alt Text
Variant image URLVariant Image
SEO titleSEO Title
SEO descriptionSEO 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 8712345678901 into 8.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.