What are landed costs?#
When you import goods, the price on the vendor invoice is rarely the full cost of getting those goods into your warehouse. Freight, customs duty, insurance, and handling fees all add to your actual inventory cost. Landed costs in Odoo let you allocate these additional expenses to received products so your stock valuation reflects true acquisition cost.
Prerequisites#
Landed costs require:
- Perpetual (automated) inventory valuation - Standard Price does not support landed costs in the traditional sense
- Inventory module with the Landed Costs feature enabled (Inventory → Configuration → Settings → Valuation)
- Products configured as landed cost carriers (see below)
Setting up landed cost products#
Create a dedicated product for each type of cost:
- "International Freight"
- "Customs Duty"
- "Insurance"
- "Port Handling Fee"
On each product form:
- Product Type: Service
- Can be a Landed Cost: enabled (checkbox appears when the feature is active)
- Landed Cost Account: set to your relevant expense or clearing account (e.g., "Freight Clearing")
- Default Split Method: choose the method appropriate for this cost type
Keeping separate products per cost type lets you report on landed cost categories independently and use different split methods for different cost types.
Creating a landed cost record#
Navigate to Inventory → Operations → Landed Costs or create from a validated receipt:
- Open the validated receipt (transfer)
- Click the Landed Costs button (appears after validation)
- In the landed cost record:
- Vendor Bill: optionally link to the freight invoice for reconciliation
- Picking: the source receipt transfer(s)
- Additional Costs tab: add one line per cost type with the product and amount
The five splitting methods#
Equal#
Divides the total cost equally among all product lines, regardless of quantity, weight, or value.
Use case: port handling fees charged per container, not per unit.
By Quantity#
Distributes cost proportionally based on the number of units received.
Use case: freight charged per unit (courier shipping).
By Weight#
Distributes cost proportionally based on product weight (uses the Weight field on the product form).
Use case: freight calculated by actual weight (LTL trucking, air freight).
Products without a weight set receive zero allocation. Always fill in the weight field on products before using this method.
By Volume#
Same as By Weight but uses the Volume field on the product form.
Use case: ocean freight priced by cubic meter.
By Current Cost#
Distributes cost proportionally based on the total value of each product line at the time of receipt (quantity × unit cost).
Use case: insurance (typically a percentage of declared value) and customs duty calculated ad valorem.
Validating and posting#
Click Validate on the landed cost record. Odoo:
- Calculates each product's cost share using the selected split method
- Posts journal entries debiting the Stock Valuation Account and crediting the Landed Cost Account
- Updates the AVCO or FIFO cost of the received units
Accounting entries generated#
For a €1,000 freight charge split across two products:
| Entry | Debit | Credit | Amount |
|---|---|---|---|
| Product A valuation increase | Stock Valuation Account | Freight Clearing | €600 |
| Product B valuation increase | Stock Valuation Account | Freight Clearing | €400 |
The Freight Clearing account is then balanced when you post the vendor bill:
| Entry | Debit | Credit | Amount |
|---|---|---|---|
| Clear freight liability | Freight Clearing | Accounts Payable | €1,000 |
Common issues#
Missing landed cost button on receipt: The receipt must be fully validated (Done state), and inventory valuation must be set to perpetual.
Zero cost shares for some products: Check that the split method's relevant field (weight, volume) is filled in on the product form.
Cost not reflected in COGS: If products have already been sold before the landed cost is validated, the COGS already posted will not be retroactively updated. Landed costs must be validated before the goods leave the warehouse.

