LogoTools
Runs entirely in your browser - nothing is uploaded

WooCommerce's Product CSV Importer works through your file row by row. A price with a rupee symbol in it, a variation pointing at a parent SKU that got renamed, a second product carrying an SKU you already used: each one costs you a failed row, and you only find out after the import has chewed through the whole file. This checks the file first and tells you the row number.

Paste the CSV or upload it. Nothing is sent anywhere. The parsing and every check below happen in the page you are looking at.

What gets checked

Structure first. Type and Name have to be present, and the tool warns when SKU or Regular price is missing because nothing in the file can set those values without the column. Rows with too few or too many fields are flagged with their own field count, which is almost always an unescaped comma or a stray quote. Attribute columns have to arrive in pairs, so "Attribute 1 name" without "Attribute 1 value(s)" is an error.

Then values. Prices must be plain numbers with a dot for decimals and no currency symbol. Stock, ID, Position and the low stock threshold must be whole numbers. Published, Backorders allowed?, Visibility and Tax status are compared against the value sets WooCommerce itself exports, and the yes/no columns against 1, 0, yes, no, true and false.

Then relationships across rows. Duplicate SKUs and duplicate IDs are reported on every row that carries them. A variation with no Parent is an error. A variation whose Parent points at a simple product is an error too. A sale price that sits at or above the regular price gets flagged, since WooCommerce only shows a sale when the sale price is lower.

Variations and parents

This is where most WooCommerce imports come apart. A variation row attaches to its parent through the Parent column, holding either the parent's SKU or id: followed by the parent's numeric product ID. Both forms are resolved here against the other rows in your file.

When a Parent matches nothing in the file you get a warning, not an error. That case is legitimate: you may be adding variations to a product that already exists in your store. The warning exists so a typo does not slip past looking like an intentional reference.

Two smaller checks catch the same mistake from other angles. A variation carrying a comma-separated list in an attribute value is flagged, because the full list of options belongs on the parent row and the variation picks one. An attribute name on a variation that the parent never declares is flagged as well, which usually means a capitalisation or spelling drift between the two rows.

Things the tool treats as warnings on purpose

Some rules depend on your store, not your file. Header spelling shifts with locale: a UK store writes "Visibility in catalogue" where a US store writes "Visibility in catalog", and the weight and dimension headers carry whatever unit the store is set to. Both forms are accepted.

Product types work the same way. WooCommerce ships five (simple, variable, variation, grouped, external) and plugins register more, so a type outside that list gets a warning telling you to check it is one of yours and not a typo. Columns the built-in importer does not write are reported as notes, since you can map them by hand on the import screen or prefix them with "Meta: " to store them as custom fields.

The annotated download

The download button gives you back your own file with one extra column called _issues, listing every error, warning and note found for that row. Open it in a spreadsheet, sort by that column, fix the rows that have text in it. Beats reading row numbers off a screen and hunting for them in another window.

Frequently asked questions

Which WooCommerce columns does it know about?

The set the built-in Product CSV Importer and Exporter use: ID, Type, SKU, Name, Published, Is featured?, Visibility, the description fields, stock fields, Regular price, Sale price, Categories, Tags, Images, Parent, Position, the shipping and tax fields, and numbered attribute columns. Anything else is reported as a note, never as an error.

My file uses semicolons instead of commas. Will it work?

Yes. The delimiter is detected from the header line, so a semicolon-separated export from a European spreadsheet parses correctly. A byte-order mark at the start of the file is stripped before parsing and reported as a note.

Why is a bad Parent only a warning?

Because it can be correct. You might be importing variations for a product that already lives in your store, in which case the parent will never appear in the file. The tool cannot see your store, so it reports the mismatch and leaves the judgement to you.

Does passing this validation guarantee the import will work?

No. It catches the structural and value problems that break rows, and it cannot see your store's existing products, taxonomies, plugins or settings. Treat a clean result as the file being well formed, then run a small batch before the full one.

Does my product data leave my computer?

No. The file is read and checked in your browser. There is no upload step and no server involved, so you can run a full catalogue export through it without sending your pricing anywhere.