---
title: What a unit costs
summary: >
  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.
type: concept
group: receive
step: 2
permission: null
prerequisites: []
related:
  - /help/receive/receive-a-delivery
  - /help/receive/over-and-under-deliveries
  - /help/receive/cost-a-receiving
last_updated: 2026-08-07
---

**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](#why-an-average-and-not-the-last-price)
- [What landed cost includes](#what-landed-cost-includes)
- [Working the average out](#working-the-average-out)
- [The choice you make on each line](#the-choice-you-make-on-each-line)
- [Why the cost never changes on its own](#why-the-cost-never-changes-on-its-own)

## 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:

| | Units | Cost each | Value |
| --- | --- | --- | --- |
| Already on the shelf | 200 | MYR 5.00 | MYR 1,000 |
| This delivery, landed | 100 | MYR 7.50 | MYR 750 |
| **Blended** | **300** | **MYR 5.83** | **MYR 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:

| Action | What it writes | When it is right |
| --- | --- | --- |
| **Apply MAC** | The blended average | Almost always. It is the recommended option on any normal line. |
| **Replace with landed cost** | The landed cost, discarding the old average | A first delivery, or a genuine step change in price where the old average is no longer meaningful. |
| **Keep current** | Nothing at all | You 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 →](/help/receive/receive-a-delivery)

**Costing a receiving.** The click-through for the costing step itself.
[Learn more →](/help/receive/cost-a-receiving)

**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 →](/help/receive/over-and-under-deliveries)
