Your Product Cost Is Wrong Until Freight and Duty Land on It
Ask a sales team what a product costs and they will usually quote the supplier price. Ask the finance team after the shipping invoice, the customs duty receipt, and the clearing agent’s bill arrive, and you will often get a different number. The gap between those two answers is your landed cost, and if Odoo does not know about it, every margin report you run is a little too optimistic.
For companies that import, which is most trading and distribution businesses in the Gulf and many in India, this is not a small rounding issue. Freight, duty, insurance, port handling, and clearing charges are real costs of getting stock onto your shelf. They belong in the product cost, not in a general expense account that nobody connects back to the goods.
What a landed cost actually is
A landed cost is any cost you pay to bring purchased goods to your warehouse, on top of the supplier’s price. Typical examples:
- Sea, air, or road freight from the supplier to your port or warehouse
- Customs duty and other import charges
- Cargo insurance
- Port handling, demurrage, and clearing agent fees
- Local transport from the port to your warehouse
These costs usually arrive on different bills, from different vendors, at different times. The supplier invoice may come first, the freight forwarder’s bill a week later, and the duty payment somewhere in between. That timing is exactly why landed costs get lost.
What goes wrong when landed costs are expensed instead
The common shortcut is to post freight and duty bills straight to an expense account. It feels quick, and the trial balance still balances. But it quietly causes several problems:
- Margins look better than they are. Sales orders show profit based on the supplier price only. Products that carry heavy freight or duty look as profitable as products that do not.
- Stock valuation is understated. The value of inventory on the balance sheet leaves out real costs you already paid to bring that stock in.
- Profit moves to the wrong month. The freight is expensed when the bill is posted, not when the goods are sold. A big shipment can make one month look bad and the next month look great.
- Pricing decisions use the wrong base. If the sales team sets prices from product cost, they are pricing from a number that is too low.
- Nobody can answer “what did this shipment really cost?” The pieces sit in different accounts with no link back to the receipt.
How Odoo handles landed costs
Odoo has a built-in landed costs feature in Inventory. The idea is simple: you record the extra cost, link it to one or more receipts, choose how to split it across the products, and validate. Odoo then adds the cost to the stock valuation of those products and posts the matching journal entry.
A few things need to be in place first:
- Turn on Landed Costs in the Inventory settings.
- Use automated (perpetual) inventory valuation on the product categories involved, so stock moves create accounting entries.
- Use FIFO or Average Cost as the costing method. Landed costs are not applied to products on Standard Price, because their cost is fixed by design.
- Create landed cost products for each type of charge, such as Freight, Customs Duty, Insurance, and Clearing. These are service products marked as landed costs, with a default split method.
Choosing the right split method
When one freight bill covers a container with many different products, Odoo needs to know how to share that cost. You can choose a split method per landed cost line:
- Equal: every product line gets the same share. Rarely right, but simple.
- By Quantity: shared by the number of units received. Good when items are similar in size.
- By Current Cost: shared by the value of each line. A sensible default for duty and insurance, which usually follow value.
- By Weight: shared by product weight. Often the best fit for freight.
- By Volume: shared by product volume. Useful when freight is charged by space, such as sea freight in containers.
Weight and volume methods only work if those fields are filled in on your products. If they are blank, the split will not reflect reality, so check product master data before you rely on them.
A clean day-to-day flow
Here is a flow that works well for most importing teams:
- Receive the goods against the purchase order and validate the receipt as usual. The stock enters at the supplier price.
- Post the supplier bill and match it to the receipt, as covered in our earlier posts on GRN and three-way match.
- When the freight, duty, or clearing bill arrives, enter it as a vendor bill using the landed cost products. Odoo lets you create the landed cost directly from that bill.
- Link the landed cost to the right receipt or receipts. One freight bill can cover several receipts from the same shipment.
- Compute and review the split before validating. Check that the amounts per product look reasonable.
- Validate. Odoo updates the product valuation and posts the accounting entry.
If some of the goods were already sold before the landed cost was recorded, Odoo puts the share for the sold quantity into cost of goods sold, and only the share for stock still on hand goes into inventory value. That is correct behaviour, but it is also a good reason to record landed costs quickly rather than at month-end.
What “good” looks like
- Every freight, duty, and clearing bill for stocked goods is posted with a landed cost product, not a general expense account.
- Each landed cost is linked to the receipt it belongs to, so you can see the full cost of any shipment.
- Split methods are agreed by charge type: for example, freight by weight or volume, duty and insurance by value.
- Product weight and volume are filled in for items where you split by them.
- Landed costs are recorded within days of the bill arriving, not saved up for close.
- There is a simple weekly check for receipts from import shipments that still have no landed cost attached.
A practical 30-day plan
Week 1: Find the leak. Look at last quarter’s freight, duty, and clearing bills. Where were they posted? How many were linked to receipts? This tells you how far your product costs are from reality.
Week 2: Set up the basics. Confirm valuation and costing method on your product categories, create the landed cost products, and agree split methods with finance and purchasing.
Week 3: Fix the master data and train. Fill in weight and volume where they matter. Walk the AP and purchasing teams through one real shipment from receipt to validated landed cost.
Week 4: Run it live and review. Apply the flow to every new import shipment. At the end of the month, compare product margins before and after. The products that change the most are the ones where your old pricing was most at risk.
The bottom line
The supplier price is only part of what your stock costs. Until freight, duty, and clearing charges land on the product, your margins, stock value, and pricing are all built on a number that is too low. Odoo already has the tools to fix this. It mostly takes clean setup, sensible split rules, and the habit of linking each charge to its receipt.
If you want help setting up landed costs in Odoo, or checking whether your current product costs tell the truth, SOD Infotech works on purchasing, inventory, and accounting flows every week. Bring one real import shipment, and we will show you where its full cost should land.
