Every warehouse eventually faces the same uncomfortable screen: Odoo says there are eight units on the shelf, and the person standing at the shelf can see four. The wrong response is to panic-edit a quantity and move on. The right response is a proper inventory adjustment — a recorded count, applied deliberately, that moves the difference through a dedicated loss location so the correction is visible, valued and traceable later. This article explains how Odoo models adjustments, how to record and apply them correctly, when to use scrap instead, what happens to valuation, and how to investigate a discrepancy before you legitimise it with a click.
Why discrepancies happen in the first place
Stock records drift for ordinary reasons, not just dramatic ones. A receipt is validated without counting a short shipment, a picking sends a near-identical variant, a damaged unit is discarded without telling anyone, or a return is shelved but never processed. Each creates a gap between the recorded on-hand quantity and what a count actually finds.
That distinction is the whole design of the feature. An inventory adjustment does not overwrite history. It records a counted quantity next to the on-hand quantity, computes the difference, and — only when applied — creates stock moves that reconcile the two. Understanding that two-step design prevents the most common adjustment mistake in Odoo, described below.
How Odoo models an adjustment: the Inventory Loss location
Odoo categorises locations by type, and one type exists precisely for corrections: Inventory Loss — the counterpart location used to consume missing items or create stock, accounting for discrepancies. Two familiar locations are of this type: Inventory adjustment, used for count discrepancies, and Scrap, used for damaged goods.
The official documentation gives the cleanest example. A database shows 8 units in WH/Stock, but an inventory check reveals 4. To correct the quantity, four units are moved from WH/Stock to the Inventory adjustment location. Found stock works in reverse: if the count finds more than the system expects, the extra units move from Inventory adjustment into stock. Nothing is deleted and nothing appears from nowhere — every correction is a move between a real location and the loss location, which is why adjustments show up in move history and valuation like any other stock movement.
To audit corrections, look at moves to and from the inventory loss locations, filtered by date, product and user — not for an edit log on the product.
The Physical Inventory page, column by column
Adjustments live under Inventory → Operations → Physical Inventory (labelled Inventory Adjustments in older versions). Each line carries the fields that matter:
- Location — essential, because the same product can be stored in several locations and a count is always a count somewhere.
- Product and, for tracked products, Lot/Serial Number — a count for the wrong lot corrects nothing.
- On Hand — the quantity Odoo currently believes is there.
- Counted — the quantity actually found. This is the field you edit.
- Difference — counted minus on-hand. If the counted quantity is greater, the difference shows green; if it is less, it shows red as a negative value; if the quantities match, the difference is
0.00. - Scheduled date and User — when the adjustment should be processed, and who is responsible for the line, which gives each count an owner for traceability.
Two entry paths cover most needs. For a single product, open the product, click the Forecasted smart button or Update Quantity, then create the adjustment line there. For a count across many products, click New on the Physical Inventory page: a blank line appears, you choose the location, product and lot if required, and set the Counted value. One warning from the documentation deserves bold type in every warehouse procedure: the Counted quantity for a new adjustment defaults to 0.00. If you save a line without setting it, you have recorded a count of zero — and if someone later applies it, you have just written off the entire location quantity for that product.
The step everyone misses: recorded is not applied
Here is the behaviour that generates the most “Odoo didn't update my stock” reports. After you enter a count, the adjustment is recorded but not yet applied. In the documentation's words, the quantity on hand before the adjustment has not yet been updated to match the new, real counted quantity. Entering numbers changes nothing in stock until you apply them.
Applying is explicit, in either of two ways:
- Click the Apply button at the far right of an individual line, or
- Select lines with the checkboxes on the left and use Apply All for the selected set.
Only at that moment does Odoo create the reconciling stock move — out to Inventory adjustment for a shortage, in from Inventory adjustment for an overage — and update on-hand quantities and valuation. Build your procedure around this separation rather than fighting it: counting and applying are two different acts of responsibility. One person can count a whole aisle and record every line; a supervisor can review the differences, investigate the large ones, and only then apply. The un-applied state is your review queue, not a bug.
After applying, verify in two places: the product's on-hand quantity should now equal the counted quantity at that location, and the move should appear in Inventory → Reporting → Move History with the inventory loss location as its counterpart. If either check fails, the line was almost certainly recorded but never applied.
Adjustment or scrap? Choosing the right correction
Because both adjustments and scrap use inventory loss locations, teams often use them interchangeably. They should not.
- Use an inventory adjustment when the stock is simply not there (or extra stock is found) and the count is the source of truth: shrinkage, miscounts, unrecorded breakage discovered at count time, found stock.
- Use scrap when you are holding specific, identified goods that are damaged, expired or otherwise unusable, and you are deliberately removing them. Scrap starts from Operations → Scrap, or directly from a receipt, delivery or manufacturing order via its Scrap action, names the product and quantity, and can be linked to the source operation. Scrapping two damaged units from a receipt of ten leaves eight on hand and a scrap record that explains exactly which goods died and where they came from.
The test is evidence: if you can point at the items being removed, scrap them; if they are simply missing when counted, adjust.
What an adjustment does to valuation
Quantities are only half the record. If a product's category uses automated inventory valuation, the reconciling move also moves money. Writing off four units removes four units' worth of value from the stock valuation account through the stock journal; finding four units adds it back. The unit value used follows the product category's costing method — under average cost (AVCO) the current average unit cost, under FIFO the value of the remaining incoming moves — which is why large write-offs in a month-end week deserve an accountant's glance, not just a warehouse manager's.
Three valuation habits keep adjustments clean:
- Do not use adjustments to fix prices. A wrong unit cost is a revaluation problem, not a quantity problem.
- Apply adjustments in the period the count happened. Backdating across a closed period turns a warehouse fix into an accounting argument.
- Review valuation after a big count — check total value against the new quantities before the period closes.
Investigate before you apply: a short routine
An adjustment makes the system match the shelf. It does not explain why they differed, and applying large differences without a look is how theft, process leaks and integration bugs get laundered into “shrinkage”. Before applying any line beyond a trivial threshold, run this routine:
- Recount the location. Many “discrepancies” are counting errors.
- Read the move history for the product since the last clean count. Look for an unvalidated or duplicated transfer, a delivery validated twice, or a receipt posted to a different location than the physical putaway.
- Check pending operations. Stock that is picked but not yet validated, or received but still in an input or quality step in a multi-step flow, can look missing from the shelf location while being perfectly accounted for elsewhere.
- Check lots and packages. Units often exist under a different lot, or inside a package counted as one.
- Then apply, with the reason preserved. Keep count lines assigned to a named user, keep scheduled dates accurate, and where your process allows notes or a chatter message on related operations, record what the investigation found. A future reader should be able to distinguish “supplier short-shipped us for months” from “we counted badly once”.
Making discrepancies rarer
Count little and often — cycle counts instead of one annual count whose differences are too old to investigate. Scan at receipt, picking and putaway, because most discrepancies start as identification errors. Set an approval threshold for large differences so a line that wipes out half a location cannot be applied by the same person who counted it, unreviewed.
Handled this way, an inventory adjustment is not an admission of failure and it is never a quiet edit. It is a counted fact, recorded separately from the system's belief, reviewed, and then applied as an explicit move through the Inventory Loss location — leaving quantities correct, valuation consistent, and a clear trail.
Further reading
- Inventory management and locations — Odoo documentation
- Valuation cheat sheet — Odoo documentation
- Stock Inventory Discrepancy — Odoo Apps Store
