Shopify’s bulk product CSV has 29 columns, and which ones matter depends on the row: a product’s first row needs Handle, Title, Body (HTML), Vendor, Type, Tags, Published, its option names, and the first variant’s details. Variant rows after the first (rows 2+ for the same handle) should leave title, description, vendor, type and tags blank - filling them in makes Shopify overwrite the product on every row instead of adding a variant.
Variant-specific columns appear on every variant row: Option1/2/3 Value, Variant SKU, Variant Grams, Variant Inventory Policy, Variant Price, Variant Compare At Price, and so on. Image-only rows need just Handle, Image Src and Image Position - everything else blank.
This tool builds every row according to those rules automatically when you choose the Shopify import format, including safe defaults like Published: FALSE and Status: draft so nothing goes live without a manual review.
Getting the row rules wrong is the single most common reason a manual Shopify import creates duplicate or malformed products, so treat this table as the reference to check against if an import didn’t come out the way you expected - before assuming the underlying data itself was the problem.