How-To Guide

How to Import Products to Shopify from CSV — Complete Guide (2025)

A step-by-step walkthrough for importing products to Shopify using the 48-column CSV format. Learn format requirements, variant mapping, image URLs, and how to troubleshoot import errors.

Shopify's CSV import lets you add hundreds of products to your store in one upload — but only if your file matches Shopify's exact 48-column format. Getting one column header wrong, using the wrong HTML structure for descriptions, or formatting variants incorrectly will cause the entire import to fail or produce broken product pages. This guide walks you through the complete process, from downloading the sample CSV to importing products with correctly structured variants.

Shopify CSV Format Requirements

Shopify's product CSV uses a fixed 48-column format. The first row of your CSV must contain the exact column headers — these are case-sensitive and must match precisely. Not every column needs to be filled for every product, but the header row must be present and correct.

Key Columns You Need to Know

  • Handle — The URL slug for the product (e.g., "blue-cotton-tshirt"). Every variant of the same product shares the same Handle. This is the column that links variant rows to their parent.
  • Title — The product name shown on your storefront. Only fill this on the first (parent) row for each product.
  • Body (HTML) — The product description in HTML format. Use standard HTML tags (<p>, <ul>, <strong>) — plain text works too but won't have formatting.
  • Vendor — The brand or manufacturer name. Appears as a filter on your storefront.
  • Type — The product category (e.g., "T-Shirt"). Used for storefront filtering and collections.
  • Tags — Comma-separated tags for filtering (e.g., "summer, cotton, sale").
  • Published — Set to "TRUE" to publish immediately or "FALSE" to save as draft.
  • Option1 Name / Option1 Value — The first variant option (e.g., Name = "Size", Value = "M"). Up to 3 options per product.
  • Variant SKU — The unique SKU for each variant. Required for inventory tracking.
  • Variant Price — The selling price for each variant. Must be a plain number with no currency symbol.
  • Image Src — The full HTTPS URL of the product image. Images must be publicly accessible — Shopify downloads and hosts them after import.

The remaining columns cover fields like Variant Grams, Variant Inventory Tracker, Variant Inventory Qty, Variant Weight Unit, Variant Tax Code, Gift Card, SEO Title, SEO Description, Google Shopping fields, and additional image columns (Image Position, Image Alt Text). Most products only need the core columns listed above — the rest can be left blank.

Step-by-Step: Importing Products to Shopify

Four steps from a raw product spreadsheet to published Shopify products with correct variants and images.

Step 1

Download the Sample CSV

In your Shopify admin, go to Products and click "Import." On the import page, click "Download sample CSV file" — this gives you a template with the exact 48 column headers Shopify expects. Open it in Google Sheets, Excel, or Numbers.

The sample file includes a few example products that demonstrate correct formatting, including how variant rows share a Handle and how images are referenced. Study these example rows before you start adding your own data — they show the exact structure Shopify requires.

Don't modify or delete any column headers, even if you don't use them. Shopify expects all 48 columns to be present. Empty columns are fine; missing columns will cause the import to fail or misalign your data.

Step 2

Map Your Columns

Your existing product data likely uses different column names than Shopify's format. You need to rename your columns to match. Map "Product Name" to "Title", "Description" to "Body (HTML)", "SKU" to "Variant SKU", and "Price" to "Variant Price". Create a "Handle" column by converting your product titles to URL-friendly slugs (lowercase, hyphens instead of spaces).

For descriptions, format your text as HTML. Wrap paragraphs in <p> tags, use <ul> and <li> for bullet lists, and <strong> for bold text. If your source data has plain text descriptions, at minimum wrap each paragraph in <p> tags — without HTML, Shopify displays your description as one unformatted block.

Image URLs go in the "Image Src" column. These must be publicly accessible HTTPS URLs — Shopify downloads the images during import and re-hosts them. If you're migrating from another platform, make sure those image URLs remain live until the import completes. Use the "Image Position" column to control image order (1 for main image, 2+ for additional images).

Step 3

Handle Variants

Variants in Shopify's CSV are structured as multiple rows sharing the same Handle. The first row for each product is the "parent" — it contains the Title, Body (HTML), Vendor, Type, and Tags. Each subsequent row with the same Handle represents a variant and fills in the Option columns.

For a t-shirt with 3 sizes (S, M, L) and 2 colors (Black, White), you'd have 6 variant rows. Each row uses Option1 Name = "Size" with values S/M/L and Option2 Name = "Color" with values Black/White. Every variant row gets its own Variant SKU, Variant Price, and Variant Inventory Qty. The parent row's price and SKU are ignored — only variant rows carry the actual sellable data.

If a product has no variants, it still needs at least one row with the Variant Price and Variant SKU filled in. The Option columns can be blank for single-variant products, but the pricing and inventory fields must be populated.

Step 4

Import to Shopify

Go to Products > Import in your Shopify admin. Upload your CSV file. Shopify gives you two options: "Overwrite existing products that have the same handle" and "Publish new products to all sales channels." Check the overwrite option if you're updating existing products; leave it unchecked if you only want to add new ones.

Shopify processes the file and sends you an email when import completes. Small files (under 100 products) usually finish in a few minutes. Larger imports can take up to an hour. You can continue working in Shopify while the import runs in the background.

After import, review your products in the Products list. Check that variants display correctly, images loaded properly, and descriptions render with correct HTML formatting. If any rows failed, Shopify provides an error report via email — common issues include invalid image URLs, HTML formatting errors in the Body field, and missing required columns. Fix the flagged rows and re-upload.

Alternative: Auto-Map with AI

Don't want to manually rename 48 columns and format HTML descriptions? Upload your product CSV to ListingHubs and AI maps your columns to Shopify's format, structures variants, formats HTML descriptions, and generates an import-ready file.

48-column auto-mapping Variant structuring Import validation
Try the Shopify Product Import Tool

Frequently Asked Questions

How do I import products to Shopify from a CSV file?

Download Shopify's sample CSV template from the product import page, fill it with your product data using the correct column headers (Handle, Title, Body (HTML), Vendor, etc.), then go to Products > Import in Shopify admin and upload your file. Shopify processes the CSV and creates the products. For large catalogs, keep files under 50MB and test with a small batch first.

What CSV format does Shopify require?

Shopify requires a CSV with specific column headers in a 48-column format. The essential columns are Handle (URL slug), Title, Body (HTML), Vendor, Type, Tags, Published, Option1 Name, Option1 Value, Variant SKU, Variant Price, and Variant Inventory. Images are referenced by URL in the Image Src column. The first row must contain the exact column headers — any deviation causes import failures.

How do I map my existing CSV columns to Shopify's format?

Compare your existing column headers to Shopify's required headers and rename or map them. For example, 'Product Name' becomes 'Title', 'Description' becomes 'Body (HTML)', 'SKU' becomes 'Variant SKU', and 'Price' becomes 'Variant Price'. If a field doesn't have a direct Shopify equivalent, you can store it as a metafield after import or add it as a tag. Tools like ListingHubs can auto-map columns using AI.

How do variants work in the Shopify CSV format?

Each variant gets its own row in the CSV, linked to the parent product by the Handle column. The first row is the parent product (with Title, Body, Vendor filled). Subsequent rows with the same Handle represent variants — they use Option1 Name/Value, Option2 Name/Value, and Option3 Name/Value columns. Each variant row has its own Variant SKU, Variant Price, and Variant Inventory Qty. A product with 3 colors and 3 sizes needs 9 variant rows.

How do I fix Shopify CSV import errors?

If an import fails, Shopify provides an error report listing each row that had issues. Common errors include missing required columns (like Title or Variant Price), invalid HTML in the Body field, duplicate Handles, and image URLs that can't be reached. Fix the flagged rows in your CSV and re-upload. Shopify skips rows with errors but imports the rest, so you only need to fix the failures.

Skip the manual Shopify CSV formatting

Upload your product CSV and get a Shopify-ready import file with auto-mapped columns, formatted HTML, structured variants, and validated images — in minutes.

Get Started Free