Shopify's CSV importer has three problems every developer eventually discovers:
- Silent failures. It shows a green "Import successful" banner even when individual rows fail.
- Cryptic messages. "Validation failed: An error occurred" — no row number, no column name, no hint.
- No undo. You can't preview what will happen before you import, and you can't roll back.
I got tired of debugging CSV imports for migration projects, so I built CSVPreflight — a browser-based validator that catches errors before you upload.
How It Works
Everything runs in the browser. Your CSV never leaves your machine.
- Drop a CSV file → 19 validation rules run automatically
- Each error shows exact row number + column name + plain-English explanation
- Auto-fix handles, booleans, URLs, and whitespace (Pro feature, $5/mo)
- Download the clean CSV and import with confidence
The 19 Checks
| Category | What It Catches |
|---|---|
| Handle format | Spaces, special chars, uppercase — auto-fix to valid slug |
| Required columns | Missing Handle, Title before upload |
| Duplicates | Duplicate handles and SKUs that silently skip rows |
| Prices | Non-numeric, negative, currency symbols |
| Booleans |
yes/no/1/0 → auto-fix to TRUE/FALSE |
| Images | Invalid URLs, missing protocols |
| Whitespace | Leading/trailing spaces that break matching |
| Variant structure | Option Name/Value pairing, orphan rows |
...and 11 more.
Tech Stack
Zero dependencies on the client side. Pure HTML/CSS/JS with a Cloudflare Pages backend for the Stripe checkout. The validator engine is deterministic — no AI needed, so it runs in milliseconds on 10,000+ row files.
Why Not Just Use Matrixify?
Matrixify is great for power users managing massive catalogs. But for "I just need to upload this CSV without errors" — $20-200/mo and a steep learning curve is overkill.
CSVPreflight is free to validate. Pro is $5/mo. That's intentional — it does one thing and does it well.
Try It
https://csv.smartstockx.top/tool
Feedback welcome! What CSV errors do you run into most?
Top comments (0)