Woo CSV Repair — CSV check and automatic fixes
"Errors found" counts errors in the original file. "Errors fixed" and "Errors remaining" come from the re-check of the corrected data for the whole file. The free sample CSV contains only the selected groups (50 of 57 product records); it is not the complete corrected file. These counters refer to the whole processed file.
Next steps
- Some problems remain after the automatic fixes. They need a decision from you: see "After automatic fixes" below for the code, record, SKU and recommended action.
- The free sample covers only part of the catalogue (50 of 57 product records). It is not your complete corrected file.
- Full processing (manual, on request) is possible only after we confirm by message that this file can be processed. Problems that need your decision are not fixed automatically.
- Before importing everything, test a few products on a staging copy of your store.
Supported scenario: Creating new products with the built-in WooCommerce CSV importer (Products → Import, without "Update existing products"). Parents (variable) and variations (variation) in one file, linked by SKU in the Parent column, local attributes. Passing these checks does not guarantee a successful import into every store.
Free sample
Free sample: 7 product groups, 50 of 57 product records. This is not your complete catalogue.
The sample contains only whole product groups (a parent with all of its variations, or a standalone product) that pass all checks after the automatic fixes. It was re-checked before being offered.
Automatic fixes
Value changes: 2. Moved records: 7. These are the changes full processing applies to the whole file.
Value changes
| Original record | SKU | Field | Before | After | Reason |
|---|---|---|---|---|---|
| 11 | 000210-M | Parent | ·000210 | 000210 | Leading/trailing spaces in Parent; without them the value unambiguously points to the parent in record #9. |
| 12 | 000210-L | Parent | 000210· | 000210 | Leading/trailing spaces in Parent; without them the value unambiguously points to the parent in record #9. |
Reordering
| Original record | SKU | Old position | New position | Reason |
|---|---|---|---|---|
| 8 | TEE-100 | 8 | 2 | Position shifted because variations were moved; relative order is preserved. |
| 2 | TEE-100-S-W | 2 | 3 | Variation moved directly after its parent (original record #8). |
| 3 | TEE-100-S-B | 3 | 4 | Variation moved directly after its parent (original record #8). |
| 4 | TEE-100-M-W | 4 | 5 | Variation moved directly after its parent (original record #8). |
| 5 | TEE-100-M-B | 5 | 6 | Variation moved directly after its parent (original record #8). |
| 6 | TEE-100-L-W | 6 | 7 | Variation moved directly after its parent (original record #8). |
| 7 | TEE-100-L-B | 7 | 8 | Variation moved directly after its parent (original record #8). |
After automatic fixes (re-check)
Blocking problems remain after automatic fixes. After automatic fixes, the re-check still found errors that need a manual decision: 4. A fixed file is not produced, so an incomplete or incorrect catalogue cannot be mistaken for a finished one.
Record numbers below refer to the corrected order; "Original record" is the number in your original file.
| Level | Code | Record | Original record | File lines | SKU | Field | Explanation | Recommended action |
|---|---|---|---|---|---|---|---|---|
| Error | ATTRIBUTE_VALUE_NOT_IN_PARENT |
21 | 21 | 25 | JKT-9-L |
Attribute 1 value(s) | The value "Large" of attribute "Size" is not offered by the parent (record #18: "S, M, L"). Shoppers could not select this variation. | Change the value to one of the parent's values or add it to the parent's list. The tool never treats different spellings (such as "L" and "Large") as the same value. |
| Error | PARENT_NOT_FOUND |
22 | 22 | 26 | BAG-1-BLK |
Parent | No parent with SKU "BAG-1" exists in the file. WooCommerce would create an empty placeholder product and attach the variation to it instead of the intended product. | Add the parent product to the file or correct the SKU in Parent. If the parent already exists in your store, that is an update scenario, which is not supported. |
| Error | SKU_DUPLICATE |
55 | 55 | 59 | NOTE-1 |
SKU | The SKU "NOTE-1" is repeated (also records #56). WooCommerce creates only the first row and skips the others. | Decide manually: either these are different products (they need different SKUs) or a duplicate (remove the extra row). The tool never deletes or merges products. |
| Error | SKU_DUPLICATE |
56 | 56 | 60 | NOTE-1 |
SKU | The SKU "NOTE-1" is repeated (also records #55). WooCommerce creates only the first row and skips the others. | Decide manually: either these are different products (they need different SKUs) or a duplicate (remove the extra row). The tool never deletes or merges products. |
| Info | UNKNOWN_COLUMN |
— | — | — | — | Supplier note | The column "Supplier note" is not part of the built-in schema, so WooCommerce does not import it by default. Its values are kept unchanged. | If it is a custom field, rename the column to "meta:your_key" or choose "Import as meta data" on the column mapping screen. |
Problems in the original file
| Level | Code | Record | File lines | SKU | Field | Explanation | Recommended action |
|---|---|---|---|---|---|---|---|
| Error | VARIATION_BEFORE_PARENTauto-fixed in processed result |
2 | 3 | TEE-100-S-W |
Parent | The variation (record #2) comes before its parent (record #8). WooCommerce creates a temporary placeholder parent without attributes, and the variation's attributes are lost. | Fixed automatically: rows are reordered so the parent comes before its variations. |
| Error | VARIATION_BEFORE_PARENTauto-fixed in processed result |
3 | 4 | TEE-100-S-B |
Parent | The variation (record #3) comes before its parent (record #8). WooCommerce creates a temporary placeholder parent without attributes, and the variation's attributes are lost. | Fixed automatically: rows are reordered so the parent comes before its variations. |
| Error | VARIATION_BEFORE_PARENTauto-fixed in processed result |
4 | 5 | TEE-100-M-W |
Parent | The variation (record #4) comes before its parent (record #8). WooCommerce creates a temporary placeholder parent without attributes, and the variation's attributes are lost. | Fixed automatically: rows are reordered so the parent comes before its variations. |
| Error | VARIATION_BEFORE_PARENTauto-fixed in processed result |
5 | 6 | TEE-100-M-B |
Parent | The variation (record #5) comes before its parent (record #8). WooCommerce creates a temporary placeholder parent without attributes, and the variation's attributes are lost. | Fixed automatically: rows are reordered so the parent comes before its variations. |
| Error | VARIATION_BEFORE_PARENTauto-fixed in processed result |
6 | 7 | TEE-100-L-W |
Parent | The variation (record #6) comes before its parent (record #8). WooCommerce creates a temporary placeholder parent without attributes, and the variation's attributes are lost. | Fixed automatically: rows are reordered so the parent comes before its variations. |
| Error | VARIATION_BEFORE_PARENTauto-fixed in processed result |
7 | 8 | TEE-100-L-B |
Parent | The variation (record #7) comes before its parent (record #8). WooCommerce creates a temporary placeholder parent without attributes, and the variation's attributes are lost. | Fixed automatically: rows are reordered so the parent comes before its variations. |
| Error | PARENT_WHITESPACEauto-fixed in processed result |
11 | 15 | 000210-M |
Parent | Parent " 000210" has leading or trailing spaces and does not exactly match any SKU. Without the spaces it unambiguously points to record #9 ("000210"). | Fixed automatically: the spaces are removed from Parent; the parent SKU is not changed. |
| Error | PARENT_WHITESPACEauto-fixed in processed result |
12 | 16 | 000210-L |
Parent | Parent "000210 " has leading or trailing spaces and does not exactly match any SKU. Without the spaces it unambiguously points to record #9 ("000210"). | Fixed automatically: the spaces are removed from Parent; the parent SKU is not changed. |
| Error | ATTRIBUTE_VALUE_NOT_IN_PARENT |
21 | 25 | JKT-9-L |
Attribute 1 value(s) | The value "Large" of attribute "Size" is not offered by the parent (record #18: "S, M, L"). Shoppers could not select this variation. | Change the value to one of the parent's values or add it to the parent's list. The tool never treats different spellings (such as "L" and "Large") as the same value. |
| Error | PARENT_NOT_FOUND |
22 | 26 | BAG-1-BLK |
Parent | No parent with SKU "BAG-1" exists in the file. WooCommerce would create an empty placeholder product and attach the variation to it instead of the intended product. | Add the parent product to the file or correct the SKU in Parent. If the parent already exists in your store, that is an update scenario, which is not supported. |
| Error | SKU_DUPLICATE |
55 | 59 | NOTE-1 |
SKU | The SKU "NOTE-1" is repeated (also records #56). WooCommerce creates only the first row and skips the others. | Decide manually: either these are different products (they need different SKUs) or a duplicate (remove the extra row). The tool never deletes or merges products. |
| Error | SKU_DUPLICATE |
56 | 60 | NOTE-1 |
SKU | The SKU "NOTE-1" is repeated (also records #55). WooCommerce creates only the first row and skips the others. | Decide manually: either these are different products (they need different SKUs) or a duplicate (remove the extra row). The tool never deletes or merges products. |
| Info | UNKNOWN_COLUMN |
— | — | — | Supplier note | The column "Supplier note" is not part of the built-in schema, so WooCommerce does not import it by default. Its values are kept unchanged. | If it is a custom field, rename the column to "meta:your_key" or choose "Import as meta data" on the column mapping screen. |
What cannot be checked without your store
- SKUs that already exist in the store. If a SKU from the file already exists in the store, the built-in importer skips the row unless "Update existing products" is enabled ("A product with this SKU already exists"). The file alone does not contain this information.
- Global attribute and term settings. Global attributes (Attribute N global = 1) depend on the attributes and terms configured in the store.
- How the database compares SKUs. Whether SKU lookups are case- and trailing-space-sensitive depends on the MySQL/MariaDB table collation.
- Plugin and theme conflicts. Plugins can change how rows are parsed through importer hooks (woocommerce_product_importer_*).
- Server limits. Upload size, PHP memory and execution time limits decide whether the import runs as one file.
- Images, categories, tags, shipping and tax classes. Image URL availability and the existence of tax classes are not checked.
- The column mapping screen. Columns can be remapped manually, or a previously saved mapping can be applied.