Skip to Content
Odoo guide · Imports & distribution

Landed cost in Odoo: how to cost imports when duty changes by HS code

An imported item costs more than the supplier's price. Freight, duties and clearing have to land on each item, while every supplier, every service vendor and every tax sits in the right place in your books. All of it has to be right at the same time.
By Zubair Atiq, Odoo 19 certified·9 min read
October 29, 2026 by
ONE SHIPMENTseveral bills, several currenciesSupplier priceFreightCustoms dutyClearing & portin USDby weight / volumeper HS codein PKRLANDED COSTper itemthe real costyou price from
Short answer

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.

The basics

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.

The part most setups miss

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:

What must be rightWhat it means in Odoo
The supplier's ledgerThe supplier's bill stays in the supplier's currency, for example USD, so you always know what you owe in their currency.
Each service vendor's ledgerThe shipping line, clearing agent and others are vendors with their own ledgers and their own currencies. Their bills carry the landed cost products.
Exchange ratesForeign bills convert at the right rate, and later rate differences are posted the way your accountant has decided, consistently, not hidden in item costs.
Tax positionsEach vendor and product has the right taxes and tax position (Odoo's fiscal positions), so claimable import taxes go to tax accounts and only real costs reach the item.
Product costEach item ends up with its purchase price plus its fair share of freight, duty and clearing, in your company currency.

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.

Step by step

Setting up landed costs in Odoo

  1. Turn on Landed CostsGo to Inventory ‣ Configuration ‣ Settings, tick Landed Costs under Valuation, save, and choose the journal for landed cost entries.
  2. 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.
  3. 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.
  4. Set up vendors properlySupplier and service vendors each with their currency, taxes and tax position, before the first bill.
  5. Receive the goodsValidate the receipt from the purchase order. Landed costs can only be added to a validated receipt.
  6. 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.
  7. Compute, check, validateSelect the receipt, click Compute, and check the Valuation Adjustments tab (original value, added cost, new value) before you click Validate.
Method 1

Costing method: FIFO or average cost

FIFO (first in, first out)

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.

Average cost (AVCO)

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.

Method 2

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:

Small bearing1,000 pcs · $2,000 · 100 kg
Large bearing300 pcs · $1,500 · 150 kg
Housing50 pcs · $1,500 · 250 kg
Small bearingLarge bearingHousing
ILLUSTRATIVE FIGURES Rs of freight given to each item. Sample shipment.

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.

Split methodUse it for
By WeightFreight charged by weight; also local transport from the port
By VolumeSea freight charged by space (CBM), container charges
By Current CostInsurance, bank and LC charges, anything that follows the value of the goods
By QuantityHandling or labelling charged per unit
EqualSmall fixed charges, such as a document fee
Method 3

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 valueSample rateDuty per HS codeDuty if split by valueError
Small bearing (8482.10)560,00010%56,00081,200+25,200
Large bearing (8482.20)420,00015%63,00060,900−2,100
Housing (8483.20)420,00020%84,00060,900−23,100
Total1,400,000203,000203,000
ILLUSTRATIVE FIGURES Rupees. Sample rates at Rs 280 per USD, not the current tariff. Both columns total the same, but each item gets a different duty.

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.

  1. 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.
  2. 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.

The biggest question

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.

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.

How we handle it in Odoo
  1. 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.
  2. 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.
  3. Agree the rule with your accountantDecide once how late costs are treated, so every shipment is handled the same way.
After costing

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.

Questions

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.

Book a free health check