Spare Parts Pricing: Landed Cost or Nothing
Three customers, three prices, one part — and a margin nobody can compute because the landed cost was never calculated. How to price a parts business deliberately, and the one supplier-contract gap that means an invoice price is never checked against an agreed rate.
Parts pricing in Kenya is mostly done by markup on the invoice price, which is a defensible method with one problem: the invoice price is not the cost. On an imported container the cost is the invoice plus duty, plus clearing, plus transport from Mombasa, plus the demurrage nobody expected — and a 30% markup on the invoice can be a 12% margin on the actual cost, or a loss on a heavy item.
Which is why parts businesses regularly discover that their best-selling lines are their worst-performing ones.
Start from [landed cost](/glossary/landed-cost) or do not start
Landed cost is the invoice plus everything it took to get the goods onto your shelf, spread across the shipment. It is the only number a markup should ever be applied to, and most parts dealers have never computed it because it requires attributing a single freight invoice across two hundred item lines.
A KES 1.2m container, landed
A 30% markup on invoice price on this container sells at KES 1,560,000 against a cost of KES 1,658,000 — a loss of nearly KES 100,000 across the shipment, on goods everyone believed carried a healthy margin. This is not a rounding error; it is the single most common structural pricing mistake in the import trade.
The allocation problem, and where the tooling stops
How you spread that KES 458,000 of additional cost across the shipment changes which lines look profitable. Two bases are available here — by value and by quantity — and each is wrong for a different kind of container.
| Basis | Right when | Wrong when |
|---|---|---|
| By value | The shipment is broadly similar goods, and cost tracks bulk reasonably well. | You have shipped one KES 200,000 ECU alongside a pallet of brake discs. The ECU absorbs freight it did not cause. |
| By quantity | Items are broadly similar in size and weight — pads, filters, bulbs. | You have 5,000 clips and 40 radiators. The clips absorb almost all the freight. |
| By weight or volume | Not available. This is the basis that would be correct for a mixed container. | — |
The absence of a weight or volume basis matters most on exactly the containers where it matters most — mixed shipments of heavy-and-cheap alongside light-and-expensive, which is what a parts container usually is. The practical answer is to allocate by value and manually adjust the handful of lines you know are distorted, which is imperfect and much better than a markup on invoice price.
One defect worth knowing about
Landed cost allocation resolves the batches for a purchase order through the most recent check-in for that order. So a container received in two deliveries can have the whole freight cost allocated against one of them. If you split-receive, allocate the cost after the final delivery rather than after the first, and check the resulting unit costs before you price anything.
Three customers, three prices
A parts business sells the same part to a walk-in retail customer, a garage on account, and a fleet on contract, at three different prices. That is correct commercial practice and it needs to be deliberate rather than remembered.
Where each customer type should sit
Fleet on contract
Volume, predictable, pays on time. Lowest margin per unit and the best cash cycle in the business.
Trade — garages on account
The core of most parts businesses. Margin is thinner and the risk is credit rather than price — which is a different problem entirely.
Trade — cash garages
Same discount logic without the credit risk. Should be priced better than an account customer, and usually is not.
Walk-in retail
Highest margin, lowest volume, and the customer least able to check your price. Treat that asymmetry carefully — it is also the customer most likely to tell everyone.
Emergency / after-hours
A legitimate premium for genuine availability. Also the price most likely to lose a relationship, so charge it deliberately or not at all.
The gap worth noticing: the cash garage should be cheaper than the account garage, because you are financing one and not the other. Almost nobody prices it that way, and it is free margin on the account side and a free incentive on the cash side.
What the system supports, and the gap that will annoy you
What AWRA OpsHub does today
- Landed cost on a purchase order, allocated across the shipment by value or by quantity, rolling into the item's weighted average cost.
- Weighted average cost as the single cost basis everywhere — POS margin, journal postings, valuation and reports all read the same number.
- A buying price and a markup percentage per item, so a default selling price can be derived.
- Customer accounts with credit limits, so trade pricing sits alongside credit control.
- Quotations with their own pricing, for contract and fleet work.
- Margin analytics on POS sales, computed against the same cost basis as everything else.
What it does not do
- No customer price list and no price tier. A per-customer or per-tier price is not a stored relationship — the price is set on the document. Trade discounting is therefore a discipline your counter staff keep, not a rule the system applies.
- No supplier contract or agreed price list, so an invoice price is never checked against a rate you negotiated. A supplier who quietly raises a price will not be caught by the system.
- No weight or volume allocation basis for landed cost.
- No FX inside landed cost — no payment-date rate, no weighted rate across staged payments, no per-shipment variance.
- No re-costing of stock already sold when a landed cost arrives late, which is the normal case for demurrage.
- No choice of costing method. Weighted average is the only basis; there is no FIFO cost-flow engine.
The first two are the ones that will actually annoy a parts business. No customer price tier means a discount is a decision at the counter every time, which is where margin leaks; and no supplier price list means the check on your buying prices is somebody noticing, which is exactly the control that fails during a busy month.
Working around the two gaps
What to do since the system will not do it
- Publish three price lists, on paper, at the counter. Retail, trade, fleet. Printed, dated, and visible. A discount then requires deviating from a published number, which is a much stronger control than remembering a policy.
- Put the customer tier in a custom field on the customer record. It does not price anything and it tells whoever is serving them which list applies, which is 80% of the benefit.
- Check three buying prices a week against your last purchase. Not all of them — three. A rotating spot check catches a creeping supplier faster than an annual review and takes four minutes.
- Re-derive selling prices after every container, not once a year. Landed cost moved, so the markup applied to the old cost is now a different margin.
- Allocate landed cost after the final delivery of a split shipment, and read the resulting unit costs before pricing anything from them.
Our take
Price from landed cost, not invoice price — a 38% landed uplift turns a 30% markup into a loss, and that is the ordinary case for an imported container rather than a bad one. Allocate by value and manually correct the lines you know are distorted, because the basis that would be right for a mixed container is not available. Then publish three printed price lists, since customer price tiers are not a stored rule here and a printed number is a better control than a remembered policy.
Know the landed cost before you set the price
Landed cost allocated across a shipment and rolled into one [weighted average cost](/glossary/weighted-average-cost) that every report, journal and margin figure reads — with the allocation bases and the missing customer price tier stated plainly.
See plans & pricingFrequently asked questions
Why is marking up the invoice price wrong?
Because the invoice is not the cost. On an imported container, duty, clearing, port charges, transport and any demurrage typically add 30–40% — so a 30% markup on invoice price can sell a container below what it cost you. It is the most common structural pricing mistake in the parts import trade, and it explains why businesses discover their best-selling lines are their worst-performing ones.
How should landed cost be allocated across a shipment?
By value when the goods are broadly similar, by quantity when items are similar in size and weight. Both are wrong for a mixed container of heavy-and-cheap alongside light-and-expensive, which is what a parts container usually is — and a weight or volume basis, which would be correct, is not available. Allocate by value and manually adjust the handful of lines you know are distorted.
Can we set different prices per customer?
Not as a stored rule. There is no customer price list and no price tier — the price is set on the document, so trade discounting is a discipline your counter staff keep rather than something the system applies. The practical answer is three printed, dated price lists at the counter and the customer's tier in a custom field on their record, so a discount means deviating from a published number.
Does the system check supplier invoice prices against agreed rates?
No. There is no supplier contract or agreed price list, so an invoice price is never checked against a rate you negotiated and a supplier who quietly raises a price will not be caught. Substitute a rotating spot check: three buying prices a week against your last purchase of the same item, which takes four minutes and catches creep faster than an annual review.
What happens if freight costs arrive after we have sold some of the stock?
There is no re-costing of stock already sold, so the late cost lands on what remains. Since demurrage and final clearing charges routinely arrive after the first sales, expect the recorded margin on early sales from a container to be flattering. Allocate as soon as the numbers are known, and treat pre-allocation margins on a new shipment as provisional.
Which customer should get the best price?
Fleet on contract, then trade on account, then trade paying cash, then walk-in retail — with one common error worth fixing: the cash garage should be cheaper than the account garage, because you are financing one and not the other. Almost nobody prices it that way, and correcting it is free margin on the account side and a free incentive on the cash side.