Chapter 20
Import & Export
20.1 Importing data#
- Open Import from the relevant module (Categories, Products, Suppliers, Customers, Purchases, or Sales).
- Click “Download Template” and fill it in — its sample rows show every accepted variation; replace them with your own data.
- Drag your completed CSV onto the upload area, or click to browse (max 5 MB).
- Choose what happens “If Duplicate Found”: Skip Duplicate, or Update Existing (Categories, Suppliers, and Customers only — blank cells keep the current value, they never erase it).
- Click “Preview Import →”, review the rows the system found, and confirm to commit them.
| Import type | Required columns and key rules |
|---|---|
| Categories | name. Matched by name; updating only changes the description. |
| Products | sku, name, category, supplier, selling_price. Category and supplier must already exist (supplier by company name or code). current_stock is set at your active branch. Blank cost_price = 0, reorder_level = 10, unit = pcs. |
| Suppliers | company_name — plus phone for a new supplier, which can't match another supplier's phone. Optional tin. |
| Customers | full_name, phone. Matched by phone, which must be unique. Optional tin. |
| Purchases | supplier, sku, quantity, unit_cost. Rows sharing supplier + invoice_number become one purchase. payment_method is cash / mobile / bank / cheque / credit (blank = credit). payment_account is an account name or number (blank = your branch's account for that method). Stock is received at your active branch. |
| Customer opening debts | customer, amount, owing_since. One row per amount owed; customer is a phone or customer code. See section 6.3. |
| Supplier opening debts | supplier, amount, owing_since. Supplier by company name or code. See section 7.3. |
| Sales | sale_date, sku, quantity. Sales made between a stock count and your first day on IBS; rows sharing a receipt_number become one sale. Optional truck_number, driver_name, and driver_phone while truck & driver is on. Needs Back-date Sales. See section 4.7. |
When truck & driver recording is on, Purchases also take optional truck_number, driver_name, and driver_phone columns — taken per invoice from its first row that has them (see section 11.5).
When batch tracking is on, Products also take optional track_expiry (yes/no), batch_number and expiry_date (YYYY-MM-DD) columns, and Purchases take batch_number and expiry_date. A blank expiry date means “unknown expiry”, and one purchase can list the same product on several rows, one per batch.
Customers and Suppliers also take an optional tin column. It's tidied the same way as on screen (section 12.5), and a TIN that isn't valid marks the row as an error in the preview.
When selling services is on, Products also take optional type (product or service — blank means product for a new row, unchanged for an existing one) and price_at_sale (yes or no) columns. A service needs no supplier and can't have current_stock or a batch, and a price-at-sale service may have a selling_price of 0. A product that has stock can't be imported as a service, and the purchase import refuses services.
When branch prices are on (section 8.6), Products also take an optional branch_selling_price column: the price at your active branch. Blank keeps that branch's price; standard puts it back on the standard price. An existing product's selling_price can then be left blank to keep its standard price, and only company-wide users can change it. To set prices for several branches in one file, use the Branch Prices import (Inventory → Products → “🏬 Branch Prices”), with the columns sku, branch, and price.
20.2 Exporting data#
“Export” buttons appear throughout the system — on Customer Transactions, Account Ledgers, the Audit Log, and most Reports (including Stock by Branch and the Expiry Report) — and download a CSV of whatever is currently filtered on screen. The sales export lists each line item once, with that line's share of any whole-cart discount, and — while truck & driver recording is on — truck_number, driver_name, and driver_phone columns. The Reports → Sales Report export gets matching Truck, Driver, and Driver's Phone columns. Both the sales export and the purchases export (Finance → Purchases → “📤 Export Filtered”) have net_line_total, tax_percent, tax_amount, and gross_line_total columns; the purchases export also gives unit_cost_excl_tax. The customer and supplier exports include a tin column, and the Tax Report has its own export (section 19.1). While selling services is on, the products export has type and price_at_sale columns; the stock exports leave services out.
While branch prices are on, the products export has a branch_selling_price column for your branch, and the Branch Prices page has “Download Current Prices” for every branch you can price (section 8.6).
Users who can't see profit (section 19.4) get the Stock Valuation, Top Selling, and Dead Stock exports without their profit columns, and can't export Profit & Loss or Profit Margins.