Your supplier invoice says 100 SAR per unit, but you also paid freight and insurance on the same shipment. If that money stays outside the item cost, your margin is calculated on a number lower than the real cost of the unit when it reaches your warehouse.

The practical answer: spread the shipment’s costs across the received items with Landed Costs in Odoo [1]. Management then sees two numbers per item: the purchase price from the supplier invoice, and a unit cost that can be compared with the selling price. The owner knows why the margin changed, purchasing knows the basis used to allocate freight, and finance has the adjustment document to review.

At ToDoOps we review the landed-cost decision with companies before it is configured, because the real decision is the allocation basis, not the compute step.

How do you calculate unit cost after freight in Odoo?

This is a hypothetical calculation, not client data. Product A: 100 units, purchase total 10,000 SAR. Product B: 200 units, purchase total 10,000 SAR. The freight invoice is 3,000 SAR, so total cost is 23,000 SAR before any tax.

On mobile, swipe the table horizontally to compare both products and see all columns.

Allocation basis Borne by A (SAR) A unit cost (SAR) Borne by B (SAR) B unit cost (SAR)
Invoice price only 0 100 0 50
By purchase value 1,500 115 1,500 57.50
By quantity 1,000 110 2,000 60

The last two rows both total 23,000 SAR. Only the split between the products changes.

If A sells at 130 SAR, the gap against the invoice price is 30 SAR per unit. After allocating by value, the gap against unit cost is 15 SAR. After allocating by quantity, it is 20 SAR. That gap is not the company’s net profit, because it excludes other expenses.

Notice that A bears 1,500 SAR by value but 1,000 SAR by quantity, while B is the reverse: 1,500, then 2,000. Same shipment, same amount, but the basis changes each product’s cost. You can lay out your own scope’s numbers with the ToDoOps calculators.

How Landed Costs works in Odoo 19 and how to choose a basis

According to the official documentation, you enable Landed Costs and set a default journal. Then you create a service product for freight with the Is a Landed Cost option. Five split methods are available [1]:

  • Equal: split equally between products regardless of their quantity. In the example, each product bears 1,500 SAR.
  • By Quantity: split per unit.
  • By Current Cost: split by the product’s current cost in the system. Check that it gives the same result as the value basis you chose before relying on it.
  • By Weight: split by weight.
  • By Volume: split by volume.

An important condition: the inventory category of the original products must use AVCO or FIFO. Do not assume Standard Price is suitable.

Choosing the basis follows where the transport cost comes from. If freight is priced by weight, weight is closer; if by volume, volume is closer. If you use weight or volume, first verify that the product data is correct. Do not change the basis to improve margin on paper, because finance will ask why it changed.

On the accounting side, IAS 2 includes in inventory cost the purchase cost, conversion costs, and other costs of bringing inventory to its present location and condition, and measures inventory at the lower of cost and net realisable value [2]. That differs from simply raising a unit cost: what goes into inventory is set by accounting policy, so do not add every general invoice or tax to inventory automatically.

On journal entries, do not assume an automatic entry in every case. Check the valuation setup and the timing of sales and receipts with finance. For the inventory and purchasing tools, see Odoo apps.

For an importer or distributor, this record helps finance explain an item-cost difference using its supporting document, and helps purchasing review shipment charges. The owner can discuss a selling price knowing which cost was allocated to the unit. See ToDoOps solutions by industry if branches or warehouses need a connected workflow.

Trial Odoo landed costs before you scale

  1. Pick one shipment with two products and one freight invoice.
  2. Prepare the freight service product and confirm the product category uses AVCO or FIFO.
  3. Create the cost record from the vendor bill or from Inventory then Operations, link it to the validated receipt, then click Compute.
  4. Review Valuation Adjustments and match them with your manual table together with finance, then Validate.
  5. Test a receipt followed by a late freight invoice, and record what changed and what needed adjustment. Do not assume the whole history is repriced automatically.

To see the sales and inventory logic in Odoo, you can use a sales and inventory simulation with hypothetical data. It is not a full accounting trial.

Frequently asked questions

Is Equal the same as By Quantity?

No. Equal splits between products equally whatever their quantities; By Quantity splits by number of units.

Does Standard Price work with Landed Costs?

The documentation requires the original products’ category to use AVCO or FIFO [1].

Should I add every general invoice or tax to inventory cost?

Not automatically. The standard ties cost to what is needed to bring inventory to its location and condition [2], and accounting policy decides what goes in.

What if the freight invoice arrives after the receipt?

It is an acceptance case you should test and have finance reconcile. We do not recommend assuming the system will reprice the whole history automatically.

What to send us so we can scope your case

Send us through the contact page one example shipment: the items, quantities and purchase prices, the freight and insurance lines you pay, your current inventory valuation method, and who approves the adjustment in finance. From that we define the trial scope. You can also review ToDoOps or lay out your numbers first in the calculators.

References

[1] Odoo 19 Documentation: Landed Costs (Inventory › Inventory valuation). The official guide to setup, split methods and validation steps.

[2] IFRS Foundation: IAS 2 Inventories. The reference standard for measuring inventory cost.