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

  1. Upload your CSV file. Max 2 MB (~20,000 rows), max 5,000 rows per import.
  2. Preview — Distribu parses the file, detects columns, and shows you what would change: how many rows would be created, updated, or left unchanged.
  3. 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:

ColumnRequired?Notes
skuYesUsed to match rows. Duplicates within a single file are rejected.
nameYes1–200 chars.
priceYesNumber ≥ 0, up to 2 decimal places.
stockYesWhole number ≥ 0.
descriptionNoUp to 2000 chars. Empty → null.
categoryNoUp to 100 chars. Empty → null.
unitNoDefaults to each if empty.
isActiveNoBoolean. 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:

  • skusku, itemcode, item_code, productcode, product_code, itemnumber, item_number, itemid, item_id, partnumber, part_number
  • namename, product_name, title, item_name, product
  • priceprice, unit_price, list_price, cost_price, cost, sell_price, msrp
  • stockstock, 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:

ValueInterpreted as
true, 1, yes, y, activetrue
false, 0, no, n, inactivefalse
emptytrue
anything elsetrue

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 size2 MB
Max rows per import5,000
Max rows per bulk UI action1,000
Plan maxProductsEnforced 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.