CSV import
Bring your existing inventory in. Auto-mapping for English + Swahili headers, validation, dry-run preview.
Switching from another POS? You don't have to retype every product. Omnix's CSV import understands almost any header shape — English, Swahili, abbreviated, or your old system's quirks.
Get the template
Inventory → Import → Download Template. The CSV has these columns: - name, sku, barcode, unit, buying_price, selling_price, initial_stock, reorder_level, tax_rate
Required: `name`, `buying_price`, `selling_price`. Everything else is optional.
Auto-map
Drop your existing CSV in even if the headers don't match the template. Omnix auto-maps:
| You wrote | Maps to | |---|---| | name / product / item / Bidhaa / jina | name | | buy / cost / wholesale / Bei ya Kununua / gharama | buying_price | | sell / price / retail / Bei ya Kuuza / bei | selling_price | | qty / quantity / stock / Idadi / Akiba | initial_stock | | sku / code / Msimbo | sku | | ean / upc / barcode | barcode | | unit / uom / pack / Kipimo | unit | | tax / vat / Ushuru | tax_rate | | reorder / par / min_stock | reorder_level | | category / type / Aina | category | | notes / description / Maelezo | description |
Casing, whitespace, punctuation are normalised — `Bei ya Kuuza!`, `bei_ya_kuuza`, `BEI YA KUUZA` all map identically.
Dry-run preview
After upload, Omnix shows a row-by-row preview with errors highlighted (missing fields, invalid prices, duplicate SKUs). Nothing writes to the database until you click Import. You can fix the CSV and re-upload as many times as you need.
Errors you might hit
- Invalid buying_price: empty cell or non-numeric. Required.
- Missing required columns: name + buying + selling are mandatory; the rest are optional. The error message lists which canonical columns we couldn't find.
- Unrecognised columns: silently dropped with a warning toast. If you wanted us to import them, rename to a known synonym.
After import
Each imported product becomes a single row in the products table with: - a new UUID - `buying_price` + `selling_price` written to the default price list - `initial_stock` written as one batch dated today - `tax_rate` defaulting to 16% if not provided
You can immediately ring sales with the imported stock.
See also
- [Receiving stock](/docs/receiving-stock) — for ongoing stock additions
- [Inventory](/docs/inventory) — managing what's already in
Was this helpful?
If something is wrong or missing, WhatsApp the owner. We update the docs every time a real question comes in.
More in Core
Point of sale
The full checkout workflow — search, scan, holds, returns, split payments, M-Pesa, card, and the customer display.
Inventory & variants
Add products, manage variants (sizes and weights), bulk-import from CSV, run stock takes, and track batches and expiry.
Cloud backup & restore
Turn on encrypted offsite backups, schedule them, and restore your database on a new machine.