Products & Variants

Manage your full product catalog. A product is the parent container; a variant is the trackable SKU that moves through inventory. Each variant carries its own cost, price, barcode, unit of measure, and per-location stock. Purchase orders, transfers, production, and COGS all read from this catalog.

Key capabilities

  • Products and variants with create, edit, and archive (archiving preserves history)
  • Per-variant SKU, manufacturer SKU, and barcode (UPC/EAN/QR)
  • Unit cost and price, plus optional sub-cent precise cost for bulk inputs
  • Automatic profit margin (price − cost) per variant
  • Unit of measure per variant (EA, LB, G, KG, OZ, …)
  • Default vendor per variant for reorder suggestions and draft POs
  • Per-location on-hand and available quantities with reorder point and quantity
  • Manual stock adjustments with required reason codes
  • Barcode/SKU lookup for receiving, cycle counting, and POS
  • Bulk unit-cost update via CSV export → preview → apply
  • Set opening on-hand quantities without adjustment journal entries
  • Convert a standalone product into a variant of another product
  • Optional expiration tracking (FEFO instead of FIFO)

How it works

Products group related SKUs. Each variant owns cost, price, and a stock level per location. Adjustments and receipts update the per-location level.

flowchart TD
  product["Product"] --> v1["Variant / SKU"]
  product --> v2["Variant / SKU"]
  v1 --> level["Stock per location"]
  level --> reorder{"Below reorder point?"}
  reorder -->|"Yes"| alert["Low-stock alert"]
  v1 --> adj["Manual adjustment"]
  adj --> level

How to use it

  1. Open Inventory and select the Products tab.
  2. Click New Product, enter a name, and optionally set a category.
  3. Expand the product and click Add variant for SKU, cost, price, UoM, barcode, and default vendor.
  4. Read per-variant stock badges for on-hand and available across locations.
  5. Click the adjust icon to open the Adjustment Modal — enter +/- quantity, pick a location, choose a reason.
  6. Use search and All / Manual / Shopify / Archived filters in large catalogs.
  7. Click a product row for detail: linked POs, per-location stock, and recipes.

Pro tips

  • Products group items (T-Shirt); variants are what you stock and sell (Medium / Blue). Stock lives on the variant, per location.
  • Set a default vendor on each variant — reorder suggestions need one.
  • Use precise unit cost for commodity inputs priced in fractions of a cent.
  • Archive instead of delete — history and stock ledger stay intact.
  • Use Set opening quantities or spreadsheet import for initial loads without adjustment entries.
  • Enable expiration tracking on perishables for FEFO consumption.

In-depth guide

Stock fields

Field Meaning
On hand Physical units at the location (decimals supported)
Available Allocatable units
Reorder point Triggers low-stock alert when available falls below
Reorder quantity Suggested reorder amount

Levels are not floored at zero — negative on-hand from corrections is allowed and surfaced as an oversell signal.

Adjustments

Manual adjustments require a reason: Shrinkage, Count variance, Damage, Theft, Expired, Transfer, Return, Receipt correction, Found, or Other. Each change updates the stock level and is recorded in the delta ledger.

Bulk unit cost: export active variants as CSV, edit the New unit cost column, preview, and apply. Opening quantities write absolute on-hand per location without inventory-adjustment journal entries. Convert to variant merges a product's variants under another product and archives the source.

Variants with a Stripe connection mirror to Stripe Catalog. Shopify and Square IDs link variants for inventory sync. Barcode/SKU lookup resolves a single non-archived variant for scanner-driven flows.