Customers, vendors, stock with its cost, and open orders, from a spreadsheet, with a dry run before anything is written.
Each import lives on the page that holds the records it creates. On Items, Vendors and Customers, open New and take Import from file at the top of the dialog: adding one record and adding a spreadsheet of them are the same door. Devices, Purchase Orders and Sales Orders keep an Import button in the toolbar. Each one keeps its own history of what was brought in.
| What | Where | What each row is | Cost arrives as |
|---|---|---|---|
| Customers | Customers, New, Import from file | one customer with contact details and addresses | not applicable |
| Vendors | Vendors, New, Import from file | one supplier | not applicable |
| Serialized stock | Devices, Import | one unit: model, storage, colour, IMEI or serial, grade, condition, bin, cost | a cost layer on the unit |
| Bulk stock | Items, New, Import from file | one product with a quantity on hand | a cost layer for that quantity, at that cost |
| Open purchase orders | Purchase Orders, Import | one line of an order not yet received | the line's unit cost |
| Open sales orders | Sales Orders, Import | one line of an order not yet shipped | not applicable |
Open purchase orders and open sales orders are one file, told apart by its type column, so the same page opens from either order list.
One kind per run, as a CSV or a spreadsheet.
Cost arrives as a layer, not a flat number overwritten onto the product. That is what lets the ledger report what the stock you hold actually cost, and what a later sale actually earned, rather than an average that forgets its history.
A file up to the stated limit on the upload step is processed in one run; a larger history is split by date or by kind. A few thousand units takes a minute or two; the page stays open and reports as it goes.
Open Inventory and Products and spot-check a handful of records against the source. The analytics Inventory tab shows the on-hand count and the cost basis the import produced; if the total does not match what you expected, the batch record shows which rows were skipped and why.