Shopify product CSV template (free download, with sample data)
By the Woopify team6 min read
Short answer
Shopify's product CSV has one row per variant, and Handle is the key that groups rows into a product. Download our sample Shopify product CSV, which contains a product with size variants, compare-at prices and images, then replace the rows with your products and import the file under Products > Import. Shopify's admin does not import JSON. JSON (from /products.json or the Admin API) has to be converted to this CSV first.
Key takeaways
- Handle groups rows into one product. Repeat it on every variant and image row.
- Title, Body and Vendor go on the first row only. Variant columns go on every row.
- Extra images go on additional rows that hold only Handle, Image Src and Image Position.
Download the template
Download the sample Shopify product CSV. It is UTF-8, comma-separated, and uses the column names Shopify expects. For WooCommerce, use the sample WooCommerce CSV.
Rather than filling the template by hand, you can generate it from an existing store: Woopify's Shopify scraper exports any public Shopify catalog to this exact format, with a free 25-product preview.
Every column, explained
| Column | Required | What to put |
|---|---|---|
| Handle | Yes | URL slug, e.g. linen-shirt. Same on every row of the product |
| Title | First row | Product name |
| Body (HTML) | No | Description, HTML allowed |
| Vendor / Type / Tags | No | Brand, product type, comma-separated tags |
| Published / Status | No | TRUE/FALSE and active / draft / archived |
| Option1 Name / Option1 Value | For variants | e.g. Size / M (up to 3 options) |
| Variant SKU | Recommended | Unique reference per variant |
| Variant Price | Yes | Number without currency symbol, e.g. 49.00 |
| Variant Compare At Price | No | Strikethrough price, higher than Variant Price |
| Variant Inventory Qty | No | Stock (only if inventory is tracked) |
| Image Src / Image Position / Image Alt Text | No | Public image URL, order (1, 2…), alt text |
| SEO Title / SEO Description | No | Search snippet, falls back to title/description |
How variants and images are laid out
A product with three sizes and four images takes four rows: rows 1 to 3 hold one variant each, and row 4 holds only the fourth image. Product-level fields (Title, Body, Vendor) appear only on the first row.
Handle,Title,Option1 Name,Option1 Value,Variant SKU,Variant Price,Image Src,Image Position
linen-shirt,Linen Shirt,Size,S,LIN-S,49.00,https://…/1.jpg,1
linen-shirt,,,M,LIN-M,49.00,https://…/2.jpg,2
linen-shirt,,,L,LIN-L,49.00,https://…/3.jpg,3
linen-shirt,,,,,,https://…/4.jpg,4Sample product JSON (and why Shopify won't import it)
Every Shopify store publishes its catalog as JSON at /products.json (250 products per page, ?page=2 for the next page). A product looks like this:
{
"id": 123456789,
"title": "Linen Shirt",
"handle": "linen-shirt",
"vendor": "Demo Store",
"product_type": "Shirts",
"tags": ["linen", "summer"],
"variants": [
{ "title": "S", "sku": "LIN-S", "price": "49.00", "compare_at_price": "65.00", "option1": "S" }
],
"images": [{ "src": "https://cdn.shopify.com/…/1.jpg", "position": 1 }],
"options": [{ "name": "Size", "values": ["S", "M", "L"] }]
}The Shopify admin only imports CSV. To use JSON, either send it to the Admin API (developers) or convert it to the CSV above: one row per variants[] item, then one row per extra images[] item. That conversion is exactly what the Shopify scraper automates. The manual method is in our scraping guide.
Import errors and how to fix them
- “Illegal quoting”: a description contains an unescaped double quote. Save the file as CSV UTF-8 from a spreadsheet so quotes are escaped.
- Variants merged into one: rows of the same product have different Handles.
- Images missing: the URLs aren't public, or they redirect to a login page.
- File too large: split the CSV, since Shopify accepts up to 15 MB per import.
Frequently asked questions
Where can I download a Shopify product CSV template?
Shopify provides a blank template in its Help Center. Our sample Shopify CSV is pre-filled with a variant product so you can see the layout.
Can I import a JSON file of products into Shopify?
Not through the admin, which only accepts CSV. Convert the JSON to Shopify's CSV (one row per variant) or create products through the Admin API.
What is the minimum a Shopify product CSV needs?
A Handle and a Title. Add Variant Price for anything you want to sell, and Option columns for products with variants.
Export any Shopify or WooCommerce catalog to CSV
Free 25-product preview, no card. Premium at $38.99/month for unlimited full exports, cancel anytime.