Shopify Product CSV Validator
Shopify tells you what went wrong after the import — and the most expensive mistake, overwriting live products, it never tells you about at all. Check the file first.
🔒 Your product data never leaves your browser.
Add your store's existing handles to check for overwrites (optional, recommended)
In Shopify admin: Products → Export → All products, then paste the Handle column here (one per line). Nothing is uploaded — the comparison happens in your browser.
The import mistake nobody warns you about
Shopify matches products on Handle. If a handle in your CSV already exists in your store, the import updates that product — replacing its title, description, pricing and variants with whatever is in your file. The import reports success. Nothing in the interface tells you that live products were rewritten.
This is why the checker asks for your existing handles: it is the only way to know, before you click import, which products are about to be replaced.
Handle rows must stay together
All rows for one product must be adjacent. If the same handle appears again further down the file — after other products — Shopify treats the second block as a separate import of the same product, and the variants from the first block disappear. Sorting the file by handle prevents it.
Why check barcodes here?
Shopify accepts any text in the barcode field without validating it. That broken barcode then flows into every sales channel you connect — Google, Meta, Amazon — and gets your products rejected there instead, far away from the file that caused it. This validator runs the full GS1 check on that column.
Every check this tool runs (24 rules)
Header & file structure
SHP-H01 Missing the Handle column
Handle is the column Shopify uses to identify each product and to group a product with its variants. Without it the import fails outright.
Fix: Add a Handle column. Use lowercase words joined by hyphens, e.g. "stainless-water-bottle".
SHP-H02 Missing the Title column
Title is required for every new product. "Invalid CSV header: missing headers: Title" is one of the most reported import errors — and it usually means the header row was renamed or the file was exported from another platform.
Fix: Add a Title column, spelled exactly "Title".
SHP-H03 Column name is not a standard Shopify field
This column does not match Shopify's template. Unknown columns are ignored on import, so a typo like "Vairant Price" silently drops that data instead of failing loudly.
Fix: Check the spelling against the Shopify product CSV template, or remove the column if it is intentional (metafield columns need the full "Metafield: namespace.key [type]" form).
SHP-H04 Duplicate column
The same column name appears twice. Which one Shopify reads is undefined, so one set of values will be silently discarded.
Fix: Remove or rename the duplicate.
SHP-H05 Row has a different number of fields than the header
A row with more or fewer fields than the header usually means an unquoted comma or a line break inside a value. Values shift left or right and land in the wrong columns.
Fix: Wrap values containing commas or line breaks in double quotes, and escape inner quotes by doubling them.
Handles & product grouping
SHP-D01 Empty Handle
A row without a Handle cannot be attached to any product. Variant rows must repeat the Handle of the product they belong to.
Fix: Fill in the Handle. For a variant row, repeat the parent product's handle exactly.
SHP-D02 Invalid characters in Handle
A handle may contain only lowercase letters, numbers and hyphens — it becomes part of the product URL. Uppercase letters, spaces, underscores, slashes and accented characters are not valid.
Fix: Convert to lowercase and replace anything else with hyphens: "Water Bottle 1L" → "water-bottle-1l".
SHP-D03 Handle group is split across the file
All rows sharing a handle must be adjacent. When a handle appears again after other products, Shopify treats the later block as a separate import of the same product — the second block overwrites the first, and variants from the earlier block disappear.
Fix: Sort the file by Handle so every product's rows sit together.
SHP-D04 Handle matches an existing product (silent overwrite risk)
Import matches on Handle. If a handle in this file already exists in your store, the import UPDATES that product instead of creating a new one — and it does so without any warning. This is the most expensive Shopify import accident: an import that reports "success" while quietly replacing live products.
Fix: Before importing, export your current products and compare handles. Give genuinely new products handles that do not exist yet.
SHP-D05 Product-level fields repeated on variant rows
Only the first row of a handle carries product-level fields (Title, Body, Vendor, Type, Tags). Repeating them on variant rows is not an error for Shopify, but conflicting values between rows of the same handle mean one of them is silently lost.
Fix: Leave product-level columns empty on the second and later rows of each handle.
Variants & options
SHP-V01 Option value without an option name
A row supplies "Option1 Value" but the product has no "Option1 Name". Shopify rejects the import with "You need to add option values for …".
Fix: Set Option1 Name (e.g. "Size") on the first row of the handle, and give every variant row an Option1 Value.
SHP-V02 Option name without a value on a variant row
The product declares an option (e.g. Size) but this variant row leaves the corresponding value empty. Every variant must supply a value for every declared option.
Fix: Fill in the option value for this row, or remove the option if the product has no variants.
SHP-V03 Duplicate option combination
Two variant rows of the same product have identical option values (e.g. two rows with Size=M, Color=Blue). Shopify keeps one and drops the other.
Fix: Every variant of a product needs a unique combination of option values.
SHP-V04 Too many variants for one product
Shopify limits a product to 100 variants. Rows beyond the limit are rejected while the rest import, leaving the product half-loaded.
Fix: Split the product, or reduce the number of option combinations.
SHP-V05 Duplicate SKU across products
The same SKU appears on variants of different products. Shopify allows it, but inventory tracking, fulfilment and most third-party apps assume SKUs are unique.
Fix: Give each variant its own SKU.
Field values
SHP-F01 Invalid price
Prices must be plain decimal numbers with a full stop — no currency symbols, no thousands separators, no comma decimals. "1,299.00" and "$19.99" both fail.
Fix: Write 1299.00 and 19.99. Format the column as Text or Number without separators before exporting.
SHP-F02 Invalid image URL
Image Src must be a complete, publicly reachable URL starting with http:// or https://. Relative paths and local file paths fail validation ("Validation failed: Invalid URL provided" is the resulting error).
Fix: Use the full URL of a publicly hosted image.
SHP-F03 Invalid boolean value
Published, Variant Requires Shipping, Variant Taxable and Gift Card accept only TRUE or FALSE. Values like "yes", "1" or "Y" are rejected.
Fix: Use TRUE or FALSE.
SHP-F04 Invalid inventory policy
Variant Inventory Policy accepts only "deny" (stop selling when out of stock) or "continue" (keep selling).
Fix: Use deny or continue in lowercase.
SHP-F05 Invalid weight or inventory quantity
Variant Grams and Variant Inventory Qty must be numbers. Text or units inside the value ("500g", "12 pcs") are dropped or cause the row to fail.
Fix: Put a bare number in the field; the unit belongs in Variant Weight Unit.
SHP-F06 Invalid barcode
The Variant Barcode column fails GS1 validation. Shopify stores whatever you give it, but a broken barcode propagates to every sales channel you connect — Google, Meta, Amazon — and gets your products rejected there instead.
Fix: Check the barcode against the number printed on the product, and format the column as Text so spreadsheets stop mangling it.
Encoding & dirty data
SHP-E01 Smart quotes or non-UTF-8 punctuation
Curly quotes (" ") and other Word-style punctuation inside unquoted fields break CSV parsing — Shopify reports an "illegal quoting" error. They arrive when copy is written in Word or Google Docs.
Fix: Save the file as UTF-8 CSV and replace curly quotes with straight ones inside data fields.
SHP-E02 Spreadsheet-damaged value
A value shows the fingerprints of spreadsheet number conversion: scientific notation (8.71E+12), a trailing ".0", or a barcode that lost its leading zero. The original data is often unrecoverable from the file alone.
Fix: Re-export from the source with the affected columns formatted as Text.
SHP-E03 Invisible characters in a field
Zero-width spaces, non-breaking spaces or a BOM inside a value. They are invisible in the spreadsheet but become part of the product title, handle or SKU — which is why "identical" SKUs later fail to match.
Fix: Retype the affected values, or clean the file before importing.