Omnix
All docs
Core

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.

CSV import — docs · Omnix