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 --> levelHow to use it
- Open Inventory and select the Products tab.
- Click New Product, enter a name, and optionally set a category.
- Expand the product and click Add variant for SKU, cost, price, UoM, barcode, and default vendor.
- Read per-variant stock badges for on-hand and available across locations.
- Click the adjust icon to open the Adjustment Modal — enter +/- quantity, pick a location, choose a reason.
- Use search and All / Manual / Shopify / Archived filters in large catalogs.
- 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.