MHelp
← Ops
Browse all topics
Step 2 of 7 — Receive · goods arrive, go on the books

What a unit costs

Concept6 min read

Short answer

A product's unit cost is a moving average: what the stock already on your shelves cost, blended with what the newest delivery cost, weighted by quantity. It counts delivery charges as well as the supplier's price. It changes only during costing, and only after someone chooses an action for that line — never quietly, and never just because goods arrived.

Last checked 7 Aug 2026Step 2 — ReceiveView as Markdown

Half a tank of fuel bought at one price, topped up at another. What is the fuel in the tank worth now?

Not the old price — half of it is new. Not the new price — half of it is old. It is a blend of the two, weighted by how much of each you are carrying. Pour in a thimbleful at a wild price and the blend barely twitches. Pour in a full tank and it moves a long way.

That blend is a moving average cost, and it is what Mossery means by a product's unit cost.

This page covers:

Why an average, and not the last price

You are holding one pile of stock, not a stack of labelled batches.

Suppose you bought 200 units cheaply last year and 100 units expensively last week, and they went on the same shelf. A customer buys one. Which one did they buy? Nobody knows, and nobody is going to go and look.

Using the newest price would say every unit on that shelf is now worth the expensive price, which overstates what you are holding and understates the margin on everything you bought cheaply. Using the oldest price does the reverse. The average is the only answer that describes the actual pile.

It matters beyond bookkeeping. Unit cost is what drives stock value, cost of goods sold, and every profitability figure in the app. Get it wrong and the numbers are not slightly off — they are confidently wrong, everywhere at once.

What landed cost includes

The supplier's price is not what the unit cost you.

Landed cost is what one unit cost by the time it was standing on your shelf, and it is the figure that goes into the average:

landed cost per unit
  = (line total after discount + this line's share of delivery charges)
    ÷ units received

So a line of 100 units at MYR 6.50 is MYR 650. Add MYR 100 of freight on that delivery and the line is really MYR 750, which is MYR 7.50 a unit rather than MYR 6.50. Costing at MYR 6.50 would understate every one of those units by 15%.

Charges spread across the lines by value, not evenly per line. A delivery carrying MYR 100 of freight, where one line is 65% of the order's value and another is 35%, allocates MYR 65 and MYR 35. That is the fairer split: an expensive line and a cheap one of the same box count did not cost the same to bring in, and value is the closest cheap proxy for that.

Not every charge is included. When the purchase order was raised, each extra cost was marked as either part of the goods' cost or a separate expense. Only the first kind lands in unit cost. The rest still appear on the order and the invoice.

If the order was placed in another currency, the amounts convert once, at the rate for the date the goods were received, and the rate used is shown to you and recorded against the delivery. Inventory is translated at acquisition and not revisited.

Working the average out

The formula is short, and worth reading once slowly.

new unit cost
  = (units already held × their current unit cost
     + units received × landed cost)
    ÷ (units already held + units received)

A worked example, continuing the one above:

UnitsCost eachValue
Already on the shelf200MYR 5.00MYR 1,000
This delivery, landed100MYR 7.50MYR 750
Blended300MYR 5.83MYR 1,750

Three things worth noticing.

  • The result sits between the two prices, closer to the bigger pile. Twice as much old stock as new, so the average lands nearer the old price.
  • Nothing is recalculated backwards. Units you already sold keep the cost they were sold at. The average describes what you hold now.
  • The first delivery of a product has nothing to blend with. No prior stock, no prior cost, so the average is simply the landed cost. The app spots this and says so.

The units already held are counted at the location you received into, which is the pile the new goods physically joined.

The choice you make on each line

Costing is not automatic, and this is the reason.

When someone opens the costing step for a delivery, they get one card per line showing the current cost, the landed cost, and the average of the two. Each card offers three actions:

ActionWhat it writesWhen it is right
Apply MACThe blended averageAlmost always. It is the recommended option on any normal line.
Replace with landed costThe landed cost, discarding the old averageA first delivery, or a genuine step change in price where the old average is no longer meaningful.
Keep currentNothing at allYou do not trust this delivery's pricing, or the paperwork is still in dispute.

If a line has no price on it, there is nothing to compute and the choice is made for you: the line is kept as-is and flagged so you can see why.

The decision is per line, because a delivery of six products can easily be five routine restocks and one line where the supplier's price doubled. One button covering all six would force you to be wrong about at least one of them.

Why the cost never changes on its own

Recording a delivery does not touch unit cost. Nothing else does either.

Arriving stock and pricing stock are two different judgements made by two different people. Whoever unpacks the boxes is the authority on how many turned up — that is a physical fact, and the app posts it to stock the moment they submit. Whoever owns supplier pricing is the authority on what it cost, and that often waits on an invoice that has not arrived yet.

Bundling the two was worse in both directions. Stock sat unsellable for weeks waiting on a finance decision, and cost got rubber-stamped by whoever was holding the boxes. Splitting them means a delivery is never held hostage by a missing invoice, and a cost is never set by accident.

The consequence to be aware of: between the delivery and the costing, a product can be in stock and sellable while still carrying its previous unit cost. That is a known, visible gap, not a fault, and the receivings list shows you exactly which deliveries are waiting to be costed.

One more thing worth knowing. If a delivery has to be reversed after it was costed, the app restores the unit cost it recorded before that costing rather than trying to un-blend the average. An average has no clean inverse once other deliveries have gone through it, so it keeps the snapshot instead of doing arithmetic it cannot justify.

Explore

Recording a delivery. The step before this one: what arrived, counted and put on the books. Learn more →

Costing a receiving. The click-through for the costing step itself. Learn more →

Over- and under-deliveries. How many units you received is what the average is weighted by, so a miscount moves the cost too. Learn more →

Read next