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 per variant
- Standard cost history: dated standard costs per variant for standard-cost COGS
- Automatic profit margin (price − cost) per variant
- Unit of measure per variant (EA, LB, OZ, G, KG, ML, L, CASE, BOX)
- 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 a required reason; they post to the books and update cost lots
- Scan / SKU lookup in the toolbar jumps straight to a variant's product
- Product categories: Finished Goods, Intermediate Goods, Raw Materials (Ingredients), Packaging
- Bulk unit-cost update via CSV export → preview → apply
- Opening stock via Initial Inventory on a new variant or the Import from Spreadsheet wizard
- Convert a standalone product into a variant of another product
- Optional expiration tracking (FEFO instead of FIFO) per product
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 and expiration tracking.
- Expand the product and click Add variant for SKU, manufacturer SKU, barcode, price, cost, unit of measure, default vendor, inventory category, and initial inventory.
- Read per-variant stock badges for on-hand and available across locations.
- Click a product row for its detail page, then Adjust on a variant under Stock by Location: choose Add units or Remove units, enter a quantity, pick a location and a reason.
- Use search, All / Manual / Shopify / Archived, the Category buttons, Low stock, and Grouped / Flat SKUs in large catalogs.
- The detail page also shows Standard cost history, Vendor Sources, Related Recipes, Reorder Settings, Active Purchase Orders, and recent activity.
- Click Unit Costs to export variant costs, edit them in a CSV, and upload to preview and apply.
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 Standard cost history to record dated standard costs when your COGS basis is standard cost (see Production & Costing).
- Archive instead of delete — history and stock ledger stay intact.
- Load opening stock with Initial Inventory or the spreadsheet import instead of adjustments, which post to the books.
- 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 |
A manual removal larger than the available quantity is rejected. Stock can still show negative if sales outrun what was received, which is flagged as oversold.
Adjustments
Manual adjustments require a reason: Shrinkage, Damage, Expired, Count variance, Theft, Transfer correction, Customer return, Receipt correction, Found inventory, or Other. Each change updates the stock level and is recorded in the stock history. When the variant has a cost, the adjustment also posts a journal entry between Inventory and Inventory Adjustments (or your mapped category ledgers), removing cost lots on a decrease and adding one on an increase.
Bulk unit cost: export active variants as CSV, edit the New unit cost column, preview, and apply. Convert to variant (on a product row) moves a product's variants under another product and archives the source. Archive hides a product or variant and can be reversed with Restore; a variant with no stock, history, or order, shipment, transfer, or count lines can also be deleted permanently.
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.