The short answer: a food manufacturer needs an ERP that tracks every batch from supplier to customer, manages use-by dates without anyone keeping a mental calendar, and can produce a recall list in minutes rather than days. Generic manufacturing software handles production well enough. Food adds lots, shelf life, allergens and variable yields, and that's exactly where most systems start to wobble.
The longer answer starts with a phone call.
It's 4:55pm on a Friday. The phone rings.
It's your supplier's QA manager. A lot of desiccated coconut they delivered three weeks ago has tested positive for Salmonella. They're very sorry. They'd like to know what you did with it.
That's really two questions. Which of your finished batches did that coconut go into? And which customers received those batches?
In a lot of food businesses, the honest answer starts with 'give me a minute' and finishes some time on Sunday. Receiving records are on a clipboard. Production records live in a spreadsheet that exists in three versions, one of which is on Dave's laptop. Dispatch knows what went out by product, but not by batch. And Dave is at the footy.
Here's the uncomfortable bit: the clock started when the phone rang, not when someone found the right spreadsheet. Under Standard 3.2.2 of the Food Standards Code, Australian businesses that manufacture, wholesale or import food must have a written system for recalling unsafe food, make it available when an authorised officer asks, and follow it when a recall happens. A recall plan you can't execute quickly is a document, not a system.
We'll come back to that phone call. First, it helps to see why food trips up software that copes perfectly well with brackets and bolts.
Why food isn't just manufacturing with better smells
General manufacturing software makes a few quiet assumptions. A part is a part. It doesn't go off. It doesn't contain peanuts. And 10 kilograms of steel in makes roughly 10 kilograms of product out, minus offcuts you can predict.
Food breaks every one of those, in five specific places:
- Lots at every step. Not just on finished goods, but on every ingredient received, every batch mixed and every pallet shipped. A batch number that only appears at the end is like a family tree that starts with you.
- Shelf life. Your stock has a clock on it. Inventory worth full price on Monday can be worth half by Thursday and nothing the following week.
- Allergens. A recipe change is also a labelling change, whether or not anyone remembers to tell the person who does the labels.
- Variable yields and weights. 100 kilograms of potatoes doesn't make a fixed number of chips. It depends on the potatoes, the season and, occasionally, the mood of the slicer.
- Recall obligations. The law expects you to find and pull unsafe product, so your system has to be able to find it.
So 'manufacturing ERP' and 'food manufacturing ERP' aren't the same thing. The second is the first plus those five capabilities, built in rather than bolted on with spreadsheets. A practical test for any vendor demo: if nobody mentions a lot number in the first twenty minutes, you're being shown the wrong software. (For the broader picture of what any manufacturer should expect from an ERP, our complete guide to ERP for Australian manufacturers covers the fundamentals.)
Traceability: one step back, one step forward
The principle behind food traceability is simpler than it sounds. You need to know where everything came from (one step back) and where everything went (one step forward). That's it.
Think of it like a relay race. Each runner only needs to know who handed them the baton and who they handed it to. Nobody has to remember the whole race, because if every handover is recorded, you can rebuild the race from the handovers. Traceability works the same way: supplier lot to receipt, receipt to production batch, production batch to finished lot, finished lot to customer delivery. Miss a single handover and the trail goes cold right there.
In Odoo, those handovers are recorded as a by-product of normal work:
- Products are set to be tracked by lots, so every receipt, movement and delivery carries a lot number.
- Ingredient lots are captured on receipt, using the supplier's lot number or your own.
- Each manufacturing order records which ingredient lots were consumed and which finished lot was produced.
- Each delivery records which finished lots went to which customer.
The traceability report on any lot then does the walking for you. Look upstream and you see the supplier and receipt it came from. Look downstream and you see every manufacturing order it went into, every finished lot that came out, and every customer delivery that carried one.
Here's that walk, one handover at a time. Keep scrolling, and keep an eye on the clock.
Back to Friday at 4:55pm. Open the coconut lot, look downstream, and the answer is on screen: these batches, these customers, these quantities, plus whatever is still sitting in your coolroom. That's your recall list. Done properly, a mock recall in Odoo takes under five minutes, which is roughly how long the QA manager will politely wait on hold.
One honest caveat: the report is only as good as the handovers recorded. If lots are typed in from memory at the end of a shift, you've simply digitised the guesswork. Scanning lot barcodes at receipt, production and picking is what makes the trail trustworthy, and our practical guide to warehouse barcode scanning covers how to get there.
Shelf life and FEFO: stock with a clock on it
First, the two dates everyone uses and plenty of people mix up. Under Standard 1.2.5 of the Food Standards Code:
- A use-by date is about safety. After it, the food can't be sold, because it may no longer be safe to eat.
- A best-before date is about quality. Food can still be sold after it, as long as it's still fit to eat and isn't damaged.
Put simply, best-before is advice and use-by is a deadline. Your ERP needs to know the difference, even if the fridge at home doesn't.
Odoo handles this with expiration dates. You define the shelf life once on the product, and every lot gets its own dates calculated automatically when it's received or produced:
- Expiration date: the end of the line. Past this, it isn't stock, it's a liability.
- Best before date: the quality marker your customers see.
- Removal date: when the lot should come out of saleable stock, usually well before expiry, so your customer still gets useful shelf life.
- Alert date: when someone should be nudged that a lot is getting close.
The removal date is what drives FEFO: first expired, first out. Most warehouses run FIFO, first in, first out, which assumes the oldest stock expires first. Your suppliers didn't get that memo. A pallet that arrived last Tuesday with a short date should ship before the one that arrived a week earlier with plenty of life left. Set FEFO as the removal strategy and Odoo directs pickers to the lot that expires first, not the one closest to the door. It also warns you before you ship a lot that's past its expiry date, which is the kind of warning you only want to ignore once.
Then there's the stock that's running out of time. There are three sensible options, and Odoo handles each as a normal transaction:
- Discount it through a markdown price list or a clearance channel while it still has saleable life.
- Donate it to a food rescue organisation, recorded as a delivery so the trace stays intact.
- Write it off as scrap, with a reason, so the cost lands in the right place in your accounts rather than quietly vanishing.
The fourth option, which nobody plans for, is finding it at the back of the coolroom in March. The alert date exists to prevent the fourth option.
Allergens and recipe control
In most of manufacturing, a 2% ingredient substitution is a costing question. In food, it can be a labelling question, a recall and an awkward phone call, not necessarily in that order. Undeclared allergens are consistently one of the most common reasons for food recalls in Australia.
The labelling rules have tightened, too. Plain English Allergen Labelling (PEAL) requires allergens to be declared using specific plain-English names, shown in bold in the ingredient list, with a separate summary statement starting with 'Contains'. The transition period ended in February 2024, and the extra two years allowed for products already labelled under the old rules ended in February 2026. Every label on shelf today needs to comply.
The ERP's job here is recipe control. When a supplier changes their flour blend or your team swaps one ingredient for another, the change has to travel through the bill of materials, the allergen profile and the label together. In Odoo, recipes live as bills of materials, and with the PLM app, changes go through engineering change orders with versioning and approval, so 'we tweaked the recipe' leaves an audit trail rather than a rumour.
Now the honest part. Odoo has no native allergen matrix. There's no out-of-the-box screen that says 'this product contains sesame because ingredient 4 does'. The usual approach is to record allergens against each ingredient using product attributes or a few custom fields, then roll them up through the bill of materials to the finished product with a modest customisation. It's not a big build, but it is a build, and anyone who tells you otherwise during a sales demo should be asked to show you the screen.
Yields, waste and true costing
Here's where food margins usually leak, and it's rarely where people look. Everyone negotiates hard on the price of flour. Far fewer people chase the few per cent of it that ends up on the floor.
A simple example. Your recipe says 100 kilograms of dough makes 160 loaves. Tuesday's batch made 152. Those eight missing loaves never showed up on a supplier invoice, but they cost you exactly as much as if they had. Multiply that across every batch, every line and every week, and yield variance can easily matter more than a price rise on an ingredient.
Odoo makes this visible batch by batch:
- Each manufacturing order records actual consumption and actual output against what the recipe expected, so variance shows up per batch rather than as a mystery at month-end.
- By-products such as trim, whey or offcuts can be recorded on the bill of materials with a share of the cost, so your main product doesn't carry all of it.
- Scrap is recorded with reasons, so 'waste' becomes a list of fixable causes instead of a single sad number.
- Cost analysis compares expected against actual cost per order, and landed costs add freight, duty and handling to imported ingredients, so your ingredient cost is the real one rather than the supplier's price.
The compliance map
Here's how the main food requirements line up against Odoo, and whether each one is standard (vanilla), needs a customisation or calls for a third-party add-on.
| Food requirement | Odoo module | Vanilla, customisation or third-party | How it's handled |
|---|---|---|---|
| Lot tracking from receipt to dispatch | Inventory, Manufacturing | Vanilla | Products tracked by lots, captured at receipt, consumption, production and delivery |
| One step back, one step forward trace | Inventory | Vanilla | Lot traceability report shows upstream suppliers and downstream customers |
| Written recall system (Standard 3.2.2) | Inventory | Vanilla (your procedure, Odoo's data) | Your recall procedure uses the trace report to produce the affected batch and customer list |
| Use-by and best-before dates (Standard 1.2.5) | Inventory | Vanilla | Shelf life set per product, dates calculated per lot |
| FEFO picking | Inventory | Vanilla | FEFO removal strategy picks the earliest-expiring lot first |
| Short-dated stock alerts | Inventory | Vanilla | Alert dates flag lots before they reach removal |
| Minimum remaining shelf life per customer | Sales, Inventory | Customisation | Rule checks remaining life when stock is reserved for an order |
| Recipe version control | Manufacturing, PLM | Vanilla (Enterprise) | Versioned bills of materials with engineering change orders and approvals |
| Allergen matrix and roll-up | Inventory, Manufacturing | Configuration plus customisation | Allergens recorded on ingredients and rolled up to finished goods through the BOM |
| PEAL-compliant product labels | Inventory, Manufacturing | Customisation | Label template prints bold allergens and the 'Contains' statement |
| Receipt checks (temperature, certificates) | Quality | Vanilla (Enterprise) | Quality control points on receipts with pass/fail and measured checks |
| GS1-128 barcodes with batch and dates | Barcode, Inventory | Vanilla scanning, customised label design | GS1 nomenclature reads product, batch and date identifiers on scan |
| Catch weight | Sales, Inventory, Accounting | Third-party add-on or customisation | Carries nominal units and actual weight through picking and invoicing |
| Yield, by-products and scrap | Manufacturing | Vanilla | Actual vs expected per order, by-products with cost share, scrap with reasons |
| Landed cost of imported ingredients | Inventory, Accounting | Vanilla | Freight, duty and handling allocated to the receipt |
What Odoo doesn't do out of the box
Most ERP guides skip this section. We'd rather you hear it from a blog post than from a project manager in month four.
- Catch weight. It sounds like a fishing story, and like a fishing story, the number on the order rarely matches the number on the scale. If you sell 'a wheel of cheese' or 'a box of fillets' but invoice by actual weight, standard Odoo needs an add-on or customisation to carry both the unit and the real weight through picking, invoicing and stock.
- Allergen matrix. As above: configurable, with a small customisation for the roll-up.
- Compliant label printing. Odoo prints labels, but a PEAL-compliant product label or a GS1-128 carton label with batch and dates usually needs a custom label template, often sent to a thermal printer.
- Customer-specific shelf life rules. If a retailer requires a minimum remaining shelf life on delivery, enforcing it automatically per customer is typically a customisation rather than a setting.
- A full food safety management system. Odoo's Quality app can capture checks at critical control points, such as receipt temperatures, but your HACCP plan and certification audit program usually sit alongside Odoo rather than inside it.
None of these are deal-breakers. They're well-trodden ground, and we build them regularly. The point is to cost them in at the start, not discover them at go-live.
What your retail customers expect
If you supply the major supermarkets or large distributors, traceability stops being an internal nice-to-have and becomes a condition of doing business.
Start with barcodes. A standard retail barcode tells a scanner what the product is. A GS1-128 barcode on a carton or pallet tells it a short sentence: what the product is, which batch it came from, when it expires and, for variable-weight goods, what it weighs. Each piece of information sits behind a small code called an application identifier, such as (10) for the batch and (17) for the use-by date. Odoo's GS1 barcode nomenclature reads these, so scanning an inbound carton fills in the product, the lot and the expiry date in one go instead of three typed fields. Your GS1 Australia membership provides the company prefix those barcodes are built on.
Then there are the audits. Retailer supplier programs typically expect certification to a recognised food safety scheme, and schemes such as SQF and BRCGS require regular traceability exercises. BRCGS, for example, expects a full trace to be achievable within four hours. If your current trace involves Dave, his laptop and a long weekend, that's an audit finding waiting to happen.
Time your trace
Here's a challenge you can run this week. It costs nothing but a cup of coffee.
- Pick a raw ingredient lot you received about a month ago.
- Start a timer.
- Find every finished batch it went into, every customer who received one, and how much is still on hand.
- Stop the timer when you'd be confident handing that list to a regulator.
Note how many systems you opened, how many people you had to ask, and whether anyone had to ring Dave. If the coffee went cold before you finished, it's worth a conversation.
We'll run the same trace in Odoo, live, in front of you: receipt to batch to customer, in minutes. To see how it would work with your recipes, your lots and your customers, book a demo with WMSSoft, or read more about Odoo for manufacturing. That way, the next time the phone rings at 4:55pm on a Friday, Dave can stay at the footy.