About COGS snapshots and true profit
How Trackost turns a fulfilled order into COGS, shared fees, true profit and margin, and why an old order's COGS never changes when your costs do.
The short answer
- A line's COGS is its quantity times the product variation's weighted-average cost as shown, to the cent, at the moment you fulfill the order. It is fixed from then on.
- A variation with no stock and no cost from real stock is costed from its recipe instead. A sale records $0.00 of COGS only when Trackost has no cost for it at all, and its margin then reads far too high.
- Until an order's cost is recorded, its cards show an estimate, marked Est.: what fulfilling it would record at today's cost.
- True profit is revenue − fees − COGS, and margin is true profit divided by the revenue of the lines that have a COGS. Shipping and tax are neither.
When is COGS worked out?
For an order you enter, when you click Fulfill & mark shipped, and only then. Fulfilling looks up the current cost of each line's product variation as shown, to the cent, multiplies it by the quantity and stores the result on the line. That stored figure is the snapshot.
Until then the order has no COGS of its own, but its cards show an estimate. They read Est. COGS, Est. true profit and Est. margin, each marked Est., with the hint 'Estimated at today's cost; recorded when the order ships'. The estimate is worked out the way fulfilling would work it out at this moment, so it is what fulfilling now would record. It moves when your costs move, and it never reaches your reports. A line whose product has no cost at all is left out of it, and the cards say how many lines have no cost yet. When every matched line is like that, the cards read 'No cost yet'. A line that isn't matched to a product is left out too.
The lines table under the cards shows the same estimate line by line: each line's Fees, COGS and Profit marked Est. A line whose product has no cost reads 'No cost yet' in COGS and Profit, and a line that isn't matched to a product reads '—'.
The sale's COGS and revenue are dated on the ship date you pick beside the button, so that is the day the sale lands in your profit reports.
An order imported from Shopify is costed the same way, at a different moment. When Shopify marks the order fulfilled, Trackost records its cost by itself on its next sync, dated when Shopify fulfilled it. It does so only for an order fulfilled after you linked the store, and it holds back an order with a line that has no cost yet. The order's page then says 'Not recorded: a line has no cost yet.' and, when a recipe would fix it, links to that product's recipe. On a Shopify order the button reads Record cost now instead: it records the cost in Trackost at once and changes nothing in Shopify. A note under the order's status says which applies. Connecting a sales channel (Shopify, Etsy or Faire) isn't covered in this help center yet. Email support@trackost.com and we'll walk you through it.
Where does the unit cost come from?
Every product variation carries one unit cost: the weighted average of what the stock you hold cost you.
- For a product you make, completed batches set it. A batch's unit cost is the materials it used, at their own weighted-average costs, plus labor, the recipe's minutes at your labor rate. Each batch is averaged in with the stock you already hold.
- For a product you buy in and resell, the cost basis you give when you adjust its stock sets it.
A variation with no stock, whose cost never came from real stock, is costed from its recipe when it sells: the recipe's Unit cost (incl. labor) at that moment, materials plus labor. That sale also sets the variation's unit cost from the recipe's cost: exactly that figure when nothing was on hand, a blend that keeps your stock's value right when the count was already below zero. Each later sale does the same until a batch or an adjustment brings in real stock. Fulfilling such an order shows 'Costed from the recipe'. A variation with no stock, no cost and no recipe sells at $0.00, and fulfilling shows 'Recorded with no cost'.
A batch of another product that uses a variation while its count is zero or below costs it from its recipe in the same way, and sets the variation's unit cost from that cost, even when its old cost came from real stock. Canceling the started batch puts the units back at the cost the batch took them at.
The recipe's flat overhead is not part of a batch or of a sale costed from the recipe, so it never reaches COGS. You see it on the recipe's With overhead: line and in Full cost on Pricing.
Apart from that recipe case, selling doesn't change the unit cost. A return you put back into stock comes back at the cost it sold at, and blends into the unit cost.
What the Cost breakdown card shows
Under an order's lines, a Cost breakdown card shows what each matched line costs per unit, from its recipe at today's prices. A line not yet costed has a caption saying where its cost comes from: 'From your stock's average cost', 'From the recipe (no stock yet)', or the reason it has no cost. When the line's recipe is the fix, a link under the reason opens it: Build its recipe for a product with no recipe, Open its recipe for one that can't be costed or adds up to zero. The table lists each component with how much one unit uses, its unit cost and its cost, then Labor, the Per unit total and the total for the line's quantity. A component with no cost yet reads 'No cost yet'.
- On a line costed from your stock's average cost, the recipe is there for reference, and a sentence compares the two, for example 'This order uses your stock's average cost of $2.85 per unit. The recipe costs $7.52 per unit at today's prices; new batches move the average toward it.'
- On a line whose cost is recorded, the table shows only while today's recipe still explains that cost. Otherwise the line reads, for example, 'Recorded at $3.29 per unit when it was costed.'
- A line whose product has no recipe reads 'No recipe, so there's no material breakdown.'
- A recipe with a flat overhead gets a note, for example 'Flat overhead of $0.20 per unit isn't part of COGS. It's included in Full cost on the product page.'
The card's link, How COGS and true profit work, opens this article. A team member without money access doesn't see the card.
How are fees spread across the lines?
An order carries one Fees amount: what the sale cost you in payment, platform or market fees. When you fulfill it, Trackost splits the fees across the order's lines in proportion to each line's revenue, to the cent. A line with a third of the revenue takes a third of the fees. Each line's share is in the Fees column of the order's lines table.
The fees are not part of the order's Total, and they are not in COGS. They come off true profit.
An order imported from a connected shop can list its fees by type in a Fees breakdown card; a manual order has only the one amount. Connecting a sales channel (Shopify, Etsy or Faire) isn't covered in this help center yet. Email support@trackost.com and we'll walk you through it.
True profit and margin
For each line, true profit is its revenue, minus its share of the fees, minus its COGS. The order's True profit card adds up the lines that have a COGS. Margin is that true profit divided by the revenue of the same lines. A line that isn't matched to a product yet is in the Revenue card, but not in True profit or Margin, so it doesn't pull the margin down.
Are shipping and tax part of the profit?
No. Revenue is the price of what you sold: each line's unit price times its quantity, rounded to the cent. The shipping and tax you enter are part of the order's Total, which is what the buyer paid, but not of its revenue, COGS or profit. The Revenue card's hint reads 'Products after discounts', followed by the order's total.
A manual order has no discount. On an order imported from Shopify, an order-wide discount is spread over the lines, and such a line reads 'incl. order discount' under its revenue.
A worked example from the sample workspace

SEED-1002 sells 2 Lavender Candles, Lavender / 8oz, at $6.00 each, with $0.60 of fees. The shop had 120 of those candles in stock at $2.85 each. Shortly before the order shipped, a batch of 12 more was made at $7.66 each, which moved the candle's weighted-average cost to $3.29.
- Revenue: 2 × $6.00 = $12.00.
- COGS: 2 × $3.29 = $6.58. The order is costed at the average when it ships, not at the $2.85 of the older candles or the $7.66 of the new ones.
- Fees: the whole $0.60, because the order has one line.
- True profit: $12.00 − $0.60 − $6.58 = $4.82.
- Margin: $4.82 ÷ $12.00 = 40.2%.
Why doesn't an old order's COGS change?
Because it records what those units cost you when they left. A purchase, a batch or a new labor rate after the ship date changes the weighted-average cost for the next sale. It never rewrites a fulfilled order. Your past margins stay the way they were.
A return doesn't change the order either. The order's cards keep the fulfilled figures. A note under the cards says they are gross of returns. The return is recorded separately, dated the day you record it. The Profit dashboard and Profit & Loss reports include it.
Why is my COGS $0.00?
Because the variation had no cost Trackost could use when you fulfilled. Either its stock was valued at $0.00, because its batches were made from materials with no cost. Or it had no stock and no cost from real stock, and no recipe to cost it from, or only a recipe whose materials have no cost. Fulfilling then shows 'Recorded with no cost' with the reason, and the order shows $0.00 of COGS and a margin that is far too high: 100% when the order has no fees.
Before you fulfill, the order's cards warn you: such a line has no estimate, and the cards say it has no cost yet. Logging the missing batch afterwards doesn't change a sale already recorded. Costing troubleshooting walks through the causes and fixes.