Odoo has two barcode paths: the IoT Box integration (for permanent hardware setups with label printers and scales) and the built-in Barcode module that works with any USB or Bluetooth scanner plugged into a workstation. This guide covers the second path - the one that requires no IoT infrastructure.
Module installation#
Install the Inventory Barcode module (stock_barcode) from Apps. It adds a Barcode option in the Inventory app's top menu and enables barcode scanning on picking operations.
There is no hardware configuration step. The Barcode module works with any HID-class scanner that sends keystrokes to the active browser field - which is how virtually all USB and Bluetooth scanners work by default.
Barcode configuration on products#
GS1-128 vs internal barcodes#
Odoo supports both GS1-128 (standard international barcodes used in cross-company supply chains) and internal barcodes you assign yourself.
For most operations, assign an internal barcode directly on the product form. Open the product, switch to the General Information tab, and fill in the Barcode field. Use the product's SKU, EAN-13, or any unique identifier your supplier labels the product with.
For product variants (size/colour combinations), assign barcodes on the variant level, not the template level. Navigate to the product template → Attributes & Variants tab → click Configure Variants → set the barcode per variant.
Lot/serial number barcodes#
Lot and serial numbers can also have barcodes. Open Inventory → Products → Lots/Serial Numbers → select a lot → enter the barcode. When the operator scans the lot barcode during a receipt, Odoo auto-fills the lot number on the move line.
Location barcodes#
Storage locations can have barcodes. Open Inventory → Configuration → Locations → select a location → fill the Barcode field. Scanning a location barcode during a transfer moves the active context to that location, so the next product scan is registered there.
Print location barcodes on a label and attach them to shelves. This is the fastest way to do putaway operations without typing.
Barcode operations: receipts#
Navigate to Inventory → Barcode (or click the Barcode menu item). Odoo opens the Barcode Dashboard showing pending operations.
Click on a Receipt to open the picking. The interface shows expected products with expected quantities. Scan the product barcode - the matching line highlights and the quantity increments by 1. Scan the same barcode again to add another unit. For larger quantities, click the quantity field and type the value.
If the product has a Tracking setting (By Lot or By Serial Number), the interface prompts for a lot/serial barcode after the product scan.
When all quantities are recorded, click Validate. Odoo moves the stock to the destination location and closes the receipt.
Handling unexpected products#
If you scan a barcode that is not in the expected lines (the vendor shipped something not on the PO), Odoo adds a new line with the product. A yellow "Extra" tag marks the line as unplanned. The warehouse manager can decide whether to accept the extra goods or return them.
Barcode operations: internal transfers#
Open a Transfer from the Barcode Dashboard. Scan the source location barcode to set the context, then scan products. The interface groups scans by source location automatically.
For multi-step operations (pick → pack → ship), each step has its own transfer on the Dashboard. Complete them in sequence.
Barcode operations: inventory adjustments#
For a cycle count using the barcode interface, go to Inventory → Barcode → Inventory Adjustments. The interface starts with an empty list. Scan a location (optional - sets the adjustment scope), then scan products with their quantities.
After scanning, click Apply All to post the adjustment. Odoo compares the scanned counts to the current theoretical stock and creates a journal entry for the difference (if accounting valuation is enabled).
Mobile barcode scanning#
The same Barcode interface is mobile-responsive. Open https://your-odoo.com/web#action=stock_barcode.stock_barcode_action_main_menu on a mobile device. For a dedicated scanning setup without full Odoo navigation, use the Barcode Scanner app icon (available on the home screen through the Apps menu).
Bluetooth scanners that pair with mobile devices work identically to USB scanners - they inject keystrokes into the active input field.
GS1 multi-field barcodes#
For GS1-128 barcodes that encode multiple data fields (product ID, lot number, quantity, expiry date in a single barcode), enable GS1 barcode parsing in Inventory → Configuration → Settings → Barcode → GS1 Barcodes.
Once enabled, scanning a GS1-128 barcode auto-populates all the fields it encodes simultaneously. The operator scans once and the product, lot, quantity, and expiry are all set.
Printing barcodes from Odoo#
Odoo can generate product barcode sheets for printing:
- Select products in the product list view → Action → Print Product Barcodes → choose a label format (Avery, Zebra ZPL, etc.)
- For picking operations, print lot/serial number labels from the transfer using Print → Lot/Serial Number Labels
The built-in label layouts cover common label sizes. For custom sizes, install a label format add-on or use the report QWeb template inheritance to adjust dimensions.
Common pitfalls#
- Scanner types the barcode but nothing happens: The barcode field must be focused. In the Barcode interface, the field is always focused. In a regular Odoo form, click the Barcode field first before scanning.
- Barcode not found: The product barcode in the scan doesn't match the barcode on record. Check for leading/trailing whitespace in the stored barcode, or whether the product is using EAN-13 vs EAN-8 (different digit counts).
- Lot tracking not prompting: The product's Tracking field must be set to By Lot or By Serial Number for the lot prompt to appear.
- Quantities not incrementing: Some scanners append a return character after each scan. Odoo auto-validates on return, which increments by the default quantity (1) and resets the field. Check the scanner's return-character configuration.
Ask ERPeek "which products in my warehouse have no barcode assigned?" or "show me all lot numbers received this week" to identify gaps in your barcode setup before rolling out scanner stations.

