Direct answer: Odoo 19 landed costs let an importer add freight, customs duty, insurance, brokerage and similar acquisition costs to received inventory instead of treating every charge as an unrelated period expense. The feature is useful, but the menu setup is the easy part. A reliable implementation depends on five decisions: which charges are capitalised, which receipts they belong to, how each charge is allocated, when the cost is posted, and how finance verifies the result.
This guide explains the operating design I would approve before switching the workflow on. It applies to importers, wholesalers and distributors using Odoo 19 in Australia, New Zealand, the UK, North America, Europe, the Gulf and Singapore. Tax treatment and capitalisation policy still need to be confirmed for the legal entity and jurisdiction.
What Odoo 19 landed costs do
A landed-cost record takes one or more additional charges and allocates them across eligible products on completed stock receipts. Odoo supports five native split methods: equal, by quantity, by current cost, by weight and by volume. After the allocation is reviewed and validated, it affects inventory valuation according to the product costing and valuation configuration.
It does not replace shipment planning, duty-rate calculation, tax advice, foreign-exchange accounting or supplier selection. Those are separate processes that may feed the landed-cost workflow.
The six decisions to make before configuration
| Decision | Why it matters | Required owner |
|---|---|---|
| Capitalisable cost policy | Defines whether freight, duty, insurance, brokerage, port handling and other charges enter inventory value or remain expenses. | Finance |
| Eligible products and valuation | Landed costs are intended for products using FIFO or average cost (AVCO); the valuation configuration determines the accounting effect. | Finance + Odoo lead |
| Allocation driver | The same freight bill can produce very different unit costs when split by quantity, value, weight or volume. | Supply chain + finance |
| Receipt matching | Every charge must be linked to the correct incoming transfer or group of transfers. | Purchasing + accounts payable |
| Timing and cut-off | Late freight and customs invoices can arrive after stock has been received or sold, so month-end rules must be explicit. | Finance |
| Exception approval | Missing weights, mixed-duty products and unmatched invoices need a controlled resolution path. | Named approver |
If these decisions are still open, use an Odoo implementation checklist before building automation. Automating an unclear policy only makes inconsistent costing happen faster.
How to configure Odoo 19 landed costs
1. Enable the feature and set the journal
In Odoo 19, go to Inventory → Configuration → Settings, find the Valuation section, enable Landed Costs, choose the default journal and save. This path and the default-journal behaviour are documented in the official Odoo 19 landed-cost guide.
Do not select the journal casually. Test the resulting entries with the chart of accounts used by the company. Odoo 19 changed parts of inventory valuation compared with earlier versions, so a setup copied from an Odoo 17 or 18 tutorial is not sufficient evidence. Review the Odoo 19 inventory valuation cheat sheet and validate the exact journal behaviour in a staging database.
2. Confirm product costing and valuation
Before posting a real transaction, check the relevant product categories. The native landed-cost workflow is designed for products using FIFO or AVCO. Confirm the valuation method, valuation accounts and company settings as one package; a landed-cost record cannot repair a weak category design.
Also decide how you will handle products that should not absorb a charge. A mixed receipt may contain stock, samples, promotional items or products with different duty treatment. If the native allocation pool is too broad, split the operational flow or introduce a reviewed extension rather than repeatedly correcting entries by hand.
3. Create a separate service product for each recurring charge
Create clear service products such as:
- International Freight
- Customs Duty
- Cargo Insurance
- Brokerage and Clearance
- Port or Terminal Handling
- Domestic Inbound Freight
On each service product, enable Is a Landed Cost, choose the default split method and configure the relevant accounts. Separate products are better than one generic “Import Cost” line because finance can reconcile each charge type, change allocation logic deliberately and report exceptions without decoding free-text descriptions.
4. Fix the master data required by the split method
Weight-based allocation is only credible when product weights are complete and use the same unit convention. Volume-based allocation needs reliable dimensions or volume. Current-cost allocation depends on the value already attached to the receipt lines. Quantity-based allocation assumes one unit is an appropriate cost driver across the pool.
I normally add a pre-go-live data check: every imported SKU must have the fields needed by its expected freight method, and zero values require review. This control belongs beside the warehouse design described in the Odoo 19 warehouse optimisation guide.
Which split method should you use?
| Odoo split method | Best fit | Watch-out |
|---|---|---|
| Equal | A fixed charge that should be shared evenly across eligible valuation lines. | “Equal” means equal by line, not equal economic impact. |
| By Quantity | Charges driven by units when the units are operationally comparable. | A pallet and a small spare part should not absorb the same cost merely because each has quantity one. |
| By Current Cost | Insurance or ad-valorem charges that broadly follow goods value. | It is not a substitute for item-specific tariff logic. |
| By Weight | Air, road or sea charges priced mainly by weight. | Missing or inaccurate product weights distort the allocation. |
| By Volume | Container or cubic-volume-driven freight. | Packaging and dimensional conventions must be consistent. |
The correct answer is usually one method per charge type, not one method for the whole shipment. Freight might be split by weight or volume, while insurance is split by current cost. Customs duty can require more care: if tariff rates differ by product, a single value-based allocation across the whole receipt may be commercially wrong even when the total bill is correct.
A practical posting workflow
- Confirm the purchase order and receive the goods. The incoming transfer must be completed before it is selected for landed-cost allocation.
- Record the carrier, broker or customs invoice. Use the dedicated landed-cost service product on the vendor bill.
- Create the landed-cost record. Link the correct completed receipt or receipts and add the cost lines.
- Compute before validating. Review the Valuation Adjustments output. Compare the total added value with the source invoice and inspect the largest unit-cost changes.
- Resolve exceptions. Stop if a line receives zero allocation unexpectedly, the receipt is missing, the charge currency is wrong or the cost pool contains an ineligible product.
- Validate and reconcile. Confirm the valuation and accounting effect, then retain the source document and approval evidence.
Odoo’s official documentation describes the feature and standard steps. The implementation layer is the approval trail around those steps: who can compute, who can validate, what threshold needs review, and how finance confirms the bill-to-receipt match.
Worked allocation example
Assume one receipt contains 100 units of Product A and 50 units of Product B. The goods values are AUD 10,000 each, while the recorded shipment weights are 600 kg for A and 400 kg for B. A freight invoice is AUD 2,000 and insurance is AUD 400.
- Splitting freight by weight allocates AUD 1,200 to A and AUD 800 to B.
- Splitting insurance by current cost allocates AUD 200 to each product because their received values are equal.
- The total additional value is AUD 1,400 for A and AUD 1,000 for B.
This is an illustrative calculation, not a claim about a real project. Its purpose is to show why one universal split method is weak: quantity, weight and value answer different questions.
Late freight and duty bills: design the exception before go-live
Import charges often arrive after the warehouse receipt. Some arrive after part of the stock has already been delivered. That timing must be tested using the company’s actual Odoo 19 edition, costing method and valuation configuration.
A practical policy should answer:
- Will finance accrue an estimated freight or duty amount at period end?
- Who replaces or reverses the estimate when the actual bill arrives?
- What happens when the associated stock is partly or fully sold?
- How are closed accounting periods protected?
- Which variance threshold requires finance approval?
Do not assume a late landed-cost posting will produce the same result as a cost posted before delivery. Build test cases for stock fully on hand, partly delivered and fully delivered, then have finance approve the accounting outcome. The official Odoo 19 valuation-of-operations documentation is the correct version-specific starting point.
Foreign currency is related, but it is not the same thing
An overseas supplier bill, freight bill and payment can each involve different currencies and exchange rates. Odoo supports vendor bills in foreign currencies and records their company-currency equivalents. Exchange differences are handled through the multi-currency accounting workflow when transactions are reconciled. See the official Odoo 19 multi-currency documentation.
Do not automatically treat every realised exchange difference as landed cost. A landed cost allocates an acquisition-related charge to inventory; an exchange gain or loss arises from currency movement and payment timing. Whether any FX component should be capitalised is an accounting-policy decision, not an Odoo checkbox. Keep the standard FX treatment unless the company’s accountant has approved a different, documented approach.
For the wider configuration, use the Odoo 19 multi-company and multi-currency setup guide.
GST, VAT and import tax require jurisdiction-specific mapping
Do not put every customs-broker invoice line into inventory value. Recoverable GST, VAT or similar input tax is generally different from non-recoverable duty or a genuine acquisition cost. The exact treatment varies by jurisdiction, registration status and transaction.
For an Australian entity, align the design with the company’s BAS and import-GST treatment; this Odoo GST and BAS configuration guide explains the broader localisation context. For New Zealand, the UK, EU countries, Canada, the US, UAE, Saudi Arabia, Qatar and Singapore, have the local accountant approve the tax map before live posting.
Controls that make the process audit-ready
- Reference discipline: store the carrier invoice, customs entry and shipment or container reference.
- Receipt matching: require a valid incoming transfer before approval.
- Master-data validation: block or flag weight/volume allocation when the driver is zero.
- Reasonable variance: compare the added cost per SKU with an approved tolerance.
- Separation of duties: the person entering the bill should not be the only reviewer of a material allocation.
- Period control: define how late charges affect locked or reported periods.
- Reconciliation report: show landed-cost bills, linked receipts, validation status, allocated totals and unresolved differences.
Operational alerts can also be incorporated into the wider controls described in Odoo 19 supply-chain alerts.
When standard Odoo is enough—and when to extend it
Standard Odoo is usually enough when the business has a modest shipment volume, clean receipt references, a small number of cost types and allocations that fit the five native methods.
Consider a controlled extension when the business needs:
- automatic matching from carrier or broker bills to receipts;
- different duty rates or manual allocation by product line;
- estimated landed costs followed by actual-cost variance settlement;
- shipment or container objects spanning several purchase orders;
- approval thresholds and exception queues;
- supplier, shipment and landed-margin reporting beyond the standard views.
Customisation should preserve Odoo’s valuation logic rather than bypass it with uncontrolled journal entries. Start with a written exception matrix, then decide whether Studio, automated actions or a tested custom module is the right tool.
Pre-go-live test script
- One receipt, one freight bill, one product.
- One receipt with products of different quantities, values, weights and volumes.
- One shipment linked to multiple receipts.
- A freight bill in a foreign currency.
- A charge received before delivery, after partial delivery and after full delivery.
- A supplier credit or corrected freight invoice.
- A product with missing weight or volume.
- Mixed taxable, recoverable-tax and non-recoverable-duty lines.
- A multi-company transaction where users must not see or post into the wrong entity.
- Reconciliation from source bill to landed-cost record, valuation result and general ledger.
For each scenario, capture the expected inventory value, unit-cost effect, journal outcome and approval owner before running the test. A screenshot that “looks right” is not acceptance evidence; the numbers must reconcile.
Frequently asked questions
What are Odoo 19 landed costs?
They are additional acquisition costs—such as freight, duty, insurance or handling—allocated across eligible products on completed receipts so inventory valuation reflects more than the supplier’s product price.
Which costing methods support landed costs in Odoo 19?
The native workflow is intended for products using FIFO or average cost (AVCO). Confirm the product category’s costing and valuation configuration before testing the accounting result.
Which landed-cost split method should I use?
Use the driver that reflects the charge: weight for weight-based freight, volume for cubic freight, current cost for value-based charges, quantity for comparable per-unit costs, and equal only for charges that genuinely belong equally to each eligible line.
Can Odoo 19 add landed costs after goods are received?
Yes, landed costs are applied to completed receipts. If the bill arrives after stock has already been delivered, test the valuation and accounting outcome for that timing and define a finance-approved late-cost policy.
Should foreign-exchange differences be posted as landed costs?
Not automatically. Odoo’s multi-currency workflow handles exchange differences separately. Capitalising any FX component requires a documented accounting-policy decision and should be validated by the company’s accountant.
Can Odoo calculate product-specific customs duty automatically?
The native landed-cost feature allocates amounts supplied to it using standard split methods. Product-specific tariff logic, HS-code rates or customs calculations may require a separate process or tested extension.
Does claimable GST or VAT belong in landed cost?
Recoverable tax is generally treated differently from a non-recoverable acquisition cost, but the answer depends on local rules and the entity’s status. Have the local accountant approve the tax mapping.
Final implementation advice
For importers, landed costs are not a minor inventory setting. They connect purchasing, warehouse receipts, accounts payable, tax, foreign currency and gross-margin reporting. Configure the native feature only after the allocation and cut-off rules are agreed, then prove them with end-to-end test cases.
If you are designing or correcting an Odoo 19 import-cost workflow, review my Odoo ERP services or book a short discussion. I will help you separate standard Odoo capability from the controls or customisation your operation actually needs—without making a pricing or delivery commitment before the scope is clear.