Spare Parts Pricing: Building Up From Landed Cost
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 supplier contract that holds your buying prices to 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 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.
- Customer price lists — retail, trade and fleet as lists, each account on one, with quantity breaks, a currency and validity dates, filling the price on quotes, invoices and at the counter, and the item price as the fallback.
- Margin analytics on POS sales, computed against the same cost basis as everything else.
- Supplier contracts with an agreed price list, dates and a value ceiling: a call-off orders at the contract price, so the bill is matched against the agreed rate, and a supplier quote above the contract price is flagged.
More we can add to your workspace
- Discount authority per role, and on quotes and invoices, so an override below the list needs a second name past a set percentage wherever it is typed, and a report of the sales priced below their list. The till already holds a discount to one workspace-wide percentage, with a supervisor's PIN above it.
- A bill-to-contract price check on orders raised outside a contract, so a supplier bill on an ordinary order is also compared with the rate agreed for that item.
- Weight or volume allocation basis for landed cost.
- An FX inside landed cost — payment-date rate, weighted rate across staged payments or per-shipment variance.
- Re-costing of stock already sold when a landed cost arrives late, which is the normal case for demurrage.
- A standard cost per part, with variance reporting against what each receipt actually cost.
The first one is what will actually annoy a parts business. The list fills the price in, and a line can still be typed over at the counter with nothing reporting it, which is where margin leaks. On the buying side, put your regular suppliers on contracts and order by call-off: that is what puts the agreed rate between a supplier and a quiet price rise.
Anything above that you need, we can build for you
Everything listed above as something we can add describes what ships in the standard product today — it is a starting point, not a limit on what AWRA OpsHub can do for your organisation. Kenya's eTIMS integration and its maintained payroll engine are both in the product because clients needed them and commissioned them; neither appeared by itself, and the same door is open for whatever you just read about. One qualification so this is worth what it claims: a small number of things on this blog we deliberately leave to a specialist rather than build — a statutory ledger we will not sign our name to, a rule that would decide a tax question for you, a clinical or member-funds record that belongs in a regulated system — and where that is true the post says so in those words. Everything else is a scope, a timeline and a price.
The operational work, which is what most commissions actually are
An extra approval stage in a chain that does not match the standard one, a custom field set on employees or assets that only your sector needs, an expiry that has to block an order rather than send an email, a report your board asks for in a shape nothing produces, or a scanner or weighbridge feeding the goods-in door. These are the commissions we are asked for most often and the smallest ones we quote — and unlike a revenue-authority pipeline, none of them waits on a regulator.
The module-shaped additions, which are the ones readers ask for most often
A price list with real discount authority, a customer-facing quotation that expires, a bill of materials or recipe costing, a staff advance that is issued, acquitted and chased, a member or unit ledger, a matching rule that holds a payment. Each of these is a build rather than a setting, and each has been quoted before — a bigger piece of work than a custom field, with a written spec and a date instead of a roadmap slide.
The report, document or pack nothing currently produces
The board pack in the shape your board actually asks for, a donor or funder layout, an invoice or receipt template carrying what your regulator or your customer expects, a dataset the report builder cannot reach yet. Usually the fastest thing on this list to deliver, because the data is already in the system.
Systems, rails and hardware you already run
The accounting package, CRM, online store, core banking or custom database you intend to keep — connected through our API so a fact is entered once and appears everywhere it is needed. Plus the physical edge: a scanner, a scale, a weighbridge or a till peripheral feeding the door it belongs to.
How it works: you describe the requirement, we return a written scope, timeline and cost, and once agreed it is built into your environment and maintained as part of the product. Nothing here waits on a regulator or a published specification, which is why operational builds are the ones we quote fastest. Tell us the requirement that would otherwise rule us out — that is a better first conversation than a demo.
Tell us what your operation needsSetting it up, and the checks that stay manual
What to set up, and what to check by hand
- Load three price lists and put every account on one. Retail as the default, then trade and fleet, each dated. The counter then prices from the list, and a discount means overriding a number the system already filled in, which is a much stronger control than remembering a policy.
- Look at overridden prices weekly. A line price can still be changed at the counter and nothing yet reports a sale below its list, so a weekly sample of trade invoices against the list is the check.
- 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 load retail, trade and fleet as price lists and put every account on one, because a number the system fills in is a better control than a remembered policy — and sample the overrides weekly, because nothing reports them yet.
Know the landed cost before you set the price
Landed cost allocated across a shipment and rolled into one weighted average cost that every report, journal and margin figure reads, and customer price lists so the counter prices each account from its own tier.
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?
Yes. Put each account on a price list — trade, fleet, or a list of its own — and quotes, invoices and counter sales for that customer are priced from it, with quantity breaks where you set them and the default list or the item price for everyone else. A line price can still be typed over, and nothing yet reports a sale below its list, so a weekly sample of overridden lines is the check that stays manual.
Does the system check supplier invoice prices against agreed rates?
Yes, when you buy on a supplier contract. The contract holds the agreed price list with its dates and a value ceiling; a call-off against it orders at those prices, so the supplier bill is matched against the agreed rate, and a quote from that supplier above the contract price is flagged. For parts you buy outside a contract, keep 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.