← Help

Products, variants and variant axes

Products, variants, bills of materials and finished stock.

What a product record holds

A product is something you sell, for example an articulated dragon or a desk organizer. Its record holds the price, the variants and the rule for how an order takes its stock.

The product form opens on Details, and more tabs show when they apply: Channel prices once you have a sales channel, Stock on a saved product (or once you have a sales channel), and Materials unless the product is From stock. Details holds the name, a Price, an optional SKU, the filament and printer (when the product has one variant) and a description; a product with several variants sets filament and printer per variant on the Materials tab. How orders use stock, the variant axes and the variants list sit under More: stock and variants on the Details tab. More starts closed on a new product and starts open when you edit a product that already uses them.

How orders use stock decides how an order line for it moves stock: Made to order consumes the bill of materials each time one is ordered and tracks no finished stock; From stock deducts finished goods from what is on hand and does not track filament; Hybrid (stock first, then print) sells from stock while it lasts and makes the rest to order from the bill of materials. Orders never sell a Made to order product from the shelf, so choose Hybrid to sell pieces you printed ahead.

Duplicate on the Products list copies a product as a starting point for a similar one. Free workspaces may hold 5 products and Pro 30; Farm is unlimited.

Filament, Inventory and Products: three different kinds of stock

FoxTrack tracks three different kinds of stock, each on its own page. Filament is spools, tracked by weight in grams: the plastic you print with. Inventory is everything else you buy in to build or pack an order, such as inserts, magnets or shipping boxes, tracked by count. Neither is something you sell on its own; both are raw materials. This page is where a finished, sellable item's own stock lives: for a product set to From stock or Hybrid, its stock is tracked per variant on the Stock tab, separate from the materials that went into it. If you make items ahead of time to sell from a shelf, add the hardware and packaging you used on the Inventory page first and link it to the bill of materials here. Then set how many finished units you have for sale on this page, not on the Inventory page. The bill of materials on a variant is what ties spools and parts to it, so saving an order deducts what it lists.

When you need variants

A variant is one sellable version of a product, such as Small, Medium and Large of the same model. If everything you sell of a product is identical, the single Default variant is enough. Variants each carry their own name, SKU, price, stock and bill of materials. Add variants by hand with Add variant under More on the Details tab, or generate them from axes. Each variant row has a name, a Price override, its In stock count (the default pool), an optional SKU and a Low-stock alert.

Variant axes and how they work

A variant axis is a dimension along which variants differ: Size with values Small, Medium, Large, or Height with 20 cm and 30 cm. Define axes on the product (under More on the Details tab) by naming each one and listing its values, then press Generate combinations to add one variant for every combination. Three sizes and two heights give six variants. One axis can be marked as the pricing axis so each of its values carries a price override, for example 30 cm at 12 and 20 cm at 9 in your currency; generated variants inherit those prices. Generate combinations never removes or overwrites existing variants, so after adding a value you can press it again and only the missing combinations are added.

SKUs and prices across variants

Each variant has its own optional SKU and a Price override. Set the Price on the product and override it per variant, or use a pricing axis to seed the overrides. Clear a variant's override to fall back to the product's Price. The product search on an order line, on a quote line (Add product) and on an invoice (Add from products) finds a product by its SKU as well as its name, and shows each SKU beside the name: type or scan a SKU and press Enter to pick that product. Per sales channel prices are set on the Channel prices tab: leave a channel's price blank to use the variant's normal price for that channel. Prices are entered in your workspace currency as ordinary decimals, for example 5.00.

Stock tracked per variant and per location

Each variant's stock is counted per location: the default pool for what you hold at your own place, plus a row for each sales channel (a store, a market) for what sits there.

The Stock by Location table on the Stock tab has one row per variant and one column per location: the default pool, then each sales channel. With many variants, type in the Filter variants box to narrow the rows. An order for a channel takes from that channel's row, and from the default pool only when the channel has no row of its own; an order with no channel takes from the default pool.

The variant's Low-stock alert (under More on the Details tab) warns when the total across all locations drops to that number. Turn on the Restock levels switch to set Min (flag a restock below this) and Target (refill up to this; blank means up to Min) per channel and for the default pool (a pool run refills it, see Replenishment; the Replenishment button on the Products page shows as soon as you have a product, so no Min or Target is needed to open it); both can be typed on a variant that is not saved yet and are written with the product. The Target cannot be lower than the Min: saving says so until you raise the Target or lower the Min. Set all, next to a channel name, applies one Min and Target to every variant shown. Transfer, on a variant's row, moves that variant's stock from one location to another; save the product first to enable transfers. The Replenishment page shows every variant's stock per location side by side. To print pieces for your own shelf without setting any levels, use Print for stock on the Orders page.

To fix a count by hand (after a stock take, say), type the real number in the variant's cell in Stock by Location, or in its In stock box under More on the Details tab, and save the product. That In stock count is the default pool only; Total quantity adds what sits at your stores (for example 9 in the default pool + 13 at stores = 22).

To see what moved a variant's count (orders, restock runs, transfers, imports, edits by hand), press History by the variant's name on the Stock tab of a saved product. A transfer shows twice, once where it left and once where it arrived, and the first row of a location is its opening balance, so the rows add up to what it holds. Units a restock run has taken from the pool but not delivered yet are named on order lines as held (12 held by RPL-0007) until the run is completed.

How variant names are joined: the separator

Settings → Products and stock → Variant name separator decides what goes between a product name and its variant name on order, quote and invoice lines, in the fulfillment queue and on packing slips (Vase Sinus / 30cm or Vase Sinus, 30cm), and between the axis values when Generate combinations names a variant. Choose slash, dash, hyphen, comma, bar or a space. Changing it does not rename variants you already generated; it applies to new combinations and to how names are joined from then on.

Ordering generated variants: Group by and Sort variants

Generated names always read in axis order (Height then Color gives 30cm / Silk Pink). Which axis changes fastest down the list is a separate choice: with two or more axes, the Group by selector next to Generate combinations names the axis that changes slowest. Sort variants re-orders the rows you already have the same way, hand-added rows staying at the end in their own order. The list order is saved with the product and is the order pickers show. Generating combinations into a brand-new product also removes the placeholder Default row when it is still empty; a saved Default variant is never removed for you.

Bill of materials per variant

On the Materials tab, each variant can list the filament (grams per unit) and inventory items (quantity per unit) it consumes. Saving the variant replaces its previous list. The product's cost is the linked materials, plus the waste % and overhead % of that material from Settings → Quoting and tax (the same as a quote adds), plus the variant's power, machine wear and labor. Print time (hours and minutes, on the Details tab of a one-variant product) and a printer set the power and machine wear; labor needs Labor minutes (Materials tab, Advanced) and a labor rate in Settings → Quoting and tax, and until the rate is set the profit leaves labor out. The list is also what a Made to order or Hybrid order line consumes when it is saved. A Large dragon can need 25 g of PLA while a Small needs 15 g. On an order, materials added directly to the line override the variant's list for that order only. An order line keeps the list it was saved with: changing the variant's list later applies to new order lines, not to orders already placed.

How products connect to orders

Choose Product as the order type and pick a product and variant on each line. Saving the order moves stock according to the product's How orders use stock setting: From stock lines deduct finished goods (never below zero), Made to order lines consume materials, and Hybrid lines take what the pool holds and print the rest, with a From stock field on the line to override the split. Deleting the order or removing the line puts the stock back. Each line remembers the product's mode and materials from when it was saved, so changing a product's mode or its bill of materials later leaves old orders as they were; a line's stock moves again only when the line itself changes (quantity, product, variant or materials), when the order's sales channel changes, or when the order is canceled or brought back. A product that orders use cannot be deleted: Delete offers Archive instead, which keeps it on its old orders. Product names and prices only reach an AI provider if the Share business data permission is on.

Deleting a product

Owners and admins can delete a product; members cannot, and the Delete button does not show for them. Open the product and press Delete at the foot of the form, then Delete product to confirm. To delete several at once, check them on the Products page, press Delete at the bottom of the list, then Confirm delete. Deleting removes the product with all its variants and their stock, and it can't be undone.

A product that is on orders, restock runs or sales history cannot be deleted, because those would lose track of the stock they used. The confirm box says so and offers Archive product instead (from the list, the message says to open the product and press Archive). Archive, at the foot of the form, is open to every member: the product leaves the Products list and the product picker for new lines, and everything that used it stays exactly as it is. Turn on Show archived on the Products page to see archived products, and press Unarchive on one to sell it again.

Importing and labeling products

Import on the Products page loads products from a CSV file with column mapping. Each product row has a label button that downloads a QR label; scanning it opens the product in FoxTrack. If someone else saved the same product after you opened it, Save says the product was changed by someone else: Load the latest drops your edits and reloads theirs, Keep mine saves yours over theirs.

Still stuck?

Email info@foxtrack.studio or ask on the FoxTrack Discord. Inside the app, the question mark in the top bar sends a bug report or feedback.