Odoo's barcode module (Inventory → Configuration → Barcode) turns a browser-connected scanner into a guided warehouse workflow terminal. Properly configured, it eliminates paper pick sheets and manual quantity entry for receipts, picks, packs, and shipments. Improperly configured, it creates a slower manual process with extra confirmation clicks.
Hardware requirements#
Odoo Barcode works with any scanner that sends keystrokes to the browser - including USB HID scanners, Bluetooth scanners, and mobile device cameras. The browser-based PWA (Progressive Web App) installs on Android and iOS.
Recommended hardware:
- USB barcode scanner (wedge type): Plugs into a workstation USB port. Scans appear as keyboard input. No driver required. Works on Windows, Linux, macOS.
- Bluetooth ring scanner + Android device: Mobile workers scan while picking. Install the Odoo Barcode PWA from Chrome on Android. Add to home screen for offline capability.
- Zebra handheld terminal: Enterprise option with the Odoo Barcode PWA. Zebra's DataWedge sends scan events as keyboard input or via intent - both work.
What does NOT work:
- Scanners that send data via serial port (RS-232) without a USB adapter.
- 2D matrix codes (QR, Data Matrix) on scanners configured for 1D only. Enable 2D in scanner settings.
Barcode structure#
Odoo reads barcodes in this priority order:
- Product barcode (EAN-13, UPC-A, custom).
- Lot/serial number barcode.
- Operation type barcode.
- Location barcode.
Set product barcodes on the product form: Inventory → Products → [Product] → Barcode field. Set lot barcodes on the lot form: Inventory → Products → Lots/Serial Numbers → [Lot] → Barcode.
For GS1 composite barcodes (encoding product + lot + quantity in one code), enable GS1 parsing: Inventory → Configuration → Settings → Barcode → GS1 Nomenclature.
Operation type configuration#
Each operation type (receipt, pick, pack, delivery) has a barcode configuration that controls what the scanner flow requires:
Inventory → Configuration → Operations Types → [Operation] → Barcode:
- Source Location Barcode Required: Operator must scan the source location before processing.
- Destination Location Barcode Required: Operator must scan the destination location.
- Lot/Serial Number Required: Operator must scan a lot for tracked products (even if tracking is optional on the product).
For high-accuracy pick operations: require source location scan. This prevents picking from the wrong bin when two similar products are stored nearby.
Lot and serial number tracking#
Product tracking is set per product: Inventory → Products → [Product] → Tracking:
| Setting | Effect |
|---|---|
| No Tracking | No lot entry required. |
| By Lot | One lot number per batch of units. |
| By Unique Serial Number | One serial number per individual unit. |
When lot tracking is active, the barcode flow requires lot scan during receipt. The scanner validates that the scanned lot matches an existing lot record (for serial numbers) or creates a new lot (for lot tracking in receive operations, if allowed).
Creating lots on receipt: Configure on the operation type: "Create New Lots/Serial Numbers" = Yes. This lets warehouse staff scan supplier lot numbers and create them on the fly.
The pick-pack-ship flow#
For multi-step deliveries (pick then ship, or pick-pack-ship), configure warehouse steps: Inventory → Configuration → Warehouses → [Warehouse] → Outgoing Shipments → 3-step route.
The barcode flow then has three separate operations:
- Pick operation: Scan source location → scan product barcode → confirm quantity → move to pack area.
- Pack operation: Scan items to pack → create package → assign tracking number.
- Ship operation (delivery order): Scan package barcode → validate → auto-print carrier label if integration is configured.
Each step shows only the operations relevant to the current user's role. A picker sees only pick operations; a packer sees only pack operations.
Batch and wave picking#
For warehouses with many small orders, batch picking reduces walking distance. Enable batch picking: Inventory → Configuration → Settings → Operations → Batch Transfers.
Create a batch: Inventory → Operations → Batch Transfers → New. Add multiple delivery orders. The barcode interface then presents one consolidated pick list covering all orders in the batch.
Zone picking: In very large warehouses, split the batch by storage zone so each picker works a defined area. Assign the pick orders for a zone to a batch, assign the batch to a zone picker.
Printing labels#
Odoo integrates label printing via the IoT Box (Raspberry Pi + USB printer) or direct integration with ZPL printers.
- Configure: IoT → IoT Devices → Printers.
- Assign the printer to the barcode picking screen: Inventory → Configuration → Settings → Barcode → Default Printer.
For lot labels, product labels, and package labels: Inventory → Configuration → Barcode → Label Settings → pick label format (ZPL or PDF).
ZPL sends directly to thermal printers (Zebra, SATO) without PDF rendering overhead - faster for high-volume operations.
Odoo Barcode vs. dedicated WMS#
Odoo Barcode is sufficient for warehouses with:
- Up to ~10 concurrent scanners.
- Standard 2- or 3-step flows.
- No complex slotting or putaway algorithms beyond Odoo's built-in putaway strategies.
- Lot and serial number tracking without expiry-date FEFO override.
Consider a dedicated WMS integration (Manhattan, Deposco, Körber) when you need:
- Real-time slotting based on velocity.
- Complex cross-docking.
- Multi-site inventory with shared stock.
- FEFO (First Expired, First Out) enforcement at pick time beyond Odoo's removal strategy.
Odoo's putaway strategy and removal strategy (FIFO, FEFO, LIFO) handle most use cases. FEFO requires lot tracking with expiry dates enabled on the product category.

