k-sync
Back to blog

Shopify product CSV format: the complete reference guide (2026)

Everything you need to know about Shopify's product CSV import format — all 33 columns explained, with examples for simple and variable products, common errors, and how to generate a valid CSV automatically.

·By Krokanti
7 min read · 1,314 words

Shopify's product CSV import is powerful but unforgiving. A single malformed column header, an extra space, or a mismatched variant row can cause your entire import to fail — or silently skip hundreds of products.

This guide covers every column in Shopify's product CSV format, with examples, common mistakes, and tips for generating valid files from WooCommerce exports.

The Shopify CSV column reference

Shopify's product CSV uses 33 standard columns. Here's what each one does:

Core product fields

Column Type Notes
Handle Required URL-friendly identifier. Must be unique per product. Use lowercase letters, numbers, and hyphens only. Example: blue-running-shoes
Title Required (first row) Product title. Only needed on the first row for multi-variant products. Subsequent rows for the same product (same Handle) leave this blank.
Body (HTML) Optional Product description in HTML format. Shopify accepts HTML but strips unsafe tags. Only on first row per product.
Vendor Optional Brand or manufacturer name. Appears in Shopify admin and can be used for filtering. Only on first row.
Product Category Optional Shopify's standardized product taxonomy (not the same as collections). Example: Apparel & Accessories > Shoes
Type Optional Custom product type (free-form text). Different from Product Category. Often used to map WooCommerce categories.
Tags Optional Comma-separated list of tags. Example: running, sports, outdoor. Only on first row.
Published Optional TRUE or FALSE. Determines if product is visible in your store.

Option fields (for variable products)

Shopify supports up to 3 option types per product. The option names go in Option1 Name, Option2 Name, Option3 Name, and the values for each variant go in Option1 Value, Option2 Value, Option3 Value.

Column Example
Option1 Name Color
Option1 Value Blue
Option2 Name Size
Option2 Value M
Option3 Name Material
Option3 Value Cotton

Important: Shopify enforces a hard limit of 3 option types and 100 variants per product. WooCommerce has no such limits — if your WC products exceed these, you'll need to restructure them before import.

Variant fields

Column Type Notes
Variant SKU Recommended Stock Keeping Unit. Must be unique across all variants in your store. Leave blank if you don't use SKUs.
Variant Grams Optional Weight in grams (always grams, regardless of your store's weight unit). Example: 500 for 500g.
Variant Inventory Tracker Optional shopify to track inventory, blank to not track.
Variant Inventory Qty Optional Starting inventory quantity. Only applicable if Inventory Tracker is shopify.
Variant Inventory Policy Optional deny to prevent overselling, continue to allow.
Variant Fulfillment Service Optional Usually manual. Can be a third-party fulfillment service ID.
Variant Price Required Selling price. Decimal number, no currency symbol. Example: 29.99
Variant Compare At Price Optional Original price (shown as crossed-out). Used to indicate a sale. Must be higher than Variant Price to show as a discount.
Variant Requires Shipping Optional TRUE or FALSE. Default is TRUE.
Variant Taxable Optional TRUE or FALSE. Default is TRUE.
Variant Barcode Optional EAN, UPC, or ISBN barcode value.

Image fields

Column Notes
Image Src Full URL to the product image. Shopify will download and host this image. Must be publicly accessible at import time.
Image Position Integer (1, 2, 3...). Controls image display order. Position 1 = main product image.
Image Alt Text Alt attribute for the image. Important for SEO and accessibility.
Variant Image URL of the image to associate with this specific variant. Must match an Image Src value in the same product's rows.

SEO fields

Column Notes
SEO Title Page title tag. Defaults to product title if blank. Keep under 70 characters.
SEO Description Meta description. Keep under 160 characters for best display in search results.

Other fields

Column Notes
Google Shopping / Google Product Category Google taxonomy category for product feed. Optional but useful for Google Shopping campaigns.
Google Shopping / Gender Male, Female, or Unisex. For apparel.
Google Shopping / Age Group Adult, Kids. For apparel.
Google Shopping / MPN Manufacturer Part Number.
Google Shopping / AdWords Grouping For Google Ads product groups.
Google Shopping / AdWords Labels Comma-separated labels for Google Ads.
Google Shopping / Condition New, Refurbished, or Used.
Google Shopping / Custom Product TRUE or FALSE.
Google Shopping / Custom Label 0–4 Five additional custom label fields for Google Shopping feeds.
Variant Weight Unit The unit for display: kg, g, lb, or oz. Note: Variant Grams is always in grams regardless of this setting.
Variant Tax Code Tax code for Avalara or other tax services. Leave blank for most stores.
Cost per item Your cost to source the item. Not visible to customers. Used for profit reporting.
Included / [Location] TRUE or FALSE. Whether this variant is stocked at a specific location (for multi-location inventory).
Status active, draft, or archived.

Multi-variant product row structure

This is where most CSV imports go wrong. For a product with multiple variants, you need one row per variant, all sharing the same Handle. Only the first row gets the product-level fields (Title, Body HTML, Vendor, Tags).

Example — a t-shirt with 3 color options:

Handle,Title,Body (HTML),Vendor,Type,Tags,Option1 Name,Option1 Value,Variant Price,Image Src,Image Position
basic-tee,Basic T-Shirt,"<p>Classic cotton t-shirt.</p>",ACME,Shirts,tee,Color,Blue,24.99,https://example.com/tee-blue.jpg,1
basic-tee,,,,,,Color,Red,24.99,https://example.com/tee-red.jpg,2
basic-tee,,,,,,Color,Black,24.99,https://example.com/tee-black.jpg,3

Key rules:

Simple product example

For a product with no variants:

Handle,Title,Body (HTML),Vendor,Type,Tags,Option1 Name,Option1 Value,Variant SKU,Variant Price,Image Src,Image Position,Status
blue-mug,Blue Coffee Mug,"<p>12oz ceramic mug.</p>",HomeGoods,Mugs,kitchen,Title,Default Title,MUG-BLUE-001,14.99,https://example.com/mug.jpg,1,active

For simple products, use Option1 Name = Title and Option1 Value = Default Title.

Common import errors

"Invalid product" or silent row skip

Missing required fields (Handle, Variant Price). Check that every row has a Handle and every variant has a price.

Images not loading after import

Image URLs must be publicly accessible HTTPS URLs. Shopify fetches them at import time — if the URL redirects, requires authentication, or returns a 404, the image is skipped silently.

Variants missing after import

If the Handle matches an existing product in your store, Shopify will update that product rather than create a new one. Existing variants not present in the CSV will be deleted.

Price shown as $0.00

Variant Price must be a plain decimal number with no currency symbol, commas, or spaces. 29.99 is correct; $29.99, 29,99, or 29 .99 will fail.

Products imported as drafts instead of active

Check the Status column — if it's draft or missing, products won't be visible to customers. Set it to active.

Weight format: the grams trap

Shopify's CSV format stores weight in the Variant Grams column — always in grams, regardless of what your store's weight unit is set to. The Variant Weight Unit column only controls the display unit in the admin interface.

If you're migrating from WooCommerce and your products have weights in kg or lb, you need to convert them to grams for the CSV. For example: 2.5 kg → 2500 grams, 5 lbs → 2268 grams.

k-sync handles this conversion automatically — the Weight Converter panel lets you convert all variant weights between units before exporting, and the CSV export always outputs Variant Grams in the correct unit.

Generating a valid Shopify CSV automatically

Building a correct Shopify CSV by hand for hundreds or thousands of products is error-prone and time-consuming. k-sync generates Shopify-compatible CSVs automatically from imported WooCommerce data:

You can export all products or just selected products, validate the data first to catch issues, and re-download after fixing problems.

Generate your Shopify CSV for free with k-sync →

Migrate your store with k-sync

Connect your WooCommerce store, validate your products, and push to Shopify in minutes. Free for up to 50 products.

Get started free

Related reading

Browse all migration guides