Home
Templates
Shopify Product CSV Template
Shopify Product CSV Template
Platform import template

Shopify Product CSV Template

All 41 Shopify columns with a worked variant example, so the import lands as one product with options rather than four separate products.

Download the template

CSV, 41 columns

The Shopify product CSV is unforgiving in a particular way: it will accept a malformed file, import it without complaint, and leave you with products that exist and are wrong. Variants become separate products. Images attach to the wrong row. The only clean way back is a bulk delete and a second attempt.

Almost all of it traces to one column. Get the Handle right and most of the rest follows.

What is in the Shopify product CSV template

All forty one standard columns, in Shopify's own order, with one worked example row. The headers are checked against Shopify's current documentation, which matters because Shopify has added columns over time and an older template quietly drops the ones it does not know about.

The columns fall into four groups: product level fields (Handle, Title, Body HTML, Vendor, Product Category, Type, Tags, Published, Status), option fields (three name and value pairs), variant fields (SKU, Grams, inventory, pricing, barcode), and the trailing group covering images, SEO and the Google Shopping fields.

How the Handle column works

The Handle is the product's URL slug, and it is also the grouping key. Every row sharing a Handle belongs to the same product. That single fact explains most failed Shopify imports.

A product with three variants is four things at once: three rows sharing one Handle, with the product level fields filled in on the first row only and left blank on the other two. Title, Body HTML, Vendor, Type and Tags go on row one. Rows two and three carry the Handle, the option values and the variant fields, and nothing else.

Three ways that breaks:

Repeating the Title on every row. Creates three products where you wanted one. This is the single most common mistake, because repeating the title feels like being thorough.

Leaving the Handle blank on continuation rows. Same result. The rows have nothing to attach to.

Changing the capitalisation. Handles are lowercase, hyphenated, with no spaces and no special characters. Shopify silently rewrites anything that is not, which is how two rows that look identical in Excel end up in different products.

The example row in the template uses the handle heavy-duty-shelf-bracket with Option1 Name set to Size and Option1 Value set to 300mm, which is the shape to copy.

The columns that catch people out

Variant Grams. An integer, in grams, whatever unit the store displays. A bracket weighing 0.85kg is 850. Type 0.85 and you have described something lighter than a paperclip, and the shipping rates that follow will be wrong in a way nobody notices until a customer complains about a delivery charge.

Variant Inventory Policy. Takes deny or continue. Not yes, no, true or false. It controls whether the product can be sold when stock hits zero, so getting it wrong either loses sales or creates orders you cannot fulfil.

Image Src and Image Position. One row per image, each repeating the Handle, with Image Position numbering them 1, 2, 3. Several URLs in one cell import as a single broken image. This is why a product with six images is nine rows in total once you count the variants.

Image Alt Text. Optional, and worth filling in. It is one of the few fields that serves a screen reader and a search engine at the same time, and it is almost always empty on imported catalogues.

Published and Status. Published takes TRUE or FALSE. Status takes active, draft or archived. Both exist, they do different things, and setting one without the other is the usual reason products import successfully and stay invisible.

Variant Barcode. Where the GTIN goes. Excel strips the leading zero from a thirteen digit barcode the moment the file is opened, so format the column as text before typing anything into it. If the file has already been opened and saved, check a barcode you know starts with a zero before you trust the rest.

Cost per item. Not displayed to customers, used for margin reporting in Shopify. Free to fill in, and awkward to backfill across a catalogue later.

The Google Shopping columns

Five columns near the end map to Google Shopping: product category, gender, age group, MPN and condition. They are ignored by the store itself and read by the Google channel app.

Filling them in at import is worth the two minutes per product it costs. Doing it afterwards means either editing products one at a time or running a second import, and a second import against a live catalogue carries more risk than the first one did.

Apparel needs gender and age group populated or Google will disapprove the items. Everything else needs MPN when there is no GTIN.

Before you import

Import five products first. Fixing a header problem across five products takes a minute. Fixing it across four thousand means a bulk delete, and bulk deletes on a live store are how order history gets orphaned.

Open the file in a text editor, not Excel. Check that nothing has been helpfully reformatted. Dates, leading zeros, long numbers and anything that looks like a fraction are the usual casualties.

Check the variant count. If the file has 1,200 rows and you expect 400 products with three sizes each, the arithmetic should work out before you upload rather than after.

Take an export first. A pre-import export of the existing catalogue is the fastest way back if something goes wrong, and it takes two minutes.

Producing the file rather than typing it

The Shopify product CSV is a destination format. It is not a place to work, and the stores that treat it as one end up with the spreadsheet as the real system of record and Shopify as a copy of it. Every price change then happens twice, and the two versions drift.

The alternative is to hold the product record once and produce the Shopify file from it whenever it is needed, with the Handle grouping, the gram conversion, the image rows and the Google Shopping fields built correctly every time rather than checked every time.

That is what SKULaunch does, either by generating the file or by pushing directly through the Shopify integration. The template stays useful for a one off migration or a new range. It stops being the right tool the moment the same catalogue has to stay correct in more than one place.

Download the template

Free to use and adapt. No sign-up, no email required.

Download

CSV, 41 columns

Required columns are marked in red. Delete the worked example row before you use the file.

See it working on your own product data

Upload a supplier file and watch SKULaunch turn it into complete, structured, sales-ready records. Two weeks free, no card, no consultants.

© 2026 SKU Launch Ltd. All rights reserved.
Built for e-commerce teams who are done doing it by hand.