Skip to content
Store Setup11 min readBy GoTinker Team

How to Import Products to Shopify from a CSV File (Without Errors)

How to Import Products to Shopify from a CSV File (Without Errors)

If you need to import products to Shopify from a CSV file, you're probably staring at a spreadsheet wondering why half your rows are throwing errors. With over 2.8 million live Shopify stores worldwide and 23,943 merchants who switched from competing platforms in just the last 90 days, CSV imports are one of the most common (and most frustrating) tasks store owners face.

The good news? Most CSV import failures come down to a handful of preventable mistakes. Whether you're migrating your store to Shopify or uploading a fresh product catalog, this guide walks you through the entire process. You'll learn how to format your file, avoid the errors that trip up most merchants, and verify everything after the upload finishes.

What is a Shopify product CSV file and why does it matter?

A Shopify product CSV file is a plain-text spreadsheet that maps your product data into columns Shopify can read. Each row represents either a standalone product or a variant of a product, and each column corresponds to a specific field like Title, Body (HTML), Vendor, or Price.

CSV stands for "comma-separated values," and it's the format Shopify uses for both importing and exporting product data in bulk. This matters because your store's product information directly affects sales. According to a Syndigo consumer study, 50% of shoppers abandoned a purchase in the last six months because they couldn't find enough product information. Getting your CSV right means your products show up with complete, accurate details from the moment they go live.

Here's what makes CSV imports particularly important: 27% of Shopify merchants sell just 1 to 9 products. That means the majority of stores using CSV imports are working with small-to-mid catalogs where every product listing needs to be correct the first time.

Shopify also supports updating existing products through CSV. If a row's Handle column matches an existing product handle, Shopify overwrites that product's data instead of creating a duplicate. This "handle-matching" behavior is powerful for bulk updates but dangerous if you don't understand it. More on that later.

How do you format a Shopify CSV file correctly before importing?

You format a Shopify CSV correctly by downloading Shopify's official sample CSV template and using it as your starting point. Never build a CSV from scratch. The template includes every required column header in the exact order Shopify expects, and missing or misspelled headers are the number one cause of failed imports.

To grab the template, go to your Shopify admin, navigate to Products, click Import, then click the "Download a sample CSV" link. Open it in Google Sheets or Excel and study the column headers before adding your data.

Required columns you can't skip

  • Handle: The URL-friendly product identifier. Use lowercase letters, numbers, and hyphens only. "blue-cotton-tshirt" works. "Blue Cotton T-Shirt!" doesn't.
  • Title: Your product name. Only fill this in for the first row of each product (variant rows leave it blank).
  • Body (HTML): Your product description. HTML is accepted here, so you can include formatting. If you're migrating from another platform, make sure you write descriptions that actually rank and convert.
  • Vendor: The manufacturer or brand name.
  • Published: Set to TRUE or FALSE. Controls whether the product is visible on your storefront.
  • Variant Price: The selling price. Use numbers only, no currency symbols.

The encoding problem nobody talks about

Here's my hot take: Shopify's native CSV import works perfectly for 90% of merchants. The reason people think it's broken is that they're building CSVs in Excel and never saving as UTF-8. The entire third-party import app industry exists largely because of one avoidable formatting mistake that Shopify's own documentation buries in a footnote. Fix your encoding settings once and you'll never need a paid import tool again.

If you're using Excel on Windows, go to File, then Save As, and select "CSV UTF-8 (Comma delimited)" from the format dropdown. Regular "CSV" uses ANSI encoding, which corrupts accented characters, curly quotes, and special symbols. Google Sheets exports as UTF-8 by default, which is one reason I recommend it over Excel for CSV prep.

Watch out for BOM (Byte Order Mark) characters too. Some text editors add an invisible character at the start of the file that can cause Shopify to misread your first column header. If your Handle column keeps failing for no obvious reason, open the file in a plain text editor like Notepad++ or VS Code and check for hidden characters at position zero.

How do you import products to Shopify from a CSV file step by step?

You import a CSV file into Shopify through the Products section of your admin dashboard. The process takes about two minutes if your file is formatted correctly, though larger files may need processing time on Shopify's end.

Follow these steps exactly:

  1. Log into your Shopify admin and click Products in the left sidebar.
  2. Click the Import button in the top-right corner of the Products page.
  3. Click Choose File and select your CSV. Remember, Shopify limits CSV uploads to 15 MB per file. If yours is larger, split it into multiple files.
  4. Decide whether to check the "Overwrite existing products that have the same handle" box. If you're importing brand-new products, leave it unchecked. If you're updating existing products, check it.
  5. Click Upload and continue.
  6. Review the import preview. Shopify shows you how many products and variants it detected. If these numbers look wrong, cancel and check your file.
  7. Click Import products to start the upload.

Shopify sends you an email when the import finishes. For small catalogs (under 100 products), it typically completes in under a minute. Larger catalogs can take 10 to 15 minutes.

One critical detail: the "Overwrite" checkbox controls handle-matching behavior. When checked, any row with a Handle that matches an existing product will replace that product's data. If your CSV has incomplete rows (say, you left Body blank), you'll wipe out existing descriptions. Always include complete data in every column when overwriting.

If you're coming from WooCommerce specifically, your export file will need column remapping before Shopify can read it. The WooCommerce to Shopify migration guide covers the exact column translations you need.

How do you handle product variants in a Shopify CSV import?

Product variants in a CSV use multiple rows that share the same Handle value. The first row contains the full product details (title, description, vendor), and each subsequent row with that same Handle represents a variant with its own option values, price, SKU, and inventory quantity.

Shopify supports up to three option columns: Option1 Name, Option1 Value, Option2 Name, Option2 Value, Option3 Name, and Option3 Value. For a t-shirt with size and color options, you'd set Option1 Name to "Size" and Option2 Name to "Color" on the first row, then fill in the values for each variant row.

Big news for merchants with complex catalogs: Shopify increased the variant limit from 100 to 2,048 per product in October 2025. This is a massive change for stores selling products with many size, color, or material combinations. But there's a catch most people miss.

Non-Plus stores are capped at 1,000 new variants per 24-hour period via CSV import. So if you're uploading a catalog with 3,000 variants across your products, you'll need to split it across multiple days or multiple uploads. Plus merchants don't face this throttle.

If you need more than three option types per product, the standard CSV won't cover it. You'll need to look into custom product options using apps or metafields.

Variant row structure example

Your CSV variant rows should follow this pattern:

  • Row 1 (parent): Handle = "cotton-tshirt", Title = "Cotton T-Shirt", Option1 Name = "Size", Option1 Value = "Small", Option2 Name = "Color", Option2 Value = "Blue", Variant Price = "24.99"
  • Row 2 (variant): Handle = "cotton-tshirt", Title = (blank), Option1 Name = (blank), Option1 Value = "Medium", Option2 Name = (blank), Option2 Value = "Blue", Variant Price = "24.99"
  • Row 3 (variant): Handle = "cotton-tshirt", Title = (blank), Option1 Name = (blank), Option1 Value = "Large", Option2 Name = (blank), Option2 Value = "Red", Variant Price = "26.99"

Title and Option Name columns stay blank on variant rows. Only the first row of each product group fills those in, and getting this wrong creates duplicate products instead of variants.

What are the most common Shopify CSV import errors, and how do you fix each one?

The five most common CSV import errors are encoding issues, missing required columns, incorrect variant structure, oversized files, and image URL failures. Fixing them before you upload saves hours of troubleshooting after.

Error 1: "Invalid CSV file" or garbled characters

This almost always means your file isn't saved as UTF-8. Open it in Google Sheets, re-download as CSV, and try again. If you're on Excel, make sure to use the "CSV UTF-8" save option specifically. Curly quotes (the "smart quotes" Word and Excel insert automatically) are another frequent culprit, so replace them with straight quotes before uploading.

Error 2: "Products not importing" or creating duplicates

Check your Handle column carefully. Every variant of the same product must share an identical handle, and a single extra space or capital letter is enough to create an entirely new product. Also verify that variant rows leave the Title column blank, because Shopify treats any row with a filled-in Title as a separate product.

Error 3: "Some products were not imported"

This partial failure usually means specific rows have data issues while others imported fine. Download the error report Shopify emails you, which tells you exactly which rows failed and why. Common causes include prices with currency symbols ($24.99 instead of 24.99), inventory quantities with decimals, and Variant Weight values with unit labels.

Error 4: File too large

The 15 MB cap is firm. Split your file by product groups, making sure all variant rows for a single product stay in the same file. Don't split in the middle of a variant group or you'll get orphaned variants.

Error 5: Image URLs returning 404

The Image Src column needs publicly accessible URLs. Private Google Drive links, Dropbox files without public sharing, and expired URLs all fail silently. Test a few image URLs in an incognito browser window before importing. If they don't load for you, they won't load for Shopify.

For merchants migrating from platforms like Etsy, the export formats don't match Shopify's CSV structure. You'll need to remap columns and reformat your data before importing. If the manual reformatting feels overwhelming, tools like Migratify can pull products directly from other platforms using a URL and handle the column mapping automatically, with AI-assisted editing for titles and descriptions.

A Shotfarm research report found that 40% of consumers returned an online purchase because of inaccurate product content. Getting your CSV data right isn't just about avoiding import errors. It directly impacts returns, refunds, and customer trust.

What should you check after the import is complete?

After a successful import, you should verify product counts, spot-check individual listings, test variant selections, and confirm inventory levels. Skipping post-import validation is how merchants end up with invisible products, broken variants, and missing images for weeks without noticing.

Run through this checklist within 30 minutes of completing your import:

  1. Compare product counts. Go to Products in your admin and confirm the total matches what you expected from your CSV. If you had 150 rows representing 50 products with variants, you should see 50 products.
  2. Spot-check 5 to 10 products. Open individual product pages and verify that titles, descriptions, prices, and images all look correct. Pay special attention to HTML formatting in the Body field.
  3. Test variant selection on your storefront. Visit your live store and click through variant options on a few products. Make sure size, color, or other options display properly and that switching between them updates the price.
  4. Verify inventory quantities. If you imported inventory levels, check that they match your source data. A common gotcha: if you left Variant Inventory Qty blank, Shopify may default it to zero, making products appear as "out of stock."
  5. Check product visibility. Make sure the Published column was set correctly. Products with Published = FALSE won't appear on your storefront, which is fine for drafts but a problem if you intended them to be live.
  6. Review image quality. Thumbnails can look fine in the admin but appear blurry or cropped on your theme. View a few product pages at full resolution.

If you find issues across many products, don't fix them one by one. Use Shopify's bulk editing tools to update fields like prices, descriptions, or tags across your entire catalog at once. Fixing 200 products individually when you could batch-edit them is a waste of your afternoon.

For stores with large catalogs, consider exporting your products right after importing and comparing the export to your original CSV. This roundtrip test catches data that imported but transformed incorrectly (truncated descriptions, stripped HTML tags, or reformatted prices).

The 23,943 merchants who switched to Shopify from competing platforms in the last 90 days all went through some version of this import process. The merchants who succeed are the ones who treat post-import validation as a required step, not an afterthought.

Edify - Bulk Product Editor

Edify - Bulk Product Editor

Sponsored

Edit products, prices, and collections in bulk with preview, scheduling, and one-click undo.

Check it out

Related Articles