Read this before you import anything
The importer works, but four of its behaviours will cost you real data if you do not plan around them. All four bite hardest on a second import into a catalog you have already tidied up.
- Rows are matched by product NAME, and a match is overwritten in place. There is no "skip existing" and no preview of what will change. A row whose name matches an existing product replaces that product's price, cost, category and age restriction. Two different products with the same name cannot both exist.
- A price written as
$12.99imports as0.00. Only a bare number is read. Currency symbols, thousands separators and trailing text all fail silently and the product ends up free. Strip formatting from the price and cost columns first. - The Category column is accepted by the wizard and thrown away. Worse, on a matched product the category is cleared. Re-importing a supplier price list will uncategorise every product it touches.
- Age restriction resets to None on a matched product unless the file carries an Age Restriction column with
none,18or21in it. Re-importing a price list will silently un-flag your 21+ items. - The Starting Inventory column is accepted and thrown away too. No stock is written by an import, ever.
The safe use of this tool is a first load into an empty catalog, with clean numeric prices, and category, stock and age restriction set afterwards in the app. For a routine price update, expect to re-set the category and the age flag on everything you touched.
Running the import
Open Products and press Import CSV.
Upload
Drop a .csv file on the box, or click to browse. The first row must be column
headers. The file is read and you land on the mapping step.
Map columns
The wizard lists each column from your file with a dropdown to say what it is. It guesses from the header name; check every one.
Three are required and the Import Products button stays disabled until all three are mapped: Product Name, Selling Price, Cost. If any is missing, the wizard names it — Missing required mappings: …
Optional and honoured: SKU (digits only), UPC / Barcode, Custom SKU, Description, Brand, Age Restriction.
Optional and discarded: Category, Starting Inventory. They are on the
list; they do not reach the catalog. Set both -- Skip -- so nobody on your team
believes they worked.
A preview of the first few rows sits underneath so you can confirm the columns line up before committing.
Import
Press Import Products. The import runs in the background and the screen shows progress — N of M rows processed — then a summary: how many Imported, how many Skipped, and how many Errors, with the first fifty error messages listed by row number.
Read the summary as a hint, not a receipt. Two things it does not tell you:
- Rows with an empty Product Name are dropped before the import starts. They are not counted in N of M rows processed, not reported as Skipped, and produce no error. A fifty-row file with two blank names reports 48 of 48 processed, 48 imported, 0 skipped, 0 errors. Compare the number of rows in your file against the Imported figure yourself.
- One bad row can stop the whole import. A database error on any row — a name over 255 characters, a barcode over 50, a brand over 255, all of them ordinary in a supplier file — abandons everything after it and undoes everything before it, while the Imported number carries on showing the rows it had counted. The screen can say Imported 300 with a green tick when nothing at all was written.
Either way, open Products afterwards and check that what you expected is there.
Getting the file right
- One header row, then one product per row.
- Product Name must be filled on every row and unique across the file.
- Selling Price and Cost: digits and a decimal point only.
12.99, not$12.99. - SKU must be digits only. Anything with a letter or a dash —
ABC-123,SKU-0044— is thrown away without a word. Put codes like that in the Custom SKU column instead. - Age Restriction, if you use it: exactly
none,18or21. Anything else lands asnone. - Fields containing a comma must be wrapped in double quotes.
After the import
Two jobs the importer cannot do for you:
- Set stock. Nothing was imported. Use the Inventory page — see Set, adjust or count a quantity — or set each product's Initial Stock when you create it by hand.
- Set categories and age flags. Work through the products list and set both. If you imported over an existing catalog, check the products you overwrote: their category is gone and their age flag is back to None.