Shopify Product CSV Template (2026): Free Download + Column Guide
TL;DR
Shopify's product CSV has specific columns for product info, variants, images, and SEO, and getting the format wrong causes import failures. You can download the free sample template below, fill it in by hand, or skip the manual work entirely with Ohavah, which generates a correctly formatted Shopify CSV from your supplier invoices automatically.
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, and gives you a working template to start from.

Turn a supplier invoice into this Shopify CSV
Upload your PDF and let Ohavah generate the products, variants, SKUs, prices, and images automatically.
Download a Shopify Product CSV Template
Rather than starting from a blank spreadsheet, grab a template that already has the right headers and a couple of complete example products (including multi-variant rows and image rows) so you can see the structure in context.
Free Shopify product CSV template
A ready-to-edit sample with the exact columns, multi-variant rows, and image columns Shopify expects. Open it in Excel or Google Sheets and replace the example products with your own.
Shopify also ships its own blank sample: in Shopify Admin > Products > Import, click "Download a sample CSV template". That file has the correct headers but no realistic example rows, so the template above is usually the faster starting point.
If your products come from supplier invoices, you don't have to fill any of this in by hand. Ohavah turns a supplier invoice into a ready-to-import CSV with the columns below already populated.
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. If you sell in multiple sizes and colors, this is where most of your rows come from. For a deeper walkthrough, see how to create product variants in Shopify.
| 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:
- First row for a handle: fill in all product-level columns plus the first variant's details
- Additional variant rows: same Handle, leave product-level columns blank, fill in variant columns only
- 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.
Skip the spreadsheet entirely
Ohavah builds the finished, correctly formatted Shopify CSV from your supplier invoice in minutes.
Related next steps
LacyWillowmere BoutiqueCalled it “an absolute game changer” for launching her new website.