The Odoo Barcode app has no "filter by warehouse" control on an inventory adjustment. You scope the count before scanning in one of two documented ways: scan the location barcode first, which highlights that location and lists only the products stored in it, or scope the count on the Inventory side at Operations › Physical Inventory and push it to the scanner with Request a Count. Odoo groups barcode inventory adjustments by location by default, so location is the unit of scope, not warehouse.
This is the question people actually type, and it deserves a direct answer rather than a tour of the Barcode app: in Odoo 19, an inventory adjustment started from the scanner is scoped by location, and a warehouse is simply the parent of its locations. Once you know that, the confusion disappears and the workflow becomes obvious.
Everything below is taken from Odoo's own documentation for version 19 and linked so you can check it against your build. Where Odoo's behaviour depends on a setting you may not have switched on, that is called out rather than assumed.
How do you filter an inventory adjustment by warehouse before scanning?
Two paths, and they suit different operations.
Path one, at the scanner. Open the Barcode app and tap Count Inventory. Walk to the aisle and scan the location barcode. Odoo's barcode adjustments documentation states that scanning the location barcode highlights that location and displays the products stored there. From that point every product you scan is counted against that location. If multi-location storage is not enabled on your database, there is no location to scan and you go straight to product barcodes, which is exactly why some teams see no location step at all and assume the feature is missing.
Path two, from Inventory, before anyone picks up a scanner. Go to Inventory › Operations › Physical Inventory. This page lists in-stock products with On Hand, Counted, Difference and Location columns. Use the search bar's Group By to group by location, then use Request a Count to assign that set of locations to a user. What you assigned is what appears in their Barcode app under Count Inventory. This is the closest thing Odoo has to "filter by warehouse before scanning", and it is a manager-side action, not a scanner-side one.
There is a third control worth knowing about: the (actions) menu in the Barcode app offers Count Entire Locations, which counts everything in scope rather than only the products you physically scan. That distinction matters for variance, and it is covered below.
Which approach should you use?
| Situation | Use | Why |
|---|---|---|
| One counter, one aisle, ad hoc | Scan the location barcode in the Barcode app | No preparation needed; scope follows the person physically |
| Several counters, one warehouse, same day | Group By location in Physical Inventory, then Request a Count per user | Two people cannot count the same location and overwrite each other |
| Recurring counts on fast-moving locations | Inventory Frequency on the location | Odoo schedules the next count date itself after each adjustment is applied |
| Whole-site annual count | Annual Inventory Day and Month in Settings | Sets the date the full count is expected, database-wide |
| Counting a location that should be empty | Count Entire Locations from the actions menu | Scanning only what is present can never surface stock the system thinks is there and is not |
Where does the warehouse itself come in?
A warehouse in Odoo is a container for locations. When storage locations are enabled, the Location column appears on Physical Inventory and you can group and filter by it; when they are not, the whole database behaves as one implicit location and nothing to filter by exists. Teams that cannot find a warehouse filter are almost always on a database where multi-location storage was never switched on during implementation, or where every product sits in the default stock location of a single warehouse. The fix is a configuration decision, not a scanner setting.
This is also the point where a warehouse design that was never planned starts to cost money. If your locations are a flat list of shelf codes with no parent structure, grouping by location gives you hundreds of rows and no useful cycle-count unit. Getting that hierarchy right is part of any competent Odoo ERP implementation, and retrofitting it after a year of transactions is meaningfully harder than doing it before go-live.
How do you set up recurring cycle counts?
Per Odoo's cycle counts documentation, go to Inventory › Configuration › Locations, open a location, and set Inventory Frequency in the Cyclic Counting section. It defaults to 0, meaning no recurring count. Enter 30 and Odoo schedules that location every thirty days; after an adjustment is applied there, the next scheduled count date is set automatically from that value.
The database-wide equivalent lives at Inventory › Configuration › Settings, in the Operations section, as Annual Inventory Day and Month. It defaults to 31 December. That default is also why an untouched Odoo database shows a Scheduled Date of December 31 on adjustment lines — it is not a bug, it is the annual inventory date propagating down.
Entering and applying the count
On the scanner, scan each product barcode to record quantities. Tapping the edit icon opens a keypad window for typing a figure directly, and +1 and -1 adjust incrementally. Press Apply to commit. If the count was assigned through Request a Count with Show Expected Quantity enabled, the counter sees what Odoo expects to find.
Whether to show the expected quantity is a real operational trade-off and not a settings detail. Showing it makes counting faster and anchors the counter to the system figure, which suppresses the small discrepancies you most want to find. Hiding it produces slower, blinder, more honest counts. Most operations should hide it for cycle counts on high-value or high-shrink locations and show it everywhere else. Choose deliberately rather than inheriting the default.
From the Inventory side, the same adjustment is made by entering a figure in the Counted column and clicking Apply All; Odoo calculates Difference against On Hand for you. See Odoo's physical inventory documentation for the full field list.
The mistakes that cause most barcode count problems
Counting only what you scan. A scan-what-you-see count can confirm stock that is present but can never reveal stock the system thinks exists and does not. Phantom stock is the expensive error, and it is invisible to this method. Use Count Entire Locations when the point of the count is to find variance rather than confirm it.
Location barcodes that were never printed. Path one depends entirely on there being a scannable label on the rack. Plenty of go-lives configure locations correctly in Odoo and never produce the labels, at which point the scanner workflow silently degrades to path two and nobody records why.
Treating lots and serials as optional. If a product is tracked by lot or serial number, the adjustment needs that identifier, not just a quantity. This is the point where perishable and regulated inventory diverges sharply from general stock, and it is why grocery, pharma and FMCG operations need their location and tracking design settled before the first count. If that is your world, our work on ERP for supermarkets and FMCG distribution software covers the configuration this implies.
Assigning two counters to overlapping locations. Nothing in the Barcode app prevents it. Request a Count exists precisely so that scope is decided once, centrally, before anyone starts.
If your Odoo warehouse design is making counts harder than they should be, book a free audit and we will look at your location hierarchy, tracking settings and count schedule together.
Frequently asked questions
Can I filter an Odoo barcode inventory adjustment by warehouse?
Not directly. The Barcode app scopes an adjustment by location, and Odoo groups barcode inventory adjustments by location by default. To work at warehouse level, group by location in Inventory › Operations › Physical Inventory and assign the relevant locations with Request a Count.
Why does the Barcode app not ask me for a location?
Because multi-location storage is not enabled on the database. Odoo documents that when the multi-location feature is off you skip location scanning and go straight to product barcodes. Enable storage locations in Inventory settings if you need location-level counts.
What does Count Entire Locations do?
It is an option in the Barcode app's actions menu that counts everything in the location in scope, rather than only the products you scan. Use it when you are looking for stock that should not be there or stock that is missing.
How do I schedule counts automatically?
Set Inventory Frequency, in days, on the location at Inventory › Configuration › Locations. After an adjustment is applied to that location, Odoo sets the next scheduled count date from that value.
Why is the scheduled date on my adjustment 31 December?
That is the default of Annual Inventory Day and Month, found at Inventory › Configuration › Settings in the Operations section. Change it there if your financial year ends elsewhere.
Should counters see the expected quantity?
It depends on what the count is for. Showing it is faster and anchors counters to the system figure; hiding it produces more honest variance. Hide it on high-value or high-shrink locations, show it elsewhere.
Founder and CEO of Braincuber. Scopes Odoo, AI, and cloud projects for growing brands in India and abroad. Takes every founder call personally — no SDR layer between buyers and the people building the system.
