In Odoo, freight, duties and clearing are added as landed costs on the receipt of the goods, and Odoo spreads them over the items using a split method. Get the method right for each cost, keep each vendor's bill in its own currency and each tax in its tax account, and every item ends up with its real cost. When each HS code carries its own duty, the duty has to be worked out per line, not split.
What landed cost is
Landed cost is everything you pay to get goods into your warehouse: the supplier's price plus freight, insurance, customs duties, clearing agent charges and port charges. If those costs sit in an expense account instead of on the items, every item looks cheaper than it is, and prices built on that cost are too low.
Everything has to be right at the same time
One import shipment creates several bills from several parties, often in different currencies. Costing the items is only one of five things that must come out right together:
If any one of these is off, the others drift: a vendor balance won't match their statement, a tax return won't match the books, or an item's cost is wrong and every price built on it follows. Getting all five right together, from the first shipment, is what we set up for importers.
Setting up landed costs in Odoo
- Turn on Landed CostsGo to Inventory ‣ Configuration ‣ Settings, tick Landed Costs under Valuation, save, and choose the journal for landed cost entries.
- Choose the costing methodLanded costs work for products whose category uses FIFO or Average Cost (AVCO). See the next section for which one to pick.
- Create one product per cost typeFor example "Sea freight", "Customs duty", "Clearing charges". Each is a Service with Is a Landed Cost ticked on its Purchase tab, and a default split method.
- Set up vendors properlySupplier and service vendors each with their currency, taxes and tax position, before the first bill.
- Receive the goodsValidate the receipt from the purchase order. Landed costs can only be added to a validated receipt.
- Add the costs from each billOn the freight or clearing agent's bill, add the landed cost products and click Create Landed Costs. Or start from Inventory ‣ Operations ‣ Landed Costs.
- Compute, check, validateSelect the receipt, click Compute, and check the Valuation Adjustments tab (original value, added cost, new value) before you click Validate.
Costing method: FIFO or average cost
Each shipment keeps its own cost. Items sold first are costed at the oldest shipment's landed cost. Good when shipment costs swing a lot and you want each batch's real margin.
Each new shipment's landed cost is blended into one running average per item. Simpler to read, and prices move smoothly. Good when you buy the same items regularly.
Standard Price doesn't take landed costs. Pick the method with your accountant before go-live; changing it later revalues stock.
Split methods: same freight, very different item costs
The split method decides how one cost is shared across the items on the receipt. Odoo offers five. Here is the same freight bill of Rs 150,000 split across one shipment of three items:
By quantity, the 1,000 small bearings take three quarters of the freight, though they weigh the least. By weight, the heavy housings carry half of it. If the shipping line charged by weight or volume, splitting by quantity makes small items too expensive and heavy items too cheap, and both get priced wrong.
Duty per HS code: don't split it, calculate it
Odoo's split methods share one cost across the whole shipment. Customs duty doesn't work that way: each HS code has its own rates. Splitting the total duty by value puts the wrong duty on most items. Same shipment, sample duty rates:
| Item (HS code) | Customs value | Sample rate | Duty per HS code | Duty if split by value | Error |
|---|---|---|---|---|---|
| Small bearing (8482.10) | 560,000 | 10% | 56,000 | 81,200 | +25,200 |
| Large bearing (8482.20) | 420,000 | 15% | 63,000 | 60,900 | −2,100 |
| Housing (8483.20) | 420,000 | 20% | 84,000 | 60,900 | −23,100 |
| Total | 1,400,000 | 203,000 | 203,000 |
The total is right either way, so the error is easy to miss. The small bearings end up Rs 25 per piece too expensive, and the housings Rs 462 per piece too cheap. Every price and margin on those items follows the wrong cost.
- A few lines: adjust per lineWork out each line's duty from its HS code, then set the amounts on the Valuation Adjustments tab before you validate. Fine for a short shipment, slow and error-prone with dozens of lines.
- Many HS codes: let Odoo calculate itKeep the HS code and its rates on each product, and have Odoo calculate duties and taxes per line and land them on each item. This needs a customisation on top of standard Odoo, and it's what turns days of costing into minutes.
Duty rates change with each budget and with notifications during the year. Always cost against the current customs tariff, and confirm with your tax adviser which taxes are part of cost.
What if a cost arrives after some stock is already sold?
This happens on almost every import. The goods are received and selling starts, then the clearing agent's bill or a freight adjustment arrives a week later. By then part of the shipment is gone.
- DAY 11,000 units received
- DAY 1–7600 units sold
- DAY 8Clearing bill arrives: Rs 100,000, or Rs 100 per unit
The late cost has to be split in two: the share of the stock still on hand goes on those items' cost, and the share of the units already sold goes to cost of goods sold. If the whole bill is left in an expense account, your total profit is still right, but item margins aren't: the sales look more profitable than they were, and every decision based on item margins follows.
- Book expected costs at receiptAdd the freight, duty and clearing you expect as landed costs when the goods arrive, before you sell. When the final bills come, only the difference is late, and it is small.
- Split every late cost automaticallyWith the right configuration, or a small automation set up for how your business works, Odoo splits each late cost between the stock on hand and the units already sold, and posts each part to the right place.
- Agree the rule with your accountantDecide once how late costs are treated, so every shipment is handled the same way.
Use the landed cost for prices and reorders
Once every item carries its real cost, the rest follows: price rules can be built on that cost, margin reports become true, and reordering decisions use real numbers instead of the supplier's price.
Common questions
Can I add landed costs before the goods arrive?
No. Odoo applies landed costs to a validated receipt, so receive the goods first, then add the costs as the bills come in.
A cost arrived after I sold part of the stock. Is my profit wrong?
Your total profit isn't, but item margins can be. The share of the stock still on hand goes on its cost, and the share of the units already sold goes to cost of goods sold. See costs that arrive late above.
Can one bill cover more than one shipment?
Yes. A landed cost can be applied to several receipts at once, and the split method shares it across all their items.
Should the clearing agent's bill be in rupees and the supplier's in dollars?
Yes. Each vendor's bills should be in the currency they invoice you in, so their ledger matches their statement. Odoo converts to your company currency for the item cost.
Does this work with Standard Price?
No. Use FIFO or Average Cost for imported products.
Costing imports in Excel today?
Book a free Odoo health check. We'll look at how you cost a shipment now.