All docs

Uploading data

The full reference for file formats, column mapping, and auto-clean.

Tropix reads CSV and XLSX files. This page lists every column we look for, what it does, and how to map your ERP's column names.

Required columns

These four are non-negotiable:

FieldWhat it is
skuStable identifier. We use this to dedupe across uploads.
descriptionWhat the SKU is, free text.
qty_on_handCurrent on-hand units. Can be negative (= backorder).
unit_costCost per unit. Used for inventory value, excess value, recovery estimates.

Plus you need sales history — either total_sales_12m (one column with the trailing 12-month total) or monthly columns (jan_sales through dec_sales). Monthly columns are preferred because they let the forecast pick up seasonality and trend.

Optional columns (use them if you have them)

FieldWhat it improves
categoryLets you filter / group; powers category-level recovery rates in markdowns.
supplierPowers the supplier scorecards module.
locationPowers multi-location transfers, location scorecards.
lead_time_daysPowers safety stock + ROP. Defaults to 30 if missing.
moqPowers the MOQ-overbuy flag. Defaults to 1.
current_ropWe'll show your current value next to ours so you can compare.
current_safety_stockSame.
last_sale_dateUsed for deadstock-window detection.
last_purchase_dateUsed for some markdown logic.
expiration_date, shelf_life_daysPowers the PRO Fresh module.
case_qty, case_cubic_ft, pallet_qtyPowers the PRO Space module.

Column mapping

When you upload, Tropix auto-suggests a mapping from your column names to ours using a three-tier match:

  1. Exact field name match (sku, unit_cost)
  2. Exact synonym match (we know Item ID, QOH, Stock On Hand, etc.)
  3. Loose substring match (3+ chars)

You can override any auto-suggestion and ignore columns you don't want mapped. The mapping is saved as a workspace-level template — next upload auto-applies it.

Multi-file upload

Drop multiple files at once. The merge-mode picker asks how to combine them:

  • Combine slices — different headers OK, all rows concatenated. Same SKU+location across files shows up as a duplicate in the auto-clean step.
  • Use newest only — identical headers across files (typically monthly snapshots), use only the latest.

Each row in the merged dataset carries a __source_file tag so you can audit provenance later.

Auto-clean review

Between mapping and validation, the prep step runs and surfaces:

  • Phantom SKUs — catalog rows with zero on-hand AND zero sales (and no monthly sales). Excluded by default. Different from deadstock (which has on-hand > 0).
  • Backorder rows — qty_on_hand < 0. Kept as active reorder candidates.
  • Duplicate SKU + location — merge via sum (default) or keep-first / keep-last.
  • Numeric issues — cells that should be numbers but aren't. The validator will block on these.
  • Required cell defaults — blank qty / cost / total_sales filled with 0 so the validator passes.
  • Whitespace — silently trimmed.

Validation

After auto-clean, the validator catches blocking issues:

  • Blank SKU or description
  • Non-numeric required fields
  • No sales history at all (no total, no monthly)

Warnings (non-blocking) include:

  • Missing lead time, MOQ, category, supplier
  • Negative qty (we keep it; you'll see a count of likely backorders)
  • Qty present but unit cost = 0 (inventory value will be 0)
  • All-zero sales rows (likely deadstock candidates)

File-size limits

Practical limit: ~50,000 rows per file in the browser. Larger uploads will work but may take longer; we're working on a streaming server upload path. Ping us if you need it.