How to Format a Shopify Product CSV (The Complete Guide)

If you're importing products to Shopify, you're going to deal with their CSV format. It's not complicated once you understand it — but the documentation leaves gaps, and one wrong column can silently break your entire import.

This guide covers every column in Shopify's product CSV, what it expects, and the mistakes that trip people up.

Why Shopify uses CSV for product imports

Shopify's admin lets you add products one at a time, but if you have more than a handful, that's not realistic. The CSV import is their bulk solution. You fill in a spreadsheet, upload it, and Shopify creates (or updates) every product in one go.

The catch: Shopify's CSV format has specific column names, specific value formats, and specific rules for how variants work. Deviate from any of them and your import either fails or creates mangled products.

The required columns

At minimum, Shopify needs these columns in your CSV:

  • Handle — The URL slug for the product. Lowercase, hyphens instead of spaces. wool-beanie, not Wool Beanie. Every variant row for the same product uses the same handle.
  • Title — The product name. Only fill this in on the first row for each product. Leave it blank on variant rows.
  • Vendor — Your brand or supplier name.
  • Publishedtrue or false. Whether the product is visible in your store.
  • Variant Price — The price for this specific variant. Required even if you only have one variant.

The columns most people get wrong

Body (HTML)

This is your product description. Shopify expects HTML, not plain text. If you paste in plain text, it'll render as one giant paragraph with no line breaks. Wrap paragraphs in <p> tags. Use <ul> and <li> for bullet points.

Option1 Name / Option1 Value

This is how variants work. If your product comes in sizes, set Option1 Name to Size and Option1 Value to Small, Medium, or Large on each row. You can have up to three options (Option1, Option2, Option3).

The first row for a product should have the Title filled in. Subsequent variant rows repeat the Handle but leave Title blank.

Image Src

Shopify expects a full URL here, not a filename. IMG_4829.jpg won't work. The image needs to be hosted somewhere accessible — a CDN, Google Drive with public sharing, or any direct image URL.

SEO Title / SEO Description

These map to the meta title and meta description for the product page. If you leave them blank, Shopify uses the product title and the first chunk of your description. For better search rankings, fill these in with keyword-rich copy under 60 characters (title) and 160 characters (description).

How variants actually work in the CSV

This is where most imports break. Here's the pattern:

  • Row 1: Full product data — Handle, Title, Body, all options, Image, Price
  • Row 2+: Same Handle, blank Title, blank Body, different Option values, different Price/SKU if needed

If you put the Title on every row, Shopify creates duplicate products. If you use a different Handle on a variant row, it becomes a separate product.

Common formatting mistakes

  • Commas in descriptions — If your description contains commas, the whole field needs to be wrapped in double quotes. Most spreadsheet apps handle this automatically, but if you're editing the raw CSV, watch for it.
  • Curly quotes — Smart quotes (the curly kind) can cause encoding issues. Use straight quotes.
  • Extra whitespace — Trailing spaces in Handle or Option values create mismatches. wool-beanie and wool-beanie are different handles.
  • Wrong encoding — Save as UTF-8. Other encodings break special characters.

The full column reference

Here's every column Shopify accepts in their product CSV:

Handle, Title, Body (HTML), Vendor, Product Category, Type, Tags, Published, Option1 Name, Option1 Value, Option2 Name, Option2 Value, Option3 Name, Option3 Value, Variant SKU, Variant Grams, Variant Inventory Tracker, Variant Inventory Qty, Variant Inventory Policy, Variant Fulfillment Service, Variant Price, Variant Compare At Price, Variant Requires Shipping, Variant Taxable, Variant Barcode, Image Src, Image Position, Image Alt Text, Gift Card, SEO Title, SEO Description, Google Shopping columns, Variant Image, Variant Weight Unit, Variant Tax Code, Cost per item, Included / International, Status.

You don't need all of them. Most imports use 15–20 columns. But every column name must match exactly — capitalization, spaces, parentheses, all of it.

Or skip the spreadsheet entirely

If formatting a CSV sounds like more work than you signed up for, that's because it usually is. Catalogd takes your raw product data — whatever format it's in — and generates a perfect Shopify CSV with AI-written descriptions, SEO fields, and properly formatted variants. Upload your messy spreadsheet, download a clean one.

Try it free with 5 products and see the difference.