Developer tool / 30
Product CSV Validator for Shopify Import
Check a product CSV against the rules Shopify's importer enforces, and download a repaired copy.
Product CSV Validator for Shopify Import: Shopify's importer reports one problem at a time, after the upload, which turns a bad export into an afternoon. This reads the whole file first and lists everything at once: a handle used by two products, a price with a currency symbol in it, an inventory policy that is not deny or continue, an image URL with no scheme, a product row with no title. It recognises both column schemes in circulation — Shopify's current template writes URL handle and Price, while most third-party exports still write Handle and Variant Price. Runs 100% locally in your browser with zero server file uploads.
- Category
- Developer tools
- Runs
- In your browser
- Cost
- Free · no sign-up
- Availability
- Ready to use
The file is read in your browser. Nothing is uploaded, and nothing about your catalogue leaves this page.
How Shopify reads variant rows
A product with variants spans several rows that share one handle. The first row carries the product fields: title, description, vendor, type, tags. The rows after it carry only variant fields, such as option values, SKU, price, and inventory, plus any extra image URLs. Repeating the title on those rows is harmless, but giving them a different handle, even by one character, splits them off as a separate product.
Importing safely
Shopify's import screen can overwrite products whose handles already exist in the store. With that option on, a column that is present but left blank can clear the stored value, so a careless edit can wipe descriptions or images. Import a handful of products first and check them in the admin before sending the full file.
Save the file as UTF-8 CSV; Shopify expects that encoding. When the catalogue lives in a spreadsheet, Excel to CSV exports it without the encoding problems that turn accented product names into garbled characters.
How to use it
- Choose or paste your product CSV.
- Read the errors, which are listed by row and column.
- Download the repaired copy, or fix the rows that need a decision and check again.
Privacy & limitations
Your catalogue is read in your browser and never uploaded. Prices, SKUs, and supplier names go nowhere, which matters more here than on most tools: a product export is a fairly complete picture of a business.
Related tools
Frequently asked questions
Does a clean result guarantee the import will work?
No, and it is worth being clear about that. This checks the structural rules — required columns, value formats, handle uniqueness, quoting. It cannot check that a product category matches Shopify's taxonomy exactly, that an image URL is reachable from Shopify's servers, or that you are under your plan's variant limits. It catches the failures that come from the file itself.
What does the repaired copy change?
Only formatting that has one obvious correct form: handles rewritten as lowercase and hyphens, TRUE and FALSE capitalised, the inventory policy lowercased, currency symbols and thousands separators removed from prices, a blank fulfillment service set to manual, short rows squared up to the header, the byte-order mark removed. Anything needing a decision is left alone — a blank price, a status of "live", an inventory policy of "restock". Guessing at those would turn a failed import into a wrong catalogue, which is worse.
Why does it not flag curly quotes?
Because they are usually fine. Shopify's own product template ships a title containing them. The error people hit is a curly quote standing in where a straight one should have done the quoting, and that shows up as an unclosed or stray quote — which this does report.
Which column names should I use?
Either works. Shopify's downloadable template now uses URL handle, Price, and Inventory quantity; the format its import documentation quotes, and the one most apps and exports still emit, uses Handle, Variant Price, and Variant Inventory Qty. Pick one and stay with it — a file with some columns from each is usually two exports pasted together, and this will say so.
Free tool · runs in your browser · no account required