On this page
โ† Back to Blog
  • shopify
  • csv
  • products
  • import

Shopify Product CSV: Complete Field Reference

Shopify Product CSV: Complete Field Reference

Quick answer

A Shopify product CSV needs only a Title column to create a product. To update products or add variants, you also need URL handle, Option1 name, and Option1 value. Every other column is optional, and a blank cell can overwrite existing data when you import with "Overwrite products with matching handles" turned on.

Shopify's product CSV has dozens of columns, and a small mistake in one of them, like a misspelled header, a weight entered in kilograms, or a variant row missing its handle, can make an import fail or change the wrong data. This reference lists every column in Shopify's current product CSV format, what it accepts, and what happens when you leave it blank.

The details below come from Shopify's product CSV documentation. If you want a file with the headers already in place, the Shopify CSV Template generator builds one for simple products, size or color variants, and gift cards.

Which columns are required in a Shopify product CSV?

It depends on what the import does:

TaskRequired columns
Create a new productTitle
Create a product with variantsTitle, URL handle, Option1 name, Option1 value
Update existing productsURL handle, Title
Update variant data such as SKU or weightURL handle, Title, Option1 name, Option1 value

The Option1 columns matter more than they look. Shopify matches variant data (SKU, weight, price) to variants through Option1 name and Option1 value. If you import variant columns without them, Shopify creates a new default variant and deletes the existing ones.

Product columns

These describe the product as a whole. On a product with several variants, fill them in on the first row only.

ColumnWhat it holdsAllowed valuesDefault if blank
TitleProduct name shown to customersTextNone (required to create)
URL handleUnique ID used in the product URLLowercase letters, numbers, and hyphens; no spacesGenerated from Title (Black Sunglasses becomes black-sunglasses)
DescriptionProduct descriptionText or HTMLBlank
VendorBrand, manufacturer, or supplierTextBlank
Product categoryCategory from Shopify's standard taxonomyFull breadcrumb (Home & Garden > Linens & Bedding > Bedding > Bed Sheets) or category ID (hg-15-1-2)Blank
TypeYour own product groupingTextBlank
TagsKeywords for search and filteringComma-separated, up to 250 per productBlank
Published on online storeVisibility on the Online Store channeltrue or falsetrue
StatusProduct statusactive, draft, or archivedactive
Gift cardMarks the product as a gift cardtrue or falsefalse
SEO titleTitle in search resultsUp to 70 charactersUses Title
SEO descriptionMeta description in search resultsUp to 320 charactersUses Description

Variant columns

Each variant gets its own row. Every variant row repeats the URL handle, and you leave Title, Description, Vendor, and Tags empty on rows after the first.

ColumnWhat it holdsAllowed valuesDefault if blank
Option1 name / Option1 valueFirst option, for example Size / SmallTextBlank; a product with no options gets one default variant
Option2 name / Option2 valueSecond option, for example Color / RedTextBlank
Option3 name / Option3 valueThird optionTextBlank
Option1 LinkedTo (and 2, 3)Links an option to a category metafieldproduct.metafields.shopify.<attribute>Blank
SKUStock keeping unitText; can't be blank if you use a custom fulfillment serviceBlank
BarcodesUp to 20 barcodes per variantSemicolon-separated type:value pairs, such as gtin:00012345678905Blank
PriceSelling priceNumber, no currency symbol0.00
Compare-at priceOriginal price shown struck throughNumber, no currency symbolBlank
Cost per itemWhat the item costs youNumber, no currency symbolBlank
Charge taxWhether tax appliestrue or falsetrue
Inventory trackerWho tracks stockshopify, shipwire, amazon_marketplace_web, or blankBlank (not tracked)
Inventory quantityStock on hand, single-location stores onlyWhole number0
Continue selling when out of stockOverselling ruledeny or continuedeny
Weight value (grams)Variant weightWhole grams, no unit or decimals (5.125 kg is 5125)0
Weight unit for displayUnit shown to customersg, kg, lb, or ozkg
Requires shippingWhether the item shipstrue or falsetrue
Fulfillment serviceWho fulfills the variantmanual, shipwire, webgistix, amazon_marketplace_web, or a custom service name in lowercase with dashesmanual
Variant image URLImage for this specific variantPublic URL starting with https:// (or http://)Blank

Two limits trip people up. Inventory quantity only works for stores with one location; multi-location stores need Shopify's separate inventory CSV. And Barcodes replaced the older single Barcode column, so a file can't contain both.

Image columns

Images go one per row. For each extra image, add a row with the same URL handle and fill in only the image columns. A product can have up to 250 images.

ColumnWhat it holdsAllowed valuesDefault if blank
Product image URLLink to the image filePublic URL starting with https:// (or http://)Blank
Image positionDisplay orderNumber, starting at 1Set automatically
Image alt textText for screen readersUp to 512 characters (Shopify suggests about 125)Blank

Market and Google Shopping columns

ColumnWhat it holdsAllowed valuesDefault if blank
Included / [market name]Whether the product sells in that markettrue or falsetrue
Price / [market name]Fixed price in that market's currencyNumberBlank
Compare-at price / [market name]Fixed compare-at price for that marketNumberBlank
Google Shopping / Google product categoryGoogle's product taxonomyBreadcrumb or category IDBlank
Google Shopping / Gender, Age group, MPN, Condition, Custom label 0 to 4Attributes for Google Shopping feedsVaries by attributeBlank

How do metafield columns work?

Product metafields get one column each. The header is either product.metafields.<namespace>.<key> or a label followed by that path in parentheses, for example Fabric (product.metafields.custom.fabric). Shopify supports common types such as single_line_text_field, multi_line_text_field, number_integer, number_decimal, boolean, date, url, color, weight, money, and their list. versions.

Variant metafields aren't supported in the product CSV. Edit those in the bulk editor instead.

You can also add a Collection column on import to put each product into one collection. Shopify creates the collection if it doesn't exist. The column is import-only, so it won't appear in exports.

Why do some templates say "Handle" instead of "URL handle"?

Shopify renamed its CSV headers, and older templates still use the previous names. Shopify accepts the old names for backward compatibility but recommends the current format. The most common pairs:

Older headerCurrent header
HandleURL handle
Body (HTML)Description
PublishedPublished on online store
Variant SKUSKU
Variant PricePrice
Variant Compare At PriceCompare-at price
Variant GramsWeight value (grams)
Variant Weight UnitWeight unit for display
Variant Inventory TrackerInventory tracker
Variant Inventory QtyInventory quantity
Variant Inventory PolicyContinue selling when out of stock
Variant Fulfillment ServiceFulfillment service
Variant Requires ShippingRequires shipping
Variant TaxableCharge tax
Variant BarcodeBarcodes
Image SrcProduct image URL
Image Alt TextImage alt text
Variant ImageVariant image URL

Whichever set you use, keep it consistent. Shopify's import page asks that headers match the sample file exactly, including case, so handle in lowercase won't work where Handle is expected.

What happens to blank cells when you overwrite products?

When you import with Overwrite products with matching handles selected, Shopify treats blanks and missing columns differently:

  • A column that's in the file but left blank replaces the existing value with a blank.
  • A column that isn't in the file at all leaves the existing value alone.
  • Changing anything in Option1 value, Option2 value, or Option3 value deletes the existing variant IDs and creates new ones. Any app or report that stores variant IDs will need the new ones.

That makes a trimmed file the safest update: keep the handle, Title, and the columns you mean to change, plus Option1 name and Option1 value if you touch any variant field. If you import a full export instead, make it fresh, so older values in other columns don't overwrite recent edits in the admin. The same rule applies to bulk price edits and tag changes.

File format rules

  • Save as UTF-8 with LF line endings.
  • The first row must be the column headers.
  • Separate values with commas. If you edit in Excel, check that the export uses commas and not semicolons.
  • Keep the file under 15 MB.
  • Link images by URL; you can't embed image files in a CSV.

If an import still fails, Shopify's common import issues page lists each error message and its fix.

Start from a working template

Building the header row by hand is where most typos creep in. The Shopify CSV Template generator gives you a file with the headers and sample rows for your product type, so you only replace the sample values. It uses the older header names listed above, which Shopify still accepts. It runs in your browser, and the file never leaves your computer.

If you edit your catalog in spreadsheets regularly, ShopSheets pulls your Shopify products straight into Google Sheets, so you can start from your real data instead of an empty template.

Ready to try it?

Automatic Shopify โ†’ Sheets sync.

Orders and fulfillments โ€” always up to date in your spreadsheet.

Try ShopSheets free