What we check
26 rules in this build: 7 file-level, 9 record-level, 6 variant-level and 4 resource-level. Each one names the official Shopify documentation it comes from. Rules are pure functions over your file: same file in, same result out. The image-reachability check from the specification is not included — it would have to fetch every image URL, and that would send data off your machine.
| Rule | Scope | Severity | What it catches |
|---|---|---|---|
| FILE_NOT_UTF8 | file | blocker | A file that is not UTF-8 and cannot be converted losslessly. |
| FILE_UTF8_BOM | file | warning | A byte-order mark before the first column name. |
| FILE_LINE_ENDING | file | warning | CRLF or mixed line endings; exports are normalised to LF. |
| FILE_UNCLOSED_QUOTE | file | blocker | A quote that never closes — everything after it is unparsable. |
| ROW_COLUMN_COUNT_MISMATCH | row | blocker | A row whose field count differs from the header. |
| FILE_MISSING_HEADER | file | blocker | No Title or URL handle column. |
| FILE_EMPTY_ROWS | file | info | Runs of blank lines. |
| SHOPIFY_HANDLE_SPACE | row | blocker | Spaces in URL handle. |
| SHOPIFY_HANDLE_ILLEGAL | row | blocker | Uppercase letters, underscores or slashes in a handle. |
| SHOPIFY_HANDLE_DUPLICATE | row | blocker | The same handle on rows with different titles. |
| SHOPIFY_TITLE_EMPTY | row | blocker | A new product with no title. |
| SHOPIFY_HANDLE_MISSING_ON_UPDATE | row | blocker | An update row without a handle. |
| SHOPIFY_PRICE_CURRENCY | row | blocker | $19.99, 19,99 €, USD 19 — price must be a bare number. |
| SHOPIFY_PRICE_EMPTY | row | warning | Empty price (Shopify defaults it to 0.00). |
| SHOPIFY_PRICE_LT_COMPARE_AT | row | warning | Compare-at price lower than price. |
| SHOPIFY_PUBLISHED_BOOL | row | warning | Published is not TRUE, FALSE or empty. |
| SHOPIFY_OPTION_NAME_MISSING | variant | blocker | An option value without an option name. |
| SHOPIFY_OPTION_COMBO_DUPLICATE | variant | blocker | Two rows with the same handle and the same option combination. |
| SHOPIFY_SKU_DUPLICATE | variant | warning | One SKU on more than one variant. |
| SHOPIFY_SKU_EMPTY | variant | info | A variant without a SKU while its siblings have one. |
| SHOPIFY_VARIANT_ID_RISK | variant | blocker | An option value that a clean-up would change, on a variant that already has an ID. |
| SHOPIFY_VARIANT_LIMIT_DAILY | file | info | More than 10,000 new variants in one file. |
| SHOPIFY_IMAGE_HTTP | row | warning | Image Src over http:// — the scheme is switched to https. |
| SHOPIFY_TAGS_UNQUOTED | row | blocker | A tag list whose commas were not quoted, so the row is shifted. |
| SHOPIFY_BARCODE_OVERFLOW | row | warning | More than 20 barcodes on one variant. |
| SHOPIFY_WEIGHT_UNIT | row | warning | A weight unit outside g / kg / lb / oz. |