Skip to main content
Instead of creating records one at a time, most Retail master-data screens support bulk import from a CSV file. It’s the same generic flow used everywhere else in DuitPOS (Products, Tax, Categories, and more) — if you’ve imported one entity before, this’ll feel identical.
Bulk import dialog showing template download, upload, and preview steps

The flow

1

Click Import on the list page

Available on Units of Measure, Currencies, Exchange Rates, Parties, and Chart of Accounts.
2

Download the template

A CSV with the correct column headers and one example row, so you know exactly what’s expected.
3

Fill it in

Add one row per record. Reference columns (like a parent account’s code) must match an existing record’s code exactly.
4

Upload it

The system parses the file and shows a preview — every row marked valid or invalid, with the specific reason for anything invalid, before anything is actually saved.
5

Fix and re-upload, or confirm

Fix any flagged rows in your CSV and re-upload, or confirm to import just the valid rows.
6

Check Import History

Once confirmed, the import runs in the background — check Import History for the final count of created/updated/failed rows, with per-row error detail if anything failed.

What each entity’s import supports

Importing a product’s stock settings alongside the product

If your account has the Retail module enabled, the existing Product import (Catalog → Products → Import) automatically gains extra optional columns: track_stock, uom_code, track_batch, track_expiry, reorder_level, reorder_qty, cost_price, is_sales_item, is_purchase_item. Fill these in on the same row as the product itself, and its Stock Profile is created or updated automatically — no separate import step needed. Leave them blank for products you don’t want to stock-track.
These extra columns only appear in the template and preview if your tenant has Retail enabled — a non-retail tenant’s Product import looks exactly as it always has.

Frequently Asked Questions

That row is marked invalid at the preview stage with a clear message (e.g. "XYZ" not found in uom_code) — it won’t be imported, but the rest of the file still can be.
Yes, for entities matched by a unique code (UOM, Currency, Party, Chart of Accounts) — if a row’s code already exists, it updates that record instead of creating a duplicate. Exchange Rates are the exception (always inserted fresh, since multiple rates over time are expected).
No — bulk import is for master data only. Transactional documents (POs, invoices, stock movements) have their own draft → submit lifecycle and aren’t a good fit for a flat CSV row.

Units of Measure

Try the import flow here first — simplest entity

Stock Profile

Set stock settings via the Product import

Overview

Back to the module overview