Sample report — Shopify CSV Import Preflight
DEMONSTRATION — entirely synthetic, not a customer result. File synthetic_broken.csv (8 rows, 3 products, 5 variants, 5 image rows; mode update). All handles, SKUs, brands and URLs are made up. This is the literal output of the same check a customer file receives, plus the plain-language summary a person writes alongside it.
Verdict: BLOCKED — do not import (11 blocking, 8 warnings)
Plain-language summary
Do not import this file yet. Shopify would reject at least three rows (invalid price, invalid image URL, blank status) and — more seriously — the product blue-tee would end up with a variant without an option value and a duplicate SKU, while in update mode blank cells overwrite existing descriptions, vendors and tags with blanks. No corrected copy was written: four blocking points (duplicate handle, handle with spaces, which variant keeps SKU SYN-TEE-S-BLU, deleting the stray row 9) need a decision from the owner. The safe corrections (decimal comma on row 4) are applied in the rerun after those decisions.
Findings
| Row | Column | Severity | Finding | Recommended action |
|---|---|---|---|---|
| 9 | URL handle | BLOCKING | Handle 'blue-tee' reappears after other products (non-contiguous block) | Group all rows of a handle together; a split block is treated as a duplicate product definition. |
| 9 | Title | WARNING | Title repeated on variant rows of 'blue-tee' | Allowed, but Shopify's template leaves Title blank on variant rows; repeated titles often indicate a duplicated product row. |
| 2 | Barcode | WARNING | Blank non-required cells on first row of 'blue-tee' will OVERWRITE existing values with blank | Shopify: 'If a non-required column ... is blank, then the matching value ... is overwritten as blank.' Fill the values or delete the whole column before importing with Overwrite. |
| 4 | Price | WARNING | Price '19,99' uses a decimal comma | Safe fix: convert to dot decimal (19,99 -> 19.99). Shopify reads '19,99' as invalid. |
| 5 | Option1 value | BLOCKING | Variant row has an empty Option1 value | Every variant needs an Option1 value ('Default Title' for a single-variant product); Shopify rejects or collapses the variant otherwise. |
| 6 | URL handle | BLOCKING | Handle 'Red Mug 2024' is not a valid Shopify handle | Use lowercase letters, numbers and dashes only, no spaces (e.g. 'blue-tee'). Changing a handle changes the product URL — decide, do not auto-fix. |
| 6 | Title | BLOCKING | First row of handle 'Red Mug 2024' has no Title | Title is required on the first row of every product (Shopify: required column). |
| 6 | SEO title,SEO description,Compare-at price,Barcode | WARNING | Blank non-required cells on first row of 'Red Mug 2024' will OVERWRITE existing values with blank | Shopify: 'If a non-required column ... is blank, then the matching value ... is overwritten as blank.' Fill the values or delete the whole column before importing with Overwrite. |
| 6 | Option1 value | BLOCKING | Option1 value '350 ml' but Option1 name is empty on the product's first row | Set the option name (e.g. Size) on the first row of the handle. |
| 6 | Price | BLOCKING | Invalid price 'abc' | Use a plain number with up to 2 decimals, e.g. 19.99. |
| 6 | Product image URL | BLOCKING | Image file name ends in _thumb/_small/_medium | Shopify rejects these suffixes; use the original file name. |
| 7 | Status | BLOCKING | Status column present but empty | Shopify: 'If this column is present, then it needs a value' (active|draft|archived). |
| 7 | SEO title,SEO description,Compare-at price,Barcode | WARNING | Blank non-required cells on first row of 'red-mug' will OVERWRITE existing values with blank | Shopify: 'If a non-required column ... is blank, then the matching value ... is overwritten as blank.' Fill the values or delete the whole column before importing with Overwrite. |
| 7 | Product image URL | BLOCKING | Invalid image URL 'htp:/broken url/red-mug.jpg' | Must be a public http(s) URL without spaces (upload to Content > Files and copy the link). |
| 8 | Tags,SEO title,SEO description,Compare-at price,Barcode | WARNING | Blank non-required cells on first row of 'green-cap' will OVERWRITE existing values with blank | Shopify: 'If a non-required column ... is blank, then the matching value ... is overwritten as blank.' Fill the values or delete the whole column before importing with Overwrite. |
| 8 | Price | WARNING | Empty price | Shopify defaults an empty price to 0.00 — the variant becomes free. Fill it in. |
| 8 | Inventory quantity | WARNING | Tracked variant with empty quantity | Shopify defaults to 0 — the variant imports as out of stock. |
| 4 | SKU | BLOCKING | Duplicate SKU 'SYN-TEE-S-BLU' on rows [2, 4] (handles ['blue-tee']) | SKUs should be unique per variant; duplicates break inventory sync and most fulfilment integrations. Decide which variant keeps the SKU. |
| 7 | SKU | BLOCKING | Duplicate SKU 'SYN-MUG-350' on rows [6, 7] (handles ['Red Mug 2024', 'red-mug']) | SKUs should be unique per variant; duplicates break inventory sync and most fulfilment integrations. Decide which variant keeps the SKU. |
Not verifiable offline (UNKNOWN)
- Whether any handle already exists in the store (import would create duplicates or, with Overwrite, replace data) — needs a store export to compare.
- Whether changed Option values will delete existing variant IDs (breaks third-party references) — needs current store variants.
- Whether metafield columns match the store's metafield definitions and types — needs Settings > Custom data.
- Whether image URLs are reachable by Shopify at import time — run with --check-images or verify manually.
Corrected copy
Not written: blocking findings remain that require a decision from the owner (handles, options, SKUs, rows). After those decisions there is one rerun; only mechanical corrections (whitespace, decimal commas, currency symbols, capitalisation of true/false/status values, exact duplicate rows) go into the copy.
This report is a diagnosis based on the submitted file and Shopify’s documented import rules. It is no guarantee that Shopify will accept any import. Jithox does not import anything, does not log in and has no access to your store. Shopify is a trademark of Shopify Inc.; Jithox is not affiliated with Shopify.