Which columns does a Shopify product CSV need, and what does each one mean? (2026)

Updated · 6 min read

Only Title is required to create a product, and Handle (called "URL handle" in the current template) plus Title are required to update a product or to add variants. Every other column is optional, but variant columns such as SKU or weight need the Option1 name and Option1 value columns next to them, and a column that is present overwrites the store value even when its cell is blank. Shopify renamed most headers in its current template ("Variant SKU" became "SKU", "Image Src" became "Product image URL") and says it "maintains backward compatibility with older column names", so both spellings import, but each field must appear only once and header names are case-sensitive.

How the rows are organised

  • One row per variant. The first row of a handle carries the product fields (Title, Description, Vendor, Tags…) and the first variant. Following rows repeat the handle and give only the variant fields.
  • Extra image rows contain only the handle and the image fields (image URL, position, alt text).
  • A product without variants still has one variant. Shopify's export writes Option1 Name Title and Option1 Value Default Title; the column guide says that for a single-option product the value "should be Default Title".
  • Rows of the same handle must stay together. Shopify warns that sorting the file in Excel or Numbers can lose images (Importing products).
  • The file must be UTF-8 with LF line feeds and 15 MB or less.

Column reference

Values and defaults are from Shopify's CSV columns page. "Older name" is the header used by exports and templates before the current version.

Current headerOlder nameLevelAllowed values / defaultTypical error
TitleTitleProductFree text. Required"Ignored line … because it did not contain product data" when the first row of a handle has no title
URL handleHandleProductLetters, numbers, dashes, no spaces. Defaults from TitleSpaces or symbols; capitals that don't match the existing handle
DescriptionBody (HTML)ProductText or HTMLUnclosed tags; text cut at Excel's 32,767-character cell limit
VendorVendorProductFree textBlank cell erases the vendor with overwrite
Product categoryProduct CategoryProductStandard Product Taxonomy breadcrumb or ID"Not a valid product category"
TypeTypeProductFree text—
TagsTagsProductComma-separated, up to 250—
Published on online storePublishedProducttrue (default), falseValues like yes or 1
StatusStatusProductactive (default), draft, archived. If the column is present it needs a valueBlank status
SKUVariant SKUVariantFree text. Required with a custom fulfillment serviceDuplicates; Excel scientific notation (1.23457E+11)
BarcodesVariant Barcode / BarcodeVariantUp to 20, separated by ;. The old singular Barcode column can't be used together with BarcodesLeading zeros dropped by Excel
Option1 name / value (to Option3)Option1 Name / ValueProduct / variantUp to 3 options"Validation failed: options are not unique"
PriceVariant PriceVariantNumber without currency symbol. Default 0.00"Validation failed: price can't be blank"; decimal commas
Compare-at priceVariant Compare At PriceVariantNumber without currency symbolNot above Price, so no reduction shows
Cost per itemCost per itemVariantNumber without currency symbol—
Charge taxVariant TaxableVarianttrue (default), false—
Inventory trackerVariant Inventory TrackerVariantshopify, shipwire, amazon_marketplace_web, or blank (not tracked)—
Inventory quantityVariant Inventory QtyVariantInteger, default 0, single-location stores only"Inventory quantity is not a number", "can't be blank"
Continue selling when out of stockVariant Inventory PolicyVariantdeny (default), continue. Required if a tracker is set"Inventory policy is not included in the list"
Weight value (grams)Variant GramsVariantNumber only, "without the unit of measurement or decimals". Default 0950g, or a kilogram value typed in the grams column
Weight unit for displayVariant Weight UnitVariantg, kg (default), lb, ozkgs, lbs
Requires shippingVariant Requires ShippingVarianttrue (default), false—
Fulfillment serviceVariant Fulfillment ServiceVariantmanual (default) or an existing service handle"Fulfillment service can't be blank"
Product image URLImage SrcImagePublic URLLocal paths, Google Drive share links, _thumb / _small / _medium files
Image positionImage PositionImageInteger from 1—
Image alt textImage Alt TextImageUp to 512 characters—
Variant image URLVariant ImageVariantImage URL—
Gift cardGift CardProductfalse (default), true. Gift cards can't be created by CSV—
SEO titleSEO TitleProductUp to 70 characters. Defaults to TitleLonger titles
SEO descriptionSEO DescriptionProductUp to 320 characters. Defaults to DescriptionLonger descriptions
Google Shopping / …sameProductGoogle Product Category, Gender, Age Group, MPN, Condition, Custom Product, Custom Label 0–4Unknown sub-column names
Name (product.metafields.namespace.key)varies by export dateProductProduct metafields only; variant metafields aren't supported—
Price / [market], Compare-at price / [market], Included / [market]sameVariant / productHeader uses your market nameMarket renamed since the export

The column guide also lists Packed product length, width, height and dimension unit (fill all four or none) and an optional Collection column (one collection name per product, not exported).

Headers: exact names matter

Shopify's troubleshooting section says "column header names are case-sensitive" and that a header row that doesn't match the template causes errors such as "Invalid CSV header: missing headers" (check trailing spaces) or the "Choose column headings" mapping window (Common import issues). The usual culprits:

In the fileShould be
body (html)Body (HTML) (or Description)
Variant PriseVariant Price (or Price)
Title (trailing space)Title
Option4 NameNot possible: 3 options maximum
Handle and URL handle in the same fileKeep one

To check a whole file at once, the checker at Shopify product CSV checker matches each header against both the current and the older names, suggests the closest valid name (by edit distance) for anything misspelled, and lists every cell that breaks one of the rules in the table above with its row number.

FAQ

Do I have to switch to the new header names? No. Shopify says it keeps backward compatibility with older column names. Don't mix both names for the same field in one file.

Which columns can I delete from an export before re-importing? Any non-required column you don't want to change. With overwrite, an absent column keeps the store value, whereas an empty column erases it. Keep Handle, Title and the Option name/value columns.

Why does my product have a variant called "Default Title"? That is how Shopify represents a product without variants in a CSV: Option1 Name Title, Option1 Value Default Title. Keep these two values in files you re-import: Shopify documents that an overwrite import without the Option1 columns deletes the existing variants.

Can I set inventory for several locations in the product CSV? No. The Inventory quantity column only works for single-location stores. Shopify points to the inventory CSV for per-location quantities.

Where do I find the official template? In the admin under Products › Import, which links to a sample CSV, and on the Using CSV files page.

Shopify product CSV checker

  • CSV
  • Excel
  • CSV
  • Excel

Report on screen · fixed CSV $4.99

Check a product CSV