All posts
Integrator8 min read

Landed costs in Odoo: adding freight, duty, and customs to incoming shipments

Landed costs let you allocate freight, customs duty, and insurance expenses to the actual cost of received inventory. This guide covers landed cost product setup, all five splitting methods, and the accounting entries Odoo generates to update stock valuation.

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:

  1. Perpetual (automated) inventory valuation - Standard Price does not support landed costs in the traditional sense
  2. Inventory module with the Landed Costs feature enabled (Inventory → Configuration → Settings → Valuation)
  3. 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:

  1. Open the validated receipt (transfer)
  2. Click the Landed Costs button (appears after validation)
  3. 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:

  1. Calculates each product's cost share using the selected split method
  2. Posts journal entries debiting the Stock Valuation Account and crediting the Landed Cost Account
  3. Updates the AVCO or FIFO cost of the received units

Accounting entries generated#

For a €1,000 freight charge split across two products:

EntryDebitCreditAmount
Product A valuation increaseStock Valuation AccountFreight Clearing€600
Product B valuation increaseStock Valuation AccountFreight Clearing€400

The Freight Clearing account is then balanced when you post the vendor bill:

EntryDebitCreditAmount
Clear freight liabilityFreight ClearingAccounts 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.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free