Importing products from CSV
Distribu ships with a full CSV importer so you can bring your existing catalog over from another system, or update hundreds of products in one shot. It's upsert by SKU — if the SKU exists in your catalog, the row updates it; if not, a new product is created.
Open it from Inventory → Import CSV, or go directly to
/dashboard/inventory/import.
The three-step flow
- Upload your CSV file. Max 2 MB (~20,000 rows), max 5,000 rows per import.
- Preview — Distribu parses the file, detects columns, and shows you what would change: how many rows would be created, updated, or left unchanged.
- Apply — click Import to run it. Everything happens in one database transaction: either the whole batch succeeds, or nothing is written.
You can re-upload as many times as you want without touching your data — nothing is written until you hit Import on the preview.
Columns
The importer recognizes eight columns:
| Column | Required? | Notes |
|---|---|---|
sku | Yes | Used to match rows. Duplicates within a single file are rejected. |
name | Yes | 1–200 chars. |
price | Yes | Number ≥ 0, up to 2 decimal places. |
stock | Yes | Whole number ≥ 0. |
description | No | Up to 2000 chars. Empty → null. |
category | No | Up to 100 chars. Empty → null. |
unit | No | Defaults to each if empty. |
isActive | No | Boolean. Defaults to true if empty. |
See Products CSV format for the full column reference and a downloadable template.
Column auto-detection
Distribu auto-maps common header variations to the canonical name. For
example, sku, item_code, product_code, and partnumber all map to
sku. If your source CSV uses any of these, the mapping just works:
- sku —
sku,itemcode,item_code,productcode,product_code,itemnumber,item_number,itemid,item_id,partnumber,part_number - name —
name,product_name,title,item_name,product - price —
price,unit_price,list_price,cost_price,cost,sell_price,msrp - stock —
stock,quantity,qty,on_hand,inventory,available,stock_level
…and similar lists for the other four columns.
Manual mapping
If a required column can't be auto-detected, Distribu shows dropdowns so you can pick the right source column by hand. Once you confirm the mapping, the preview re-runs with it. The mapping is carried through to the apply step — no re-uploading.
Boolean values for isActive
The importer is forgiving about how you represent booleans:
| Value | Interpreted as |
|---|---|
true, 1, yes, y, active | true |
false, 0, no, n, inactive | false |
| empty | true |
| anything else | true |
Preview view
Once you upload, you'll see:
- A summary: N to create / M to update / K unchanged.
- Up to 50 sample rows showing the action Distribu would take on each.
- A list of any issues — row number + error message for anything that failed validation.
- A warning if running the import would exceed your plan's product limit.
If there are issues, the Import button is disabled. Fix your CSV and re-upload.
How upsert works
For each row in the file, Distribu looks up existing products in your company by SKU:
- Not found — create a new product with all the fields from the row.
- Found and every field matches — skip. Counts as "unchanged".
- Found but something differs — update the existing product. Fields
compared:
name,description,category,unit,price,stock,isActive.
Existing products that aren't in your CSV are left alone. Importing a 100-row file doesn't delete the other 900 products in your catalog.
SKUs are scoped to your company. The importer only looks at products that belong to you, even if another distributor on Distribu happens to use the same SKU.
Limits
| Max file size | 2 MB |
| Max rows per import | 5,000 |
| Max rows per bulk UI action | 1,000 |
Plan maxProducts | Enforced on create rows only. Updates never count against the limit. |
For catalogs larger than 5,000 rows, split the file and import in batches.
Downloading a template
The import page has a Download template link, or hit
/dashboard/inventory/import/template
directly. You'll get a CSV with the canonical headers and two example rows —
a good starting point for laying out your own file.
Exporting the current catalog
The reverse of import: from Inventory, click Export CSV to download your full catalog as a CSV with the same 8 columns. Round-trip safe — you can export, edit in Excel, and re-import.
The export endpoint is also available directly at
/dashboard/inventory/export. It streams the
current state, no caching, so you always get the latest data.
Audit trail
Every successful import writes a single audit-log entry with action
ProductBulkImported, metadata { created: N, updated: M }, and the user
who ran it. Visible in
Settings → Audit log.
That's the end of the Products & Inventory section. Next up: Customers covers the customer side of your business — adding accounts, price overrides, and storefront access.
