← All posts

Shopify CSV Format Explained: Every Column You Need to Know

TL;DR

Shopify's product CSV has specific columns for product info, variants, images, and SEO. Getting the format wrong causes import failures. If you'd rather skip the manual data entry, Ohavah generates correctly formatted Shopify CSVs from your supplier invoices automatically.

Turn supplier invoices into Shopify products instantly

Skip the manual data entry. Upload a PDF, get ready-to-import products.

Shopify's CSV import is powerful, but the format is particular. One wrong column name or a misplaced value and your import fails - often with unhelpful error messages. This guide breaks down every column so you know exactly what goes where.

How to Get the Template

The best starting point is Shopify's own sample file:

  1. Go to Shopify Admin > Products
  2. Click Import
  3. Click "Download a sample CSV template"

This gives you a file with all the correct column headers and a few example rows.

Required vs. Optional Columns

Shopify only strictly requires a few columns to create a product:

  • Handle - always required (the URL slug for the product)
  • Title - required on the first row for each handle

Everything else is technically optional, but in practice you'll want to fill in most columns to create useful product listings.

Column-by-Column Reference

Product-Level Columns

These only need values on the first row for each Handle. Subsequent variant rows leave them blank.

Column Description
Handle URL-friendly identifier (e.g., classic-tee). Lowercase, hyphens instead of spaces. Must be unique per product.
Title Product display name shown to customers.
Body (HTML) Product description. Supports HTML tags for formatting.
Vendor Brand or supplier name. Shows up in Shopify filters.
Product Category Shopify's standardized product taxonomy (e.g., "Apparel & Accessories > Clothing > Shirts"). Used for tax and reporting.
Type Your custom product type (e.g., "T-Shirts"). Used for filtering in admin and collections.
Tags Comma-separated tags (e.g., summer, cotton, new-arrival). Used for automated collections and search.
Published TRUE or FALSE. Whether the product is visible on your storefront.
Status active, draft, or archived. Controls product state.

Variant-Level Columns

These appear on every row, including the first row and each additional variant row.

Column Description
Option1 Name Name of the first option (e.g., "Size").
Option1 Value Value for this variant (e.g., "Medium").
Option2 Name Name of the second option (e.g., "Color"). Leave blank if unused.
Option2 Value Value for this variant (e.g., "Blue").
Option3 Name Name of the third option. Leave blank if unused.
Option3 Value Value for this variant.
Variant SKU Stock keeping unit - your internal identifier.
Variant Grams Weight in grams (used for shipping calculations).
Variant Inventory Tracker Usually shopify. Set to blank if you don't track inventory.
Variant Inventory Qty Starting stock quantity. Only used on initial import.
Variant Inventory Policy deny (stop selling at 0) or continue (allow overselling).
Variant Fulfillment Service Usually manual.
Variant Price Selling price (e.g., 29.99). No currency symbol.
Variant Compare At Price Original/strikethrough price for sale items. Leave blank if not on sale.
Variant Requires Shipping TRUE or FALSE.
Variant Taxable TRUE or FALSE.
Variant Barcode UPC, ISBN, or other barcode.

Image Columns

Column Description
Image Src Full URL to the product image (must be publicly accessible).
Image Position Order of the image (1, 2, 3...).
Image Alt Text Alt text for SEO and accessibility.

SEO Columns

Column Description
SEO Title Custom title tag for the product page (max ~70 characters).
SEO Description Custom meta description (max ~320 characters).

Row Structure Rules

This is where most mistakes happen:

  1. First row for a handle: fill in all product-level columns plus the first variant's details
  2. Additional variant rows: same Handle, leave product-level columns blank, fill in variant columns only
  3. Image-only rows: same Handle, only fill in Image Src / Position / Alt Text - used to add extra images without creating variants

Example with two sizes and two images:

Handle,Title,Option1 Name,Option1 Value,Variant Price,Image Src
classic-tee,Classic Tee,Size,Small,29.99,https://example.com/tee-front.jpg
classic-tee,,Size,Medium,29.99,
classic-tee,,,,, https://example.com/tee-back.jpg

Common Errors and Fixes

"Invalid CSV file" on upload - Your file might not be UTF-8 encoded. In Excel, use "Save As > CSV UTF-8". In Google Sheets, download as CSV (it's UTF-8 by default).

Products importing without variants - Check that your Option1 Name and Value columns are filled in. If they're blank, Shopify creates a "Default Title" variant.

Duplicate products instead of updates - When reimporting, check "Overwrite existing products that have the same handle". If unchecked, Shopify creates new products even when the handle already exists.

Prices showing wrong - Don't include currency symbols or thousand separators. Use 29.99, not $29.99 or 1,299.99.

Stop entering products manually

Ohavah turns your supplier invoices into Shopify-ready products automatically.