Odoo Barcode Implementation
Scan-driven receipts, transfers, picking and inventory counts.
Odoo Barcode turns warehouse operations into scanning: receipts, internal transfers, picking, packing and stock counts. It needs a barcode strategy on products and locations first, which is where most of the setup effort goes.
Odoo Barcode replaces the keyboard for warehouse work. A scan opens the transfer, a scan identifies the product, a scan confirms the location, and the operator validates without typing a quantity. The app is Enterprise only. It runs in a browser on a rugged Android terminal or through the Odoo mobile app using the camera, and it drives receipts, internal transfers, deliveries, batch and wave transfers, and stock counts.
Almost none of the project work sits in the app. It sits in the barcode strategy underneath: which nomenclature the company uses, whether codes are plain EAN-13 or GS1 strings carrying lot and expiry, whether every location and package has a printed label, and whether the numbers on the shelf match the numbers in the database. Get that wrong and scanning is slower than the paper it replaced.
The constraint that decides most projects is connectivity. There is no offline mode. The app loads the transfer from the server, calls back for any code it does not already hold, and saves the result before the next operator picks it up, so a dead spot in the racking leaves someone holding a half finished transfer at the far end of an aisle. A wireless survey belongs in the plan ahead of hardware selection, because it decides whether the approach works at all in that building.
Who Odoo Barcode is for
- → Distributors and wholesalers whose pickers work from printed lists and key the quantities in afterwards.
- → Manufacturers, food businesses and pharmaceutical distributors that must capture a lot or serial at every movement rather than reconstruct it during a recall.
- → Multi-location retail and eCommerce operations where one mispick costs more than the scanner.
- → Businesses already on Odoo Enterprise, or costing a move to it, since the app does not exist in Community.
- → Not for a single stockroom with a few hundred items and one person counting it, where paper is genuinely faster.
- → Not for a team whose product master has no reliable barcodes yet, because the data cleanup comes first and it is the bigger job.
Key features
- ✓ Receipts and putaway by scan
- ✓ Wave and batch picking
- ✓ Pack and ship confirmation
- ✓ Cycle counts and inventory adjustments
- ✓ Lot and serial capture at scan
- ✓ Barcode nomenclature setup
What Odoo Barcode actually does
Scan-driven receipts, transfers and deliveries
The app opens on the operation types you allow and processes each transfer line by line. Scanning a product increments the done quantity against the reserved move line. Scanning something never reserved adds an extra line instead of blocking, which keeps the operator moving and leaves the discrepancy visible for a supervisor. Validation is a button or a scan of a printed command barcode, O-BTN.validate, so a gloved hand never has to touch the screen.
Barcode nomenclature and GS1 parsing
A nomenclature is the rule set that tells Odoo what a scanned string means. The default one handles internal codes, EAN-13 and UPC, plus weight and price embedded barcodes from a scale. The GS1 nomenclature reads application identifiers out of a GS1-128 or DataMatrix string: 01 for the GTIN, 10 for the lot, 17 for expiry, 21 for the serial, 00 for an SSCC, 414 for a location. One read can therefore set product, lot, expiry and quantity together.
Lot, serial and expiry captured at the scan
Where tracking is on, the app asks for the lot or serial after the product scan and will not close the line without one. A GS1 label supplies all of it in a single read. Whether an unknown lot may be created or must already exist is set per operation type, and that pair of settings is what stops a receipt inventing lot numbers the supplier never issued while still letting production register new ones.
Packages, pallets and container level movement
With packages enabled, an operator packs scanned goods into a container, labels it, and moves the whole container as one unit thereafter. A single scan of the package then moves everything inside it, which is what makes pallet transfers and cross-dock work at speed. Package types carry dimensions and weight, and putaway rules can route a package by its type rather than by the products inside.
Counts and inventory adjustments
An adjustment runs as a scan of the location followed by every item in it, setting counted against theoretical quantity. Locations carry a count frequency and a next scheduled date, so Odoo nominates what is due instead of shutting the warehouse once a year. The difference posts as a stock move against the inventory adjustment location, so counting rights and the accounting period need agreeing before the first count.
Putaway rules deciding where the scanner sends goods
Putaway rules are what turn a receipt into a directed task. A rule set on a product, a product category or a package type resolves the destination when the item is scanned, and the operator is told which shelf rather than asked. Rules resolve from the most specific match, so a category default can cover the catalogue while a handful of fast movers get their own face locations. This part of the model is in Community; it is the guided screen on top of it that is not.
Batch and wave transfers assembled before the walk
A batch hands several transfers to one operator as a single unit of work. A wave regroups lines across transfers, so one product is collected once for ten orders instead of ten separate trips down the same aisle. Cluster picking is the version that keeps them apart: each order goes into its own package on the trolley, and the scan of the destination package decides which order the item belongs to. Batch and wave transfers themselves are Community, in the Batch Transfers module. Enterprise adds the guided scan screen that walks an operator through one, and that screen is what makes cluster picking workable on the floor.
How we configure Odoo Barcode
Decide the nomenclature before anything else
The nomenclature is a company level setting, and changing it later reinterprets every scan in the system, at the till as well as in the warehouse. If suppliers ship GS1 labelled cases, choose GS1, because a GS1 nomenclature still reads a bare GTIN from your own products. The trouble starts with internal codes that happen to begin with the digits of an application identifier and get parsed as something else entirely. Test the existing catalogue against the rule set before you commit to it.
Getting barcodes onto the master data
The barcode field lives on the product variant, not the template. The template form shows it only when there is a single variant, which is why people assume otherwise, so a shirt in four sizes and three colours needs twelve codes. Odoo enforces uniqueness on the variant, which surfaces every duplicate the old spreadsheet was hiding. Locations and packages need labels too, printed from their own forms as PDF, while product and lot labels also come as ZPL for a label printer. Budget real time for the physical labelling pass across the racking. It is a trolley and a ladder job, not a software task.
Operation types and warehouse step count
Each operation type decides what the scanner asks for: whether new lots may be created, whether existing ones must be used, whether a package is required, whether source and destination locations must both be scanned. A one step receipt is fast but proves nothing about putaway. Two step receipts add an internal transfer the scanner can drive to a shelf. Choose from what you need to prove later, not from how it demos.
Hardware, symbology and keyboard layout
Most deployments use a rugged Android terminal with an integrated imager in keyboard wedge mode, set to send Enter after each scan. Check the symbology first: a 1D laser reads EAN and Code 128 and will never read a GS1 DataMatrix, so pharmaceutical and medical device work needs a 2D imager regardless of budget. A wrong keyboard layout mangles characters, a frequent failure with AZERTY and Arabic input methods, so use a plain English layout and test the full character set including the GS1 group separator.
Agree what happens when a scan fails
Every rollout hits an unreadable label, a pack with no lot printed on it, and a code that resolves to nothing. Decide in advance whether the operator may type the code by hand, whether they can create a lot on the spot, who is allowed to reverse a validated transfer, and where the exception is recorded. Warehouses that leave this to the floor end up with one supervisor password shared across the shift. Write the exception path into the training material, because it is the part operators reach for on day one.
Where Odoo Barcode projects go wrong
Costing the licence for the office and not the floor
Barcode is Enterprise, and Enterprise is licensed per user. The app is a backend screen rather than a portal page, so every operator holding a scanner needs an internal user, and the licence count is set by shift patterns and the seasonal peak rather than by headcount in the office. Work that number out before the licensing conversation, not after it. It also changes the shape of the alternatives: for an operation running thirty casual pickers for two months a year, a Community deployment with a custom scan screen can be the cheaper build even once the development is paid for.
Operation types left on manual reservation
The barcode screen shows what is reserved. Where the operation type uses manual reservation and nobody runs it, the operator opens a delivery with lines showing nothing to pick, scans anyway, and every scan lands as an extra line for a supervisor to reconcile afterwards. Partial reservation fails more quietly, showing two of the five the customer ordered. Set the reservation method per operation type, and name who chases short stock, before the scanners reach the floor.
One barcode field per variant
Odoo holds a single barcode on the variant. There is one legitimate second home for a code, the product packaging record, which carries its own barcode and quantity so that scanning a case books the case quantity instead of one unit. Past that, the supplier's own code, the legacy system code and a customer specific code have nowhere to sit, and the answer is an extension or a community module that changes how a scan resolves. Establish which codes physically appear on the goods, inner carton and outer, before assuming one code per item.
Barcode data migrated without validation
Legacy exports arrive with leading zeros stripped by a spreadsheet, check digits missing from EAN-13, and the same code sitting on two products. The uniqueness constraint on the variant blocks the duplicates loudly, so those get fixed during the import. The malformed ones load without complaint, never scan, and get blamed on the hardware for a fortnight. Validate length and check digit in the file before loading, then test scan a physical sample from every product family rather than trusting the export.
Scanning bolted onto an unchanged process
Scanning pays back only when the process changes with it. If pickers still carry paper as a backup, if stock is never reserved before picking, if a supervisor keys corrections afterwards anyway, the terminals add a step and the team routes around them within a fortnight. Agree the new sequence, retrain on it, and measure lines scanned per hour from the first week so the argument later is about numbers.
Multi company groups sharing one product catalogue
The nomenclature is set per company while the product and its single barcode are often shared across all of them. A group where one company receives GS1 labelled imports and another sells the same items under legacy internal codes cannot satisfy both rule sets from one field. Settle that at design time, because the usual workaround is a second code field and custom resolution logic that every later upgrade has to carry.
What it works with
- + Odoo Inventory, which holds the stock moves, locations and putaway rules the app operates on
- + Lot and serial tracking with expiration dates, where a FEFO removal strategy tells the scanner which pallet to take instead of leaving it to the operator
- + Odoo Manufacturing, where components are consumed and finished goods registered by scan
- + Odoo Quality, Enterprise, so a control point interrupts the operator at the moment the item is scanned
- + Odoo Point of Sale, which reads the same company nomenclature at the counter
- + Odoo Purchase and Sales, which generate the receipts and deliveries the scanner works through
- + The IoT Box, Enterprise, where label printers and scales need to be driven directly rather than through the browser
- + Carrier and third party warehouse systems, where the barcode is the shared key between them
Odoo Barcode by country
Saudi Arabia (KSA)
SFDA runs a national drug and medical device track and trace scheme, and packs carry a GS1 DataMatrix holding GTIN, batch, expiry and serial. Because the identifier is unique per pack, those products have to be tracked by serial rather than by lot, which means every single pack is scanned on receipt instead of one scan for the carton. That decision moves the labour estimate for goods in more than any software setting does.
United Arab Emirates
Tatmeen expects aggregation as well as identification: pack inside carton inside pallet, linked parent to child and reported at each handover. In Odoo that hierarchy is carried by packages and their SSCC, so the packing bench becomes the point where the reportable data is created rather than an afterthought. Odoo will hold the structure; transmitting the events to the platform is a connector or a build. Free zone and mainland stock also belong in separate warehouses, not one location tree.
Pakistan
The FBR track and trace system applies a unique identification mark at the production line for cement, sugar, fertiliser, tobacco and beverages, reconciled against declared output. That stamp comes from a separate licensed system, so decide early how its identifier maps onto an Odoo lot or serial and which of the two systems creates the number first. Getting that order wrong leaves finished goods that are stamped but unrecorded, or recorded but unstamped.
India
A dispatch is not finished when the last scan is. Goods above the threshold need an e-way bill carrying the vehicle number before the truck leaves, so there is a compulsory pause between validating the delivery and opening the gate. Keep the pick and the gate release as separate steps with separate owners, otherwise the picker stands at the dock waiting on a portal and the picking rate you measure is really a measure of the paperwork.
Turkey
Medicines run through the national ITS scheme and medical devices through UTS, and both want a notification at every change of ownership, not merely a readable pack. Odoo reads the symbol and holds the serial, but it talks to neither platform, so that interface is custom work, and the effort sits in the retry and reconciliation handling for notifications the platform rejects rather than in the sending. The e-Irsaliye despatch note is a separate obligation on the accounting side and does not come off the scanner.
Egypt
The Egyptian Tax Authority requires every invoice line to carry an item code, either a GS1 GTIN or an EGS code registered with the authority. That makes the product barcode an accounting dependency rather than a warehouse convenience. The code scanned in the aisle and the code reported on the invoice have to be the same one, so the warehouse cannot quietly renumber a product to suit a label printer.
United Kingdom
NHS suppliers are held to GS1 standards under the eProcurement strategy: a GTIN on the pack, a GLN for the location, and a barcoded despatch advice. Great Britain no longer operates the EU Falsified Medicines Directive decommissioning step while Northern Ireland continues under EU rules, so one operation can be running two pharmaceutical processes out of the same building.
Germany
Terminals that record who picked what and how quickly are a co-determination matter. The works council has a say in any system capable of monitoring employee performance, and rolling scanners out without that agreement stops a project after the hardware is bought. GoBD separately expects stock records to be traceable, so an adjustment is corrected by a counter movement rather than by editing the original.
Odoo Barcode FAQs
Is the Odoo Barcode app available in Community?
No, it is Enterprise. Community keeps the whole stock model the app drives: locations, putaway rules, lot and serial tracking, barcode nomenclatures, batch and wave transfers, and printable product labels. A USB scanner behaves as a keyboard, so a desktop operator can scan into the search box or into the lot field on a transfer and get real work done. What Enterprise sells is the guided screen, the mobile layout and cluster picking. The OCA publishes scanning interfaces for Community, and those need testing against your exact version before anyone plans a rollout around them.
Do we need dedicated hardware, or will phones do?
A phone camera does the job through the mobile app, which is fine for a few dozen scans a day and for a manager spot checking a location. High volume picking needs a device with a real imager and a physical trigger, because camera focus time becomes the bottleneck and gloves make a touchscreen unreliable. Anything that presents itself as a keyboard will connect.
Does it work without a network connection?
No. There is no offline queue, unlike Point of Sale. The screen holds the transfer in the browser and writes back to the server, so a dead spot leaves an operator with work that was never saved and a supervisor deciding whether to trust it or count the aisle again. Survey with the device you intend to buy, in loaded aisles rather than empty ones, and treat freezers, mezzanines and outdoor yards as separate problems. Agree the recovery rule too: whether an interrupted transfer is rescanned from the start or checked line by line.
Can we keep our own internal codes, or do we have to buy GS1 numbers?
Internal codes are fine for anything that never leaves your own four walls, and Odoo will scan them all day. A GS1 GTIN becomes necessary the moment somebody else has to read the code: a retailer receiving your cases, a marketplace listing, a regulator's track and trace platform. You cannot mint a valid GTIN yourself, it is issued against a company prefix from GS1, so where that requirement is coming, start the membership before the labelling pass rather than labelling the racking twice.
Who can correct a mistake, and is there a trail?
Every movement is a stock move carrying a user and a timestamp. Once a transfer is validated the quantity is not simply typed over: the correction is a return, a reverse transfer or an inventory adjustment, and each of those posts its own move rather than rewriting the original. What needs deciding is who may run those corrections and who signs off a count difference. Left open, every correction looks identical in the log and nobody can separate an honest miscount from a cover up.
Can two people work the same transfer at once?
Odoo will not stop them, and the result is not reliable. Two operators on one picking contend for the same lines, and one save can overwrite what the other just did. Split the work instead: a batch transfer hands each operator their own set, and a wave splits by product or by zone. This is the usual reason a large delivery run feels slower after go live than it did in testing with one person and one screen.
Do we need an IoT Box?
Not for scanning. A USB or Bluetooth scanner in keyboard wedge mode talks straight to the browser and needs nothing else. The IoT Box, which is Enterprise, is for driving label printers, scales and measuring tools directly from Odoo. Without it, labels still print, but as a file the operator sends to the printer through the operating system.
Can we print our own barcode labels from Odoo?
Yes. Product and lot labels print in PDF sheet layouts and in ZPL for a thermal printer, and locations and packages print their labels from their own forms. The constraint people miss is timing: a label carrying a lot number or an expiry date cannot exist before the lot does, so it prints from the receipt or the manufacturing order rather than being run off in advance. Put a printer at the receiving bench and another at packing, not one in the office.
How long does a barcode rollout take?
Software configuration is a matter of days. Labelling the racking, cleaning the product codes and retraining the team set the calendar, and on a warehouse with several thousand variants the master data work runs longer than everything else combined. Sequence it as data, then labels, then a pilot on one operation type, then extend one operation at a time.