A Practical Guide to Preparing and Importing Shopify Product CSV Files
A Shopify product CSV template lets you add or migrate many products in one upload instead of creating each one by hand in the admin. It is a practical option for merchants moving a catalog from another platform and for agencies setting up products for a client store.
Shopify only imports files that follow its expected structure. If the layout or values don’t match, the import can fail or create products that look different from what you planned. This guide explains where to get a reliable template, how to fill it in and how to import it cleanly.
Where to Get a Shopify Product CSV Template
A Shopify product CSV template is mainly its header row, which contains the column names that Shopify’s importer reads to decide where each value belongs. The most reliable template is one you export from your own store. Shopify’s sample product CSV also shows the expected layout, but it is a generic example that you may need to adjust for the product options and details your catalog uses.
To build your own template, create a couple of complete products manually in Shopify admin and fill in every field you plan to import. Then export them as a CSV. The exported file mirrors the columns your store currently uses and shows how Shopify formats your actual data, so you can use those rows as a model for the rest of your catalog.
Be cautious with third-party templates and older sample files, because they can use outdated or incomplete column sets. For example, an older apparel sample file lacks newer columns such as Product Category, Status, Cost per item and Image Position. Before you fill in a downloaded template, compare its header row against a current export from your store and add any missing columns.
How Rows and Handles Build Products, Variants and Images
Every row below the header represents a product, a variant or an additional image. Shopify builds one product from all rows that share the same Handle, which is the product’s identifier in the CSV. A single product therefore often spans several rows, and a typo in one Handle can split it into separate products.
The first row with a given Handle holds the product-level details, such as Title, Body (HTML), Vendor and Published. Later rows with that Handle can leave those fields blank, because Shopify already knows which product they belong to.
Variants come from options. Each product can have up to three options, such as Size, Color and Material, although most products need only one or two. Repeat the option name, such as “Size”, on every variant row, and change the option value on each row, such as Small, Medium or Large, so that every row describes a different variant.
An image-only row keeps the same Handle and an image URL but leaves the option and variant columns blank, so Shopify adds the picture to the product instead of creating a new variant. Image Position 1 marks the featured image, and higher numbers set the order of the remaining images.
For example, a T-shirt with three sizes and a second photo needs four rows:
| Handle | Title | Option1 Name | Option1 Value | Image Src | Image Position |
|---|---|---|---|---|---|
| classic-tee | Classic Tee | Size | Small | https://…/tee-front.jpg | 1 |
| classic-tee | Size | Medium | |||
| classic-tee | Size | Large | |||
| classic-tee | https://…/tee-back.jpg | 2 |
The first three rows create the Small, Medium and Large variants, and the last row adds the back photo as the second image.
How to Fill In the Key Columns
Fill each column with the value type Shopify expects: plain numbers for prices, TRUE or FALSE for yes/no fields and full URLs for images. Handle and Title are the safest fields to treat as required, because every product needs them. Some product templates also treat Vendor and Variant Fulfillment Service as required, so fill those in too and confirm the current requirements against a fresh export from your store.
Keep the Handle identical on every row that belongs to the same product. Title is the product name customers see, and Body (HTML) holds the description, so you can include basic formatting such as paragraphs or lists. Vendor records the brand or supplier.
Product Category, Type and Tags can look interchangeable, but each does a different job:
- Product Category uses Shopify’s standard product taxonomy, so choose an existing category instead of inventing one. Shopify uses it for tax and reporting.
- Type is your own custom label, such as “T-Shirt” or “Gift Set”, that helps you filter and organize products.
- Tags are comma-separated keywords. Because collection rules can use tags, a consistent tag such as
summercan automatically place products in matching collections.
Publishing and Status
Published accepts TRUE or FALSE and belongs only on the product’s first row. Status accepts active, draft or archived.
For most imports, set Status to draft. The products then arrive in your admin without going live, so you can check descriptions, prices and images before activating them.
Variant Pricing, Inventory and Shipping Fields
Variant columns describe each sellable version of a product, so fill them in on every variant row. Start with identification and pricing:
- Variant SKU: Give each variant its own unique code.
- Variant Grams and Variant Weight Unit: Enter the weight and unit together, because Shopify uses them for shipping.
- Variant Price: Enter a plain number, such as
24.99, without a currency symbol. Your store currency applies automatically. - Variant Compare At Price: Optionally show a crossed-out original price next to a lower sale price.
- Cost per item: Record what the item costs you. Customers don’t see this value.
For inventory, enter shopify in Variant Inventory Tracker if Shopify should track stock, or leave it blank for untracked items. Variant Inventory Qty sets the starting stock. Variant Inventory Policy accepts deny or continue, but continue lets customers keep buying after stock reaches zero, so use it only if you intend to allow overselling, such as for backorders.
Enter manual in Variant Fulfillment Service unless a third-party fulfillment service handles that variant, in which case enter the service’s exact name. Variant Requires Shipping and Variant Taxable both take TRUE or FALSE. Variant Barcode is optional and holds a UPC, EAN or ISBN if you have one.
Image, SEO and Google Shopping Columns
Image Src must contain a full URL beginning with https://, because relative paths such as /images/tee.jpg and local file names fail. Add Image Alt Text to describe each image for accessibility and SEO. Variant Image takes the URL of the image to show when a shopper selects that variant.
SEO Title and SEO Description control the text shown in search results. If you leave them blank, Shopify falls back to the product Title and description. When you write them yourself, aim for roughly 70 characters for the title and 320 for the description.
Google Shopping columns, such as Google Product Category, Gender, Age Group, Condition and MPN, matter only if you sell through the Google & YouTube sales channel. Otherwise, you can leave them empty.
Prepare the File Before You Import
Keep the header row exactly as it appears in the sample file or your own export. The importer matches each column by its header name, so renamed or reordered headers, misspellings, extra columns or a stray space around a header can cause errors or get a column rejected.
Save the file as CSV UTF-8, the format that keeps accented letters and symbols intact. Replace curly “smart” quotes with straight ones and delete stray or unmatched quotation marks, which can trigger quoting or encoding errors. Also confirm that every image URL is a full https address.
Before importing the full catalog, test two or three products, including one with variants and extra images. Reviewing them in the admin lets you fix structural mistakes before they affect hundreds of rows. A free Shopify Partner account also lets you create a development store where you can practice imports without touching your live store.
Finally, export your current products and save each version of your import file. An import that overwrites existing products can’t be undone unless you have a CSV copy to reimport.
How to Import the CSV in Shopify Admin
- In your Shopify admin, go to Products.
- Click Import.
- Click Add file and select your CSV.
- Review the preview, which shows how many products and variants the import will create. If the numbers don’t match what you expect, close the dialog and recheck your file.
- If you are updating existing products, tick Overwrite existing products.
- Click Import products.
When the overwrite option is ticked, values in your CSV replace the existing data of any product with a matching Handle. Use it for deliberate bulk updates, such as correcting prices or descriptions, and leave it unticked when you are adding new products.
Shopify sends a confirmation email when the import finishes, but a completed import doesn’t guarantee that products look the way you intended. Open your Products list and check a few items, including at least one with variants, to confirm that options, prices, inventory, images and status came through correctly before you import the rest of your catalog or publish anything.
Common Import Errors and How to Fix Them
Most failed imports come from file size, variant limits, empty required fields, or headers, image links and encoding that don’t match what Shopify expects. Find the symptom below, apply the fix and upload the corrected file again.
The file is too large to upload. Shopify accepts product CSV files up to 15 MB. Split a larger catalog into several files and upload them one at a time, keeping all rows that share a Handle in the same file so each product’s variants and images stay together.
Uploads stop working on a very large catalog. If your store already has more than 50,000 product variants, Shopify limits new variant creation to 1,000 per day, except on Shopify Plus. Once you reach the limit, uploads that create new variants fail until 24 hours have passed, so plan large migrations as daily batches of no more than 1,000 new variants.
The import fails because Variant Fulfillment Service is empty. This field can’t be blank on variant rows. Enter manual if you fulfill orders yourself, or the exact name of your fulfillment service.
Columns are rejected or not recognized. Compare your header row against a fresh export or an unedited template. Restore renamed or reordered headers, correct misspellings, delete trailing spaces and remove columns Shopify doesn’t use.
You see an “incorrect header check” error. Despite its name, this error usually points to a broken image link or file path rather than your column headers, and Shopify rejects the row containing it. Remove the image URL from that row and import again; if the row then imports, host the image at a publicly accessible location and use its full https URL.
You get an illegal quoting or encoding error. Re-save the file as CSV UTF-8, then use find-and-replace to swap curly quotes for straight ones. Delete any extra quotation marks, especially in text fields such as Body (HTML).
What a Product CSV Import Can’t Do
CSV import doesn’t support 3D models or product videos, whether they’re YouTube links, Vimeo links or MP4 files. After the import, open each affected product in Shopify admin and add these files manually, and allow time for this if your catalog relies heavily on rich media.
Inventory quantities may also fail to import if your store has more than one location, leaving each variant at zero stock. This behavior isn’t confirmed for every store configuration, so include a few stocked variants in your test batch and compare their quantities in admin against your file. If they show zero, enter the correct quantities for each location before publishing, or in-stock products may appear sold out.
Conclusion
A Shopify product CSV template works best when it matches your own store and is filled in with consistent Handles, correct value types and an unchanged header row. With a clean test batch behind you, you can import the rest of your catalog with confidence. We hope this guide helps you get your products into Shopify quickly and accurately.



