My CSV has 28,000 lines but only a few hundred products

Descriptions containing newlines put line breaks inside quoted fields, so counting lines overstates a catalogue — on one real file, by more than forty times.

What you are seeing

Your file viewer or your shell says tens of thousands of lines, and the importer, or your own count, says far fewer products.

There is no error message for this one. That is the problem, not an omission on this page — the import reports success and the damage is only visible if you go looking for it.

Why it happens

A CSV record and a line of text are not the same thing. A quoted field may contain newlines, and product descriptions routinely do. One file in our corpus is named for its 28,151 lines and holds 647 records — its descriptions carry the difference.

The second gap sits on top of the first: a record is not a product either. Where a Handle column repeats, those rows are variants of one product. Measured across 21 real supplier files, 1 row averages 0.574 products.

This matters commercially, not just cosmetically. Import tools priced per product, and plans sold by catalogue size, are counting something — and "lines", "rows" and "products" can differ by an order of magnitude on the same file.

How to fix it

  1. Never use `wc -l` or a text editor line count to size a catalogue. Parse it with something that understands quoted fields.
  2. Count products by counting DISTINCT handles, not records.
  3. When comparing quotes from import tools, check which of the three numbers each one means.

Where this came from

We broke a real Shopify store on purpose to answer these questions, and kept what it said. Nothing on this page is quoted from documentation.

  • One corpus file is 28,151 lines and 647 records, because its descriptions carry newlines inside quoted fields. Counting lines to estimate a catalogue overstates it by more than forty times on that file.
  • Across 21 real supplier files and 19,885 rows, 1 row = 0.574 products. A repeated Handle column is Shopify saying "same product, next variant", so a row count and a product count are different numbers about the same file.

What we did not measure. The 0.574 figure is an average across our 21-file corpus and describes no individual file well — the distribution is bimodal. Use it to understand the gap, not to estimate yours.

Observed 2026-09-05. The store this was measured on has since been deleted, so these answers are an archive rather than something we re-run — we would rather tell you the date than imply it is checked continuously.

Check your file before you upload it

The Pre-Flight Report reads your supplier file and names every blocker, with the row it is on, before you go near an importer. It is free, it needs no account, and it does not send your file to a model.

Check a file free