Structuring Inventory for Better Visibility and Control
Warehouses and locations are two of the most important structural elements in Odoo Inventory.
At first glance, they may appear to simply represent where products are stored. In reality, they play a much larger role. Warehouses and locations help define how inventory is received, stored, transferred, counted, picked, adjusted, and valued throughout the system.
When they are configured properly, they create a clear operational map of the business. Teams can see where products are stored, where they are moving, and how stock is distributed across different areas or facilities.
When they are configured without enough planning, inventory visibility can become unreliable. Products may appear available in the system but be difficult to find physically. Stock may be counted in one area while actually sitting somewhere else. Internal transfers may become harder to manage. Warehouse teams may begin relying on manual workarounds outside the system.
For this reason, warehouses and locations should not be treated as simple setup details. They are part of the operational foundation of Odoo Inventory.
Warehouses vs. Locations in Odoo
In Odoo, it is important to understand the difference between a warehouse and a location.
A warehouse represents a physical place, with its own operational address, where inventory is stored.. This could be a main warehouse, retail stockroom, production facility, distribution center, or secondary storage site.
A location represents a more specific space within a warehouse. Locations can represent areas such as stock rooms, receiving docks, aisles, shelves, bins, packing zones, quality control areas, or shipping areas.
For example, a company warehouse may be structured in Odoo with the following hierarchy of locations:
WH
The main warehouse.
WH / Stock
The primary stock location inside the warehouse.
WH / Stock / Zone A
A specific area within stock, such as a refrigerated or controlled storage zone.
WH / Stock / Shelf 1
A shelf location used to organize products more precisely.
WH / Stock / Shelf 2
Another shelf location within the same stock area.
WH / Stock / Zone A / Small Refrigerator
A more specific storage location inside Zone A.
WH / Stock / Shelf 1 / Area 2
A sub-location within Shelf 1 for even more detailed inventory tracking.

This type of structure helps a business move beyond simply knowing that a product is “in the warehouse.” It shows exactly where the product is stored, making receiving, picking, replenishment, and inventory counts easier to manage.
That level of detail becomes increasingly important as a business grows. A small company may be able to operate with a simple stock location. A larger warehouse, however, often needs more structure to support receiving, picking, packing, counting, and internal movement.
Setting Up a Warehouse in Odoo
Before creating detailed storage locations, it is important to understand how the warehouse itself is configured.
In Odoo, warehouses are managed from Inventory → Configuration → Warehouses. Each warehouse represents a physical facility, stockroom, distribution center, retail storage area, or operational site where inventory is stored and managed.

The first step in setting up a warehouse in Odoo is defining the warehouse details. This section controls how the warehouse is identified in the system, which company it belongs to, and which physical or operational address it represents.

The Warehouse field is the full name of the warehouse in Odoo. It should clearly identify the facility, stock site, or operational location being managed.
The Short Name is the warehouse code used throughout Odoo on inventory documents, receipts, deliveries, internal transfers, and stock references. The default warehouse is commonly shown as WH.
In Odoo, the short name is limited to five characters, so it should be concise, recognizable, and easy for users to understand.
Because this code appears across many inventory operations, it should be chosen carefully. Changing it later can create confusion for users who are already familiar with existing warehouse references.
The Company field determines which company owns or operates the warehouse.
In a single-company database, this is usually straightforward. In a multi-company environment, this field becomes more important because each warehouse must be assigned to the correct legal or operational entity.
The Address field identifies the physical or operational address of the warehouse.
After the warehouse details are defined, the next step is configuring how the warehouse operates. The Warehouse Configuration section controls the main inventory flows for the warehouse, including how products are received, delivered, manufactured, and replenished. These settings are important because they determine which operational steps Odoo creates for incoming shipments, outgoing shipments, manufacturing orders, and resupply processes.

Shipments
The Shipments section defines how incoming and outgoing product movements are processed for the warehouse.
These settings are important because they determine how many inventory operations Odoo creates when products are received from vendors or delivered to customers. More steps provide more control and traceability, but they also add more operational work for the warehouse team.
These options become especially important when Multi-Step Routes are enabled, because Odoo can then manage receipts and deliveries through more controlled operational steps.
Resupply
The Resupply section controls how the warehouse can be replenished. This can include manufacturing products for the warehouse, purchasing products into the warehouse, or pulling stock from another warehouse.
The Manufacture to Resupply option allows products to be manufactured for this warehouse.
When this option is enabled, Odoo allows the warehouse to use manufacturing as a replenishment method. This is relevant for companies that produce finished goods internally instead of only buying them from vendors.
The Manufacture field determines how manufacturing operations are processed for the warehouse.
These options are connected to Odoo’s routing structure. When a warehouse uses one-step, two-step, or three-step manufacturing, Odoo uses routes and locations behind the scenes to control whether components are consumed directly, picked before production, or whether finished products are stored after production.
The Buy to Resupply option allows purchased products to be delivered to this warehouse.
When enabled, the warehouse can be replenished through purchasing. This is useful when products are bought from vendors and received into this specific warehouse.
The Resupply From field is used when the database has multiple warehouses.
This setting allows one warehouse to be replenished from another warehouse. For example, a retail location may be resupplied from a central distribution warehouse. When configured, Odoo can create routes that move stock from the supplying warehouse to the warehouse that needs replenishment.
These settings create the operational framework for the warehouse. The routes behind these workflows are what tell Odoo how products should move between locations, but those routes deserve their own explanation. We will cover Odoo inventory routes in a separate article.
Storage Locations in Odoo
To properly track locations in Odoo, the Storage Locations feature must first be enabled. To do this, go to Inventory → Configuration → Settings and enable Storage Locations under the Warehouse section.

Once storage locations are enabled, businesses can configure them directly from the warehouse section in Settings by clicking Locations, or in Inventory → Configuration → Locations. This is where Odoo allows the warehouse to be broken down into the specific areas where products are stored, received, picked, packed, transferred, adjusted, or shipped.

These locations can then be used across receipts, deliveries, internal transfers, inventory adjustments, routes, putaway rules, removal strategies, and reporting. In other words, locations are not just labels. They become part of how inventory actually moves through the system.
In a simple setup, a company may only need one main stock location, such as:
WH / Stock
In a more advanced setup, that same warehouse may be divided into several operational areas:
WH / Receiving
WH / Quality Control
WH / Stock
WH / Stock / Zone A
WH / Stock / Zone A / Shelf 1
WH / Packing
WH / Shipping
The goal is not to create unnecessary complexity. A location structure should reflect the real movement of inventory through the business. If a team does not physically receive, inspect, store, pick, pack, or ship products from separate areas, those extra locations may not be needed. A simpler structure is usually easier to maintain, easier to train, and less likely to create operational errors.
The key is to create enough detail to support the warehouse process without turning the system into a map of every corner, shelf, or bin unless that level of tracking is actually useful.
How Locations Shape Inventory Movement
Once locations are configured, they become part of the way Odoo understands inventory movement.
Every inventory movement in Odoo has a source location and a destination location.
When products are received from a vendor, inventory moves from a vendor location into an internal location.

When products are delivered to a customer, inventory moves from an internal location to a customer location.

When products are moved inside the business, inventory moves from one internal location to another.

This means locations are not just labels. They help Odoo understand where inventory came from, where it is going, and what type of operation is taking place.
In practice, most inventory movements are tied to three common operations:
Receipts bring products into the warehouse.
Deliveries move products out to customers.
Internal transfers move products between warehouse areas, storage locations, or warehouses.
If the location structure is unclear, these movements become harder to manage. A product may technically be in stock, but if it is sitting in the wrong location, the warehouse team may not be able to find it, pick it, or ship it efficiently.
Setting Up a Location in Odoo
After storage locations are enabled, the next step is understanding how each location is configured.
When creating a new location, Odoo asks for a few key details that determine where the location sits in the warehouse structure and how it should behave during inventory operations.
When creating a location in Odoo, the first fields to understand are the Location Name and Parent Location.

The Location Name is the name of the physical or operational area being created.
The Parent Location determines where the new location sits in the warehouse hierarchy.
In practical terms, the Location Name identifies the area, while the Parent Location defines where that area belongs in the overall warehouse structure.
Additional Information Section
When setting up a location in Odoo, there is also an Additional Information section. This section includes settings that can influence how the location is used during inventory operations.

The Location Type tells Odoo what kind of location this is and how it should be treated in inventory movements. These will be covered in more detail later in the article, but the key point is that the location type affects how Odoo tracks product movement and inventory value.
The Storage Category field is used to group locations based on how products can be stored there.
Storage categories are mainly used with putaway rules to help Odoo recommend the right storage location when products are received. They can also define capacity limits based on weight, product quantity, or package type.
For example, a business may use storage categories to identify locations such as small shelves, pallet spaces, refrigerated storage, overflow areas, or bulk storage.
For a basic warehouse setup, this field does not always need to be configured right away. It becomes more relevant when the warehouse needs Odoo to recommend storage locations based on capacity, storage rules, or product requirements.
Because storage categories are closely connected to putaway rules, they should be planned as part of the broader warehouse routing strategy. We will cover putaway rules and storage categories in more detail in a separate article.
The Company field determines which company the location belongs to. This is mainly important in multi-company environments. If the database only has one operating company, this field is usually straightforward.
In a multi-company setup, assigning the correct company helps prevent inventory locations and movements from being used by the wrong company.
A Barcode can be assigned to a location so warehouse users can scan it during inventory operations. This is useful when using the Odoo Barcode app. Instead of manually selecting a location such as WH / Stock / Shelf 3, a user can scan the barcode attached to that shelf, bin, or area.
The Replenishments checkbox is used when configuring routes.
When enabled, the location can be set as a destination for receiving products through routes such as Buy, Manufacture, or other procurement flows. In practical terms, this helps Odoo understand that products can be replenished into that location when the proper route logic is configured.
Below the Additional Information section, Odoo also includes settings for Cyclic Counting and Logistics. These settings are less about identifying the location and more about controlling how the location is managed over time.

The Cyclic Counting section helps define how often inventory should be counted for that specific location. This is useful when certain shelves, bins, or stock areas need to be checked more frequently than others.
The Inventory Frequency (Days) field sets the number of days between scheduled inventory counts for the location. By default, this value is set to 0, meaning no recurring count is scheduled for that location. For example, setting the value to 30 means the location should be counted every 30 days.
The Last Inventory field shows the last date an inventory count was completed for the location. The Next Expected field shows the next expected count date based on the inventory frequency.
The Logistics section controls how products should be removed from the location when they are needed for inventory operations.
The Removal Strategy field determines the picking priority for products stored in that location. Depending on the warehouse setup, this can include strategies such as FIFO, LIFO, FEFO, Closest Location, or Least Packages.
This field is important because it helps Odoo determine which stock should be selected first. However, removal strategies can also be configured on product categories, and those settings may take priority. Because of that, removal strategies should be planned carefully. To learn more about how product categories affect inventory configuration, you can review our separate article on product categories.
Location Types in Odoo
Odoo uses different location types to define how each location behaves within inventory operations.
These types help the system understand whether products are physically stored, externally sourced, delivered to customers, lost, consumed, manufactured, or in transit.
The main location types include:
Vendor
Virtual
Internal
Customer
Inventory Loss
Production
Transit

Internal Locations
Internal locations represent physical storage areas controlled by the company.
These are the locations where inventory is actively stored and managed. Examples include stock rooms, shelves, aisles, bins, picking areas, receiving areas, packing areas, or warehouse zones.
Internal locations are the most important locations for day-to-day warehouse operations because they represent stock that belongs to the company and is physically available within the business.
When products are stored in internal locations, they are considered part of the company’s inventory, depending on the broader inventory configuration and operation status.
This makes internal locations especially important for stock visibility, fulfillment, reporting, and warehouse control.
Vendor Locations
Vendor locations represent where products come from when they are purchased.
In Odoo, a receipt usually moves inventory from a vendor location into an internal location. The vendor location does not represent a physical space inside the company’s warehouse. It represents the external source of the goods.
For example, when a purchase order is received, the movement may look like this:
Vendor → WH/Stock
This allows Odoo to record that inventory entered the company’s warehouse from an external supplier.
Vendor locations help separate stock that is outside the company from stock that has been physically received. This distinction matters because products should not be treated as available inventory until they have entered the proper internal location.
Customer Locations
Customer locations represent where products go when they are sold and delivered.
When a sales order is fulfilled, the product usually moves from an internal location to a customer location.
For example:
WH/Stock → Customer
This does not mean Odoo is tracking the exact shelf, facility, or address of the customer. Instead, the customer location acts as the destination for sold goods. Once products move to a customer location, they are no longer considered part of the company’s internal stock.
Customer locations are important because they help Odoo distinguish between inventory that is still owned and managed internally and inventory that has already left the business through a delivery operation.
Virtual Locations
Virtual locations are used to organize inventory structure or represent inventory situations that do not correspond to a physical shelf or bin.
A common example is the top-level warehouse view location. For example, WH may act as a virtual parent location that groups together several internal locations such as Stock, Receiving, Quality Control, Packing, and Shipping.
Virtual locations help organize the location hierarchy, but they should not normally hold products directly.
This is an important distinction. A virtual location can help structure the system, but stock should usually sit in a specific internal location beneath that structure.
This makes reporting, picking, and warehouse visibility much clearer.
Inventory Loss Locations
Inventory loss locations are used to account for discrepancies, damaged products, lost stock, or inventory adjustments.
For example, if the system shows 10 units on hand but a physical count finds only 8 units, Odoo needs a way to record the difference. That missing quantity can be moved to an inventory loss location through an inventory adjustment.
Scrap is another common example. If products are damaged, expired, or unusable, they may be moved to a scrap location to reflect that they should no longer be available for sale or use.
Inventory loss locations are important because they allow companies to correct inventory without simply deleting records or manually changing numbers without traceability.
This creates a clearer audit trail and helps explain why stock levels changed.
Production Locations
Production locations are used in manufacturing workflows.
They represent the place where raw materials are consumed and finished goods are created. In a manufacturing process, components may move from stock into a production location, then finished products may move from production back into stock.
For example:
WH/Stock → Production
Production → WH/Stock
This allows Odoo to track the transformation of materials into finished goods.
For companies using Odoo Manufacturing, production locations help connect inventory movement with manufacturing operations. They ensure that raw materials, work in process, and finished products are reflected properly as goods move through production.
Transit Locations
Transit locations are used when products are moving between warehouses, companies, or physical addresses.
For example, if inventory is transferred from Warehouse A to Warehouse B, the goods may temporarily move through an inter-warehouse transit location.
The movement may look like this:
Warehouse A/Stock → Inter-Warehouse Transit → Warehouse B/Stock
This is useful because inventory does not simply disappear from one warehouse and immediately appear in another. There may be a period where the goods have been shipped but not yet received.
Transit locations help represent that in-between state.
This is especially important for businesses with multiple warehouses, distribution sites, or intercompany stock movement. Without transit locations, inventory visibility can become misleading during transfers.
Designing a Location Hierarchy
A strong location structure should reflect how the warehouse actually operates.
The goal is not to create the most detailed structure possible. The goal is to create a structure that gives the business enough visibility without making daily operations harder.
A simple location hierarchy might look like this:

This structure allows the company to see inventory at different levels. Managers can view stock inside the warehouse as a whole, while warehouse users can work with more specific storage locations.
For smaller warehouses, a simpler structure may be enough:

For larger warehouses, more detail may be required:

The right structure depends on how products are physically stored, picked, counted, and moved.
A company should avoid two extremes.
The first extreme is a structure that is too simple. If everything is stored under one general stock location, the system may show correct quantities but provide limited visibility into where products actually are.
The second extreme is a structure that is too complex. If the location structure is more detailed than the warehouse process requires, users may spend too much time selecting locations instead of completing operations.
The best structure is the one that matches the level of control the business actually needs.
Using the Locations Report to Validate Setup
After warehouses and locations are configured, the Locations report can help validate whether inventory is being stored and moved correctly.
In Odoo, this report can be accessed from Inventory → Reporting → Locations when Storage Locations are enabled.

The Locations report shows where products are currently stored, how quantities are distributed across locations, and whether products are sitting in areas where they should not be. This is especially useful after go-live, when teams are still building the habit of selecting the correct locations during receipts, transfers, picking, packing, and inventory adjustments.
Common Warehouse and Location Setup Mistakes
Many inventory issues in Odoo come from warehouse and location structures that were not planned carefully enough.
One common mistake is using one general stock location for everything. This may work at the beginning, but it becomes limiting as the warehouse grows. The system may show that stock exists, but users may not know where to find it.
Another mistake is creating too many locations too early. If the location structure is more detailed than the warehouse process requires, users may become inconsistent. Some may select the right shelf, others may use a general location, and others may bypass transfers altogether.
A third mistake is using the wrong location type. For example, if a real storage area is not configured as an internal location, stock may not behave as expected. If products are moved into a virtual or external location by mistake, reporting and availability can become confusing.
Another common issue is failing to align locations with actual warehouse workflows. If the warehouse physically has receiving, quality control, packing, and shipping steps, the Odoo structure should reflect that. If those steps do not exist physically, adding them into the system may create unnecessary friction.
Location naming can also become a problem. Names should be clear, consistent, and easy for warehouse users to understand. If locations are named casually, users may select the wrong one during transfers, receipts, or picking.
A final mistake is failing to review the warehouse and location structure before go-live. Once inventory is loaded and transactions begin, restructuring locations becomes more sensitive. It can still be done, but it requires more care because stock history, reporting, and user habits are already in motion.
Why Warehouse and Location Setup Should Be Designed Early
Warehouses and locations should be designed before inventory operations are fully launched in Odoo.
This does not mean every shelf or bin needs to be perfect from day one. But the main structure should be clear enough to support receiving, storage, picking, delivery, counting, and reporting.
A well-designed warehouse and location setup gives the business several advantages:
- Clearer inventory visibility
- More accurate picking
- Better internal transfer tracking
- Stronger inventory counts
- Cleaner warehouse reporting
- Better support for advanced routes
- More reliable operational workflows
Poor setup creates the opposite effect. Users may stop trusting the system. Warehouse teams may rely on memory. Managers may question stock reports. Inventory adjustments may become more frequent.
Odoo is flexible enough to support simple and advanced warehouse structures, but that flexibility also creates room for configuration mistakes.
The goal is not to copy another company’s warehouse structure. The goal is to design a structure that reflects how your business actually stores, moves, and controls inventory.
Final Thoughts
Warehouses and locations are much more than storage labels in Odoo.
They define how inventory is organized, moved, counted, picked, adjusted, and understood across the system. Every receipt, delivery, internal transfer, inventory adjustment, and warehouse report depends on locations being structured properly.
When warehouses and locations are designed thoughtfully, they help create a clear and reliable inventory system. Warehouse teams know where products are stored. Managers can trust stock visibility. Internal movements are easier to track. Inventory counts become more meaningful.
When they are poorly structured, Odoo may still function, but the system becomes harder to trust. Products may appear available without being easy to find. Stock may move through the wrong areas. Adjustments may increase. Warehouse users may create manual workarounds to compensate for unclear setup.
The best setup is not always the most detailed one. It is the setup that reflects how the business actually stores, moves, and controls inventory.
A clean warehouse and location structure gives the business the foundation it needs to manage inventory with more control, accuracy, and confidence as operations grow.
Frequently Asked Questions About Warehouses and Locations in Odoo
What is the difference between a warehouse and a location in Odoo?
A warehouse represents a physical place where inventory is stored, such as a main warehouse, retail stockroom, distribution center, or production facility.
A location is a more specific area within that warehouse, such as a stock room, shelf, aisle, bin, receiving area, packing zone, or shipping area.
In simple terms, the warehouse is the broader facility. Locations are the specific areas used to organize and track inventory inside that facility.
Do all businesses need multiple locations in Odoo?
Not always.
A smaller business with limited inventory may be able to operate with one main stock location. However, as operations grow, multiple locations usually become more useful.
Multiple locations are helpful when a business needs to track inventory across receiving areas, storage zones, shelves, quality control areas, packing zones, shipping areas, or multiple warehouses.
The right setup depends on how much visibility and control the business needs.
What are internal locations in Odoo?
Internal locations represent storage areas controlled by the company.
These are the locations where owned inventory is physically stored and managed. Examples include stock rooms, shelves, bins, picking areas, receiving areas, packing areas, and warehouse zones.
Internal locations are important because they represent the inventory the business can manage, count, transfer, pick, and report on inside Odoo.
What are virtual locations in Odoo?
Virtual locations are used to organize inventory structure or represent inventory situations that do not correspond to a physical storage area.
For example, a top-level warehouse location may act as a parent location that groups together several internal locations. Inventory loss, vendor, customer, production, and transit locations can also represent non-standard inventory flows.
Virtual locations should be used carefully because they affect how Odoo interprets stock movement and availability.
Can locations affect inventory valuation in Odoo?
Yes.
The type of location involved in a stock movement can influence how Odoo understands the movement from an accounting and valuation perspective.
Moving products between internal locations usually changes where inventory is stored but does not mean the stock has left the company.
Moving products from an internal location to a customer location represents inventory leaving the business through a delivery.
Moving products to an inventory loss or scrap location may represent a write-off, damage, or stock adjustment.
This is why location types should be configured carefully.
Should every shelf and bin be created as a location?
Only if that level of detail is operationally useful.
Creating very detailed shelf and bin locations can improve visibility, but it can also make warehouse operations harder if users need to select overly specific locations for every movement.
For smaller teams, a simpler setup may work better. For larger warehouses, shelf and bin-level tracking may be necessary.
The best location structure is the one that matches how the warehouse actually operates.
Can locations be changed after Odoo is live?
Yes, but changes should be handled carefully.
Once inventory has been loaded and transactions are being processed, changing the location structure can affect stock visibility, reporting, user habits, and warehouse workflows.
It is better to design the main location structure before go-live. Adjustments can still be made later, but they should be planned and tested before being applied to active operations.