The two rules that explain everything else
What you’re looking at
Neither is a page — each opens a sheet over the screen you are on. Import opens Bulk-import items, badged Catalog Import. Under Start from the template sits Download sample CSV — “Download the sample CSV to see the required headers, expected formats, and two example rows.” Below it, Upload your file is a Click to upload or drag and drop target, constrained to “.csv, .xlsx or .xls — max 5MB, up to 1000 rows”. While it reads, the sheet says Reading spreadsheet…; afterwards Replace file swaps the upload. The Preview is the part worth slowing down for. Three badges count what it found — {n} new, {n} to update and {n} need fixing — and every row is labelled either new or “updates existing · matched on upc” (orsku). A row that changes nothing says so: “No changes — this row matches what is already stored.” A Field reference below lists all 27 catalogue columns with their hints — required ones carry a star — followed by the four optional stock columns. When your file carries opening stock, each preview row shows it, for example “Opening stock 40 → Main Pharmacy · expires 2027-03-31 · lot B24-0192”.
That “to update” count is the word “import” hiding an update. Each row is matched against your catalogue on its barcode first, then its SKU. A match updates that product and leaves untouched any column your sheet omits; no match creates a new product. So a corrected price list is a legitimate re-import rather than a duplicate-maker — provided your barcodes and SKUs are right. Where they are missing or wrong, the same product arrives twice under two names.
Export opens Export inventory catalog, badged Catalog Export. It shows “{n} item(s) ready to export”, a File format choice — Excel (.xlsx), “Formatted workbook — opens natively in Excel.”, the default, or CSV (.csv), “Plain text — universal, opens anywhere.” — and the full Columns included list. The footnote reads “The export is logged against the audit trail.”
An empty catalogue can still open both. Export simply refuses, its button reading No items to export rather than handing you a header row with nothing under it.
Import your catalogue
Open the importer
Start from the template — or your old system's export
Upload the file
.csv, .xlsx and .xls are accepted, up to 5 MB.Read the preview before you commit
Import
Bring opening stock and expiry dates in with the import
Add these four columns to the right of the catalogue columns (the sample CSV already has them, empty):- An expiry date is needed for stock of any product with Track lot & expiry on (the default). Set
requires_lottofalsefor things that do not expire. - A date written all in numbers, like 03/04/2027, is refused — it is the 3rd of April in one country and the 4th of March in another, and a wrong guess ages your stock by a month. Write it as YYYY-MM-DD.
- A date that has already passed is refused, as is a location name that does not exist.
- A row that fails any stock check is not imported at all, so you never end up with the product but not its stock.
Export your catalogue
Open the exporter
Choose the file format
Check the columns
Download it
Who can do this
Role decides whether Inventory opens at all — a Cashier / Till Operator reaches only POS and Sales, so neither button is theirs. Permission decides what happens to the products once they are in: importing writes catalogue rows, and the stock that fills them is gated.- Enforcement is opt-in, per person. A colleague never saved in the permissions sheet is unrestricted, and the sheet warns “Saving starts enforcing”.
- A denied action is recorded; an allowed one is not. Hiding Inventory from a sidebar is a convenience, not a security boundary.
Check it worked
- After an import: the new products appear on the Catalog tab and are searchable at the till. Products imported without
opening_stockshow zero on hand until you receive stock — that is correct, not a failed import. Products imported with it show that stock on the Stock tab, in its lot, with its expiry date. - The Created and Updated tiles match what the preview promised.
- After an export: the file opens, the row count matches your catalogue, and the columns match the Columns included list.
Common issues
'File exceeds the 5MB limit'
'File exceeds the 5MB limit'
'…is not a supported type — use .csv, .xlsx or .xls'
'…is not a supported type — use .csv, .xlsx or .xls'
.csv or .xlsx.'Could not read that file. Re-save it as .csv or .xlsx and try again.'
'Could not read that file. Re-save it as .csv or .xlsx and try again.'
'The file has no data rows below the header.'
'The file has no data rows below the header.'
My file has a quantity column, but no stock arrived
My file has a quantity column, but no stock arrived
opening_stock as stock, and the How we read your columns panel lists any other quantity column as not imported. Rename your column to opening_stock, add stock_location and expiry_date, and upload again — or bring quantities in through Opening stock or a Stock Count.'expiry_date … is not a date we can read safely'
'expiry_date … is not a date we can read safely'
'expiry_date is needed for opening stock of an item tracked by lot / expiry'
'expiry_date is needed for opening stock of an item tracked by lot / expiry'
opening_stock value but no expiry date, and the product tracks lots and expiry. Add the date, or set requires_lot to false if the product genuinely has no expiry.'Stock not received …' after the products imported
'Stock not received …' after the products imported
'No valid rows to import'
'No valid rows to import'
The preview says 'to update' for products I meant to add
The preview says 'to update' for products I meant to add
'No items to export'
'No items to export'
FAQ
Can I import stock levels as well as products?
Can I import stock levels as well as products?
opening_stock, stock_location and expiry_date columns and each product’s stock is received into a lot with that expiry date. It is received once: it can never overwrite or top up what you already hold, which is what stops a stale spreadsheet from changing the shelf. For stock of products already in your catalogue, Opening stock on the same toolbar works too, and everyday arrivals go through Receive.What happens if I import the same file twice?
What happens if I import the same file twice?
Will re-importing an export wipe my stock?
Will re-importing an export wipe my stock?
Excel or CSV — which should I export?
Excel or CSV — which should I export?
Is there a limit on how many rows I can import at once?
Is there a limit on how many rows I can import at once?