The Pre-Flight Report
The import said it worked. Two hundred products say otherwise.
Know exactly what will break your catalog import before you run it.
Every blocker named, every fix shown, every guessed field flagged. Drop a supplier file in and read the answer — no account, nothing stored.
Check a file freeSee what it costs
Built for catalogs over about a hundred products. Under that, a chat window will genuinely do — we say so on the pricing page.
What actually goes wrong
The expensive failures are the ones nobody reports
We broke a Shopify store on purpose and kept every word it said. 14 pages came out of it, none written from documentation — and 10 of them describe failures the platform never reported at all.
Nothing to paste into a search box
A merchant holding an error string can look it up. A merchant whose import reported success and quietly dropped two products has nothing to search for, and no reason to go looking.
The preview agrees with the file, not the outcome
The platform’s own import preview counts the rows in your file — including the ones it is about to discard. We watched it announce “approximately 1 product with a total of 1 SKU” while two variants were about to be destroyed.
You find out in the storefront
Not in a log, not in an email. In the catalogue, usually because somebody noticed a product missing or a price that reads 1,299 where it should read 12.99.
This is the whole product, on one screen.
A real report, generated by the same code the free tool runs, over a supplier file with the defects we have actually measured. Nothing here is a picture.
sandmark-catalog-sept.csv
- 11rows
- 6products
- 10variants
5 rows will FAIL to import
6 rows have no blockers on them.
Will stop the import
- 1
SH-004Title repeated on a continuation row
Clear Title, Body (HTML), Vendor and Tags on every row after the first row of a handle.
handles: cafe-apron
- 1
SH-007Variant gives the wrong number of option values
Give every variant a value for each option the product declares.
handles: cafe-apron
- 2
SH-034Variant row missing inventory policy or fulfillment service
Put a Variant Inventory Policy ('deny' or 'continue') and a Variant Fulfillment Service ('manual', or your app's handle) on every variant row, including continuation rows.
handles: pour-over-kettle
- 1
SH-035Product has no name
Put a Title on the first row of every handle group. Continuation rows must still leave it blank (SH-004).
handles: milk-jug-600
Worth fixing, but we do not expect the import to fail
- 1
SH-008Empty continuation row
Delete the row. It carries a handle and no data.
handles: scale-pro
For information
- file
SH-021Windows (CRLF) line endings
- Three severities, not a traffic light. A blocker stops the import. A warning is worth fixing and probably will not. Painting them the same colour is how a report teaches people to ignore it.
- Every finding names the row. Not “some products have errors” — the rule, the count, and where to look.
- It tells you what it could not check. A rule that failed to run is reported as a rule that failed to run, never as a pass.
Run your own fileFree, no account, nothing stored.
From file to import
Four steps, and you can stop after the second
The report is free and complete on its own. The rest is for when you need the file itself, not just the verdict.
Drop the file in
CSV, XLS or XLSX, in whatever shape your supplier sent it. No account, and the file is deleted in the same request that reads it.
Read the Pre-Flight Report
Every blocker named with the row it is on, separated from the warnings, with the rules that could not run reported as not run. This part is free, and it is the whole demo.
Confirm the mapping
Their column names against our fields, with a live preview of the interpretation and unit confirmation. Save it as a Supplier Profile and next month is one click.
Export, with the receipts
A platform-shaped file, chunked so handle groups stay intact, with an optional provenance audit alongside saying where every value came from.
What we will not claim
We do not promise your import will succeed
You will not find a guarantee that your import will succeed anywhere on this site, nor a promise of a flawless run, nor a claim that there will be no errors. Not because we are being modest — because nobody can honestly say those things.
Whether an import succeeds depends on your store, your image host, and the platform’s current spec. A duplicate handle created inside your store after we hand the file over will break it, and we will never know. Those are three things we do not control, and a promise about them is a promise we would break.
Here is what we will be held to instead: we find and name every blocker in the file, we report exact counts in and out, and we mark every field we had to infer. That is a promise about our own rule engine — testable, and testable by you, against a file you already know.
Measured, not asserted
We publish the numbers, including the bad ones
We have no customer logos to show you — there are no customers yet, and inventing one would break the only thing this product actually sells. Here is what we have instead.
21
real supplier files in the test corpus
19,885 rows, 11,405 products, 5 to 614 columns wide, across 6 source platforms. Every rule change is re-run against all of them.
measured 2026-09-05 · docs/G2_CORPUS.md
4
defects those files caught that our own tests did not
2 of them would have corrupted a catalogue without reporting anything. 140 hand-written tests were passing at the time.
measured 2026-09-05 · ADR-012
546 → 0
open-data sources swept, and how many were usable
We inspected 250 files and found nothing we could use. The well was wrong, not the filter. We publish the searches that fail too.
measured 2026-09-05 · docs/G2_CORPUS.md
0 of 142
model requests that broke their contract on the acceptance run
19,885 rows processed end to end. Every response is validated against the shape it promised; anything that fails is abstained from, not guessed at.
measured 2026-09-05 · docs/M4_GATE.md
The report higher up this page was generated by the build that produced this page, from 15 recorded observations of a real broken store. If a rule changes, both change. If the report breaks, the build fails.
Who this is for
And who should close this tab
It is built for the person who owns the catalogue and does not own the store — 2,000 to 50,000 products, files arriving monthly from three to fifteen suppliers, every one of them a different shape.
If you have eighty products, do not buy this. A chat window will do that job and it will do it today. This exists for the point where that structurally stops working: where you need to know whether it finished, what will break the import, and which fields were invented.
Before you ask
The questions we actually get
- Is my file stored? It has our cost prices in it.
- No. The upload is deleted in the same request that created it, and the report is written from it in memory. You can see this from the outside: the file is uploaded again for each step rather than held between screens. The security page states where everything goes.
- What happens when it cannot work something out?
- It abstains, and says so. A field it could not resolve is left blank with a reason rather than filled with a plausible guess, and anything it did generate is marked inferred in the export. That is the difference between a tool you can audit and one you have to trust.
- Can I not just use ChatGPT for this?
- Under about a hundred products, yes — genuinely, and we would rather say so than sell you something. Above that it cannot tell you whether it finished (oversized files are truncated, not rejected, and the remainder is summarised with full confidence), it has no model of the target grammar so it cannot name a single blocker, and it has no way to abstain.
- My supplier files are a mess. Will it cope?
- The test corpus runs from 5 columns to 614, from 1 row to 7,862, in Latin and Cyrillic, across six source platforms, including one workbook that crashes the reader — which is reported as a file we could not read, not as a file with no problems.
- Do I need an account?
- Not for the report. Not for any number of reports. The paid plans are for turning the file into an import, and the pricing page will also tell you if you are too small to need them.
Run your worst supplier file through it
The one you are dreading. It will tell you more in thirty seconds than this page can, and it costs nothing to find out.
Check a file freeWhat happens to my file
No account. Nothing stored. No card, because there is nothing to buy on this page.