Skip to main content
iVentureTeam
Inventory Valuation

Odoo Removal Strategies: FIFO, LIFO, FEFO Setup and Valuation Impact

Set up Odoo removal strategies in Odoo 19 and 20: FIFO, LIFO, FEFO with expiry dates, Closest Location and Least Packages, plus their valuation impact.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
November 12, 202614 min read1 view
Odoo Removal Strategies: FIFO, LIFO, FEFO Setup and Valuation Impact cover

Most guides list the five options and stop. The real work is choosing the right rule for each product family, setting the dates that FEFO depends on, and checking what happens in accounting. Our Odoo implementation services cover that design end to end.

This guide is for warehouse managers, operations leads and finance teams running Odoo 19 or 20. For the wider picture of routes, putaway and barcode picking, read our Odoo warehouse management system guide.

What are removal strategies in Odoo?

A removal strategy in Odoo is the rule that picks which units leave the warehouse first when a delivery, manufacturing order or transfer reserves stock. It works on lots, serial numbers, packages and locations.

When you confirm a sales order, Odoo reserves stock on the delivery order. The removal strategy sorts the available stock and reserves from the top of that list. You can see the result in the Detailed Operations window, in the Pick From column.

The Odoo 20 removal strategies documentation lists five options. Each one sorts stock by a different field, so each one needs different features turned on.

How do FIFO, LIFO, FEFO and the other Odoo removal strategies compare?

Odoo removal strategies: Which rule picks your stock first?

FIFO and LIFO sort by arrival date, FEFO sorts by removal date, Closest Location sorts by location name, and Least Packages opens as few packages as possible. The table shows what each one needs.

StrategySorts stock byPicks firstFeatures requiredTypical fit
FIFO (default)Incoming dateOldest stockLots & Serial NumbersFashion, electronics, general goods
LIFOIncoming dateNewest stockLots & Serial NumbersBulk goods that do not age
FEFORemoval dateFirst to expireLots & Serial Numbers, Expiration DatesFood, pharma, cosmetics, chemicals
Closest LocationLocation name orderNearest shelfStorage Locations, Multi-Step RoutesLarge warehouses, fast movers
Least PackagesPackage quantityFewest packagesPackagesBulk flour, powders, cartons

Odoo's own docs warn that LIFO is banned in many countries for picking, because it can send old, expired or obsolete products to customers. Treat LIFO as a niche choice, not a default.

Product category or location: which removal strategy wins?

When a product category and a location both carry a removal strategy, the category's Force Removal Strategy always wins. If the category is empty, Odoo uses the location's rule, then the parent location's rule, then FIFO.

Odoo checks the rule in this order:

  1. Product category: the Force Removal Strategy field on the category form.
  2. Storage location: the Removal Strategy field on the location where stock is reserved.
  3. Parent locations: Odoo walks up the location tree, for example from WH/Stock/Shelf 1 to WH/Stock.
  4. Default: if nothing is set anywhere, FIFO applies.

This order matters in practice. If you set Closest Location on WH/Stock but your category says FEFO, pickers get FEFO. Set the category only when the rule follows the product, and set the location when the rule follows the warehouse layout.

How do you set up a removal strategy in Odoo 19 and 20?

Turn on the features the strategy needs, track the product by lots, assign lots on receipt, then set the strategy on the category or location. The menu paths are the same in Odoo 19 and Odoo 20.

  1. Enable features: go to Inventory, Configuration, Settings. Under Traceability, tick Lots & Serial Numbers, and Expiration Dates if you plan to use FEFO.
  2. Enable locations: under Warehouse, tick Storage Locations and Multi-Step Routes. You only need these to set a strategy on a location.
  3. Enable packages: under Operations, tick Packages if you plan to use Least Packages.
  4. Track the product: open Inventory, Products, Products, then the General Information tab, and set Tracking to By Lots or By Unique Serial Number.
  5. Assign lots: record lot numbers on the receipt, or load existing stock with an inventory adjustment.
  6. Set on a category: open Inventory, Configuration, Categories, pick the category and choose the Force Removal Strategy.
  7. Or set on a location: open Inventory, Configuration, Locations, pick the location and choose the Removal Strategy under Logistics.
  8. Test it: confirm a sales order, open the delivery, click Details on the product line and check the Pick From column.

In Odoo 19 and 20 the Tracking setting sits on the General Information tab of the product form. Older guides send you to the Inventory tab, which is why many users cannot find it after an upgrade.

How does FIFO removal work in Odoo?

FIFO removal picks the lot with the earliest arrival date first, so the oldest stock leaves before newer stock. Odoo treats the lot's Created on date as its arrival date.

Here is an illustrative example. A shirt is tracked by lots in a category set to FIFO, and a customer orders six units.

LotOn handArrivedReserved by FIFO
LOT15March 15
LOT23April 11
LOT32May 10

Odoo takes all five units of LOT1 and one unit of LOT2. To check arrival dates, open Inventory, Products, Lots/Serial Numbers, group by product and read the Created on column.

FIFO suits products with short demand cycles, such as clothing styles or electronics models, where old stock loses value if it sits too long.

How does FEFO work with expiry dates in Odoo?

FEFO picks the lot with the earliest removal date first, so stock that must leave the shelf soonest is shipped first. It sorts by removal date, not by expiration date, and that detail trips up many teams.

On the product form, the Inventory tab holds four date settings once Expiration Date is ticked:

  • Expiration Date: days after receipt when the product expires.
  • Best Before Date: days before expiration when quality starts to drop.
  • Removal Date: days before expiration when the lot must leave stock.
  • Alert Date: days before expiration when Odoo raises an alert.

The Odoo FEFO documentation gives the formula. Expiration date equals receipt date plus the expiration days. Removal date equals expiration date minus the removal days.

Here is an illustrative example. Yogurt has a 30-day expiration and a 10-day removal setting. A lot received on March 1 expires on March 31 and has a removal date of March 21, so FEFO ships it before a lot received on March 5.

One user on the Odoo forum found that FEFO uses the removal date rather than the expiry date when allocating stock. If removal days are blank or uneven across lots, FEFO can look broken when it is working as designed.

Odoo also counts a lot past its removal date as zero available quantity. That keeps stale stock out of new reservations, but it can surprise sales teams who still see the lot on hand. Our food manufacturing guide covers expiry, recalls and FEFO for perishable lines.

When should you use LIFO, Closest Location or Least Packages?

Use LIFO only for goods that do not age, Closest Location to cut walking time, and Least Packages to avoid opening extra cartons or sacks. Each solves a narrow problem well.

LIFO reserves the newest lot first. It can suit stacked bulk goods such as cinder blocks or aggregates, where the last pallet in is the easiest to reach. Avoid it for anything that expires or goes out of style.

Closest Location picks from the location whose name comes first in alphanumeric order. Name your bins by distance from the packing area, for example Shelf A/Pallet before Shelf A/Rack 1, and set the rule on the parent location. Read the Closest Location documentation before you rename locations.

On the Odoo forum, users have asked how Closest Location is defined. The answer is name order, so a bin called "Z Front" is treated as far away even if it sits by the door.

Least Packages fills the order from the fewest packages. In Odoo's example, a 54 kg open sack of flour covers a 14 kg order, while an 80 kg order takes an unopened 100 kg sack. The Least Packages documentation shows the full flow.

You can combine rules. A location can use Closest Location for heavy goods while one category, such as baking materials, forces Least Packages.

Do removal strategies change inventory valuation in Odoo?

No, a removal strategy only changes which physical units are picked; the costing method on the product category sets the value that leaves stock. Odoo's valuation cheat sheet says removal strategies "only impact which product is first picked, not the valuation method."

Odoo supports three costing methods: Standard Cost, Average Cost (AVCO) and FIFO. There is no LIFO costing method, and Odoo notes that LIFO is not allowed by IFRS. You can pick by LIFO or FEFO while you value stock with AVCO or FIFO.

Odoo's cheat sheet uses one scenario for all three methods: receive 8 units at $10, receive 4 at $16, then deliver 10.

Costing methodValue of the 10 deliveredValue left for 2 unitsWhat drives it
Standard$100 (10 x $10)$20Fixed cost on the product
AVCO$120 (10 x $12)$24Weighted average of all units
FIFO$112 (8 x $10 + 2 x $16)$32Oldest cost layers first

The removal strategy does not appear in that table, because it does not change the math. A FEFO pick of a newer lot is still valued by the costing method you chose.

There is one exception worth knowing. Odoo can value stock by lot or serial number when the category uses FIFO or AVCO and you tick Valuation by Lot/Serial number on the product. Each lot then keeps its own valuation layers, so the lot you pick carries its own cost.

Use lot valuation when lot costs differ a lot, such as imported batches or graded raw materials. Our post on Odoo 20 inventory valuation changes, FIFO vs AVCO explains how to choose a costing method, and our Odoo COGS guide shows how the cost posts.

What changed for removal strategies in Odoo 19 and 20?

The five strategies and their priority rules are the same in Odoo 19 and 20, but tracking, valuation and reporting around them have moved on. These are the changes that affect a removal strategy setup.

  • Tracking field moved: in Odoo 19 and 20 docs, Tracking sits on the product's General Information tab.
  • Perpetual valuation (Odoo 19): Odoo now posts perpetual stock valuation at the invoice level and uses a closing entry for gaps, instead of a journal entry at every stock move.
  • Retroactive COGS (Odoo 20): if a receipt's cost changes after delivery, for example through a landed cost, Odoo replays the valuation and updates the delivery's value.
  • Traceability report (Odoo 20): the report now shows upstream and downstream lots in one tree, which helps you check which lot FEFO shipped.
  • Simpler returns (Odoo 20): the return wizard is gone; Odoo creates a draft return transfer directly.

Our Odoo 20 inventory release notes list every Inventory change with screenshots and menu paths.

What are the most common removal strategy mistakes?

Most removal strategy problems come from missing dates, a category rule that overrides the location, or products that are not tracked by lots. Check these before you raise a support ticket.

  • FIFO set where FEFO was meant: one forum user had FIFO reserving a lot with a later best-before date and found the category was on FIFO, not FEFO.
  • Blank removal days: FEFO cannot sort lots well without a removal date on each lot.
  • Category overrides location: a Force Removal Strategy on the category hides the location rule you just set.
  • Products not tracked: FIFO, LIFO and FEFO work best on products tracked by lots or serial numbers.
  • Random bin names: Closest Location follows name order, so bin names must follow distance.
  • Expecting valuation to change: switching to LIFO picking will not change cost of goods sold.
  • Manual lot edits: when pickers overwrite the reserved lot by hand, the strategy is bypassed; train users to scan the suggested lot.

Lot tracking is the base for most of these fixes. Our Odoo traceability guide walks through lot and serial number setup.

Which removal strategy fits your industry?

Perishable industries need FEFO, fashion and electronics need FIFO, and bulk or large warehouses gain from Closest Location and Least Packages. The table shows how we usually map them.

IndustryPain or cost driverOdoo approachHow iVentureTeam helps
Food and beverageSpoilage, recalls, retailer shelf-life rulesFEFO on category, lot expiry datesSet date rules per product family
Pharma and cosmeticsExpiry, batch auditsFEFO, lots, traceability reportMap batch data on receipt
Fashion and retailOld styles losing valueFIFO by lotClean lots and categories at go-live
Electronics distributionModels replaced fastFIFO, serial numbersSerial tracking and receipt scanning
Logistics and 3PLPicker walking timeClosest Location on parent locationRename bins by distance
Bulk materials and millingOpened sacks, spillageLeast Packages on categoryPackage setup and putaway rules

Logistics and manufacturing teams usually need several rules in one warehouse. See our pages on Odoo ERP for logistics and Odoo ERP for manufacturing.

How iVentureTeam helps with Odoo removal strategies

Planning inventory? Price the project

We set removal strategies as part of a full inventory design, so categories, locations, lots and costing work together. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.

  • Strategy map: we assign FIFO, FEFO or another rule to each product family and warehouse zone.
  • Date and lot setup: we load expiration, removal and alert days, and clean lot data before go-live.
  • Location naming: we rename bins so Closest Location follows real walking distance.
  • Valuation check: we confirm the costing method and lot valuation with your finance team.
  • Custom rules: when a standard rule is not enough, our Odoo customization services build one that still upgrades cleanly.

To budget an inventory project, try our Odoo implementation cost calculator.

Odoo removal strategies case study: KMF Technologies

Removal strategies only work when warehouses, categories and locations are set up properly, and that groundwork is what KMF Technologies needed first. KMF supplies IT services, hardware and network infrastructure in The Gambia.

KMF tracked products and categories by hand. It had no real-time stock view, which led to overstocking and stock-outs, and sales, purchase and store teams could not see each other's data.

We implemented Odoo Sales, Purchase, Inventory and Accounting over 8 weeks in phases. We defined warehouses, product categories, stock locations and units of measure, which are the same records that carry removal strategies, and imported the full product master with cost and sale prices.

KMF now has real-time stock across warehouses and fewer stock entry errors. Its director said, "Inventory in Odoo matches the shelf, and purchasing finally runs on real numbers." Read the KMF Technologies Odoo inventory case study.

The bottom line on Odoo removal strategies

Use FEFO for anything that expires, FIFO for most other goods, and Closest Location or Least Packages to speed up picking, while you choose valuation separately. The strategy moves boxes; the costing method moves money.

Set the rule on the category when it follows the product and on the location when it follows the layout. Fill in the dates FEFO needs, test with a real delivery, and check the Pick From column before go-live.

Ready to set up removal strategies that match your warehouse?

Book an inventory review

Get a removal strategy and valuation review from a team that runs Odoo warehouses every week. Plan your Odoo inventory setup with us, call +91-90235-15208, or email business@iventureteam.com.

Frequently Asked Questions

What is the default removal strategy in Odoo?

+

FIFO is the default. If no removal strategy is set on the product category, the location or any parent location, Odoo picks the oldest stock first based on its incoming date.

What is the difference between FIFO and FEFO in Odoo?

+

FIFO picks the lot that arrived first. FEFO picks the lot with the earliest removal date, which Odoo calculates from the expiration date. A newer lot can ship first under FEFO if it expires sooner.

How do I enable FEFO in Odoo?

+

Enable Lots & Serial Numbers and Expiration Dates in Inventory settings, track the product by lots, set expiration and removal days on the product, then set First Expiry First Out (FEFO) on its category or location.

Does LIFO removal change my cost of goods sold in Odoo?

+

No. Removal strategies only decide which units are picked. Odoo values stock with Standard, AVCO or FIFO costing, and it has no LIFO costing method, so cost of goods sold follows the costing method.

Which wins, the product category or the location removal strategy?

+

The product category wins. Its Force Removal Strategy overrides any rule on the location. If the category is empty, Odoo uses the location, then its parent locations, then FIFO.

Why is FEFO not picking the lot that expires first?

+

FEFO sorts by removal date, not expiration date. If removal days are missing or differ between lots, the order can look wrong. Also check that the category is not forcing FIFO instead.

How does the Closest Location removal strategy decide what is closest?

+

It uses the alphanumeric order of location names, not physical distance. Name bins by distance from the packing area and set the rule on the parent location, such as WH/Stock.

Can I use different removal strategies in one warehouse?

+

Yes. Set a strategy on each storage location for layout-based rules, and set Force Removal Strategy on product categories for product-based rules, such as FEFO for food in a Closest Location warehouse.

Free written answer from a certified consultant

Getting inventory valuation right in Odoo?

We review your costing method and valuation setup in Odoo and show what to fix before it reaches your books.

Free, with no obligation. A senior consultant replies within 12 business hours.