Now in open beta — close the books in 2 days, not 2 weeks.Read the case study →
Inventory · April 9, 2026 · 9 min read

Batch tracking for food and pharma recalls

A contamination recall is the worst day in any food or pharma business. Batch tracking is what determines whether you spend the day calling customers from a clean list or pulling 200 units off shelves with no idea where the rest went.

What a batch is, technically.

A batch (sometimes called a lot) is a group of units produced or received together that share a manufacturer batch number. Every unit in batch B-241015-A came from the same production run, on the same date, in the same factory, with the same QC. If a problem is found with one unit, it potentially affects every unit in that batch.

Batch tracking means your inventory system records the manufacturer batch number, manufacture date, expiry date, and supplier reference for every receipt, then traces those batches through transfers, sales, and returns. At any point you can ask: where are the remaining units of batch B-241015-A right now? Which customers bought units from this batch? Both questions need answers in minutes during a recall.

Why fefo alone does not cover recalls.

FEFO (covered in our pharmacy expiry post) handles the day-to-day picking — sell the soonest-expiring batch first. But FEFO is forward-looking; recalls are backward-looking. When a recall hits, you need to know which customers bought specific batches, regardless of expiry.

A pharma example: you sell 800 units of an antibiotic over six months across three batches. The manufacturer announces batch C is recalled. Without batch tracking, you have no idea which of the 800 sales were batch C. With batch tracking, the report is one query: 240 sales touched batch C, with customer contact details. You can call them. The recall is professional, fast, and defensible.

A worked example: dairy distributor.

A dairy distributor in Rotterdam handles UHT milk for 80 retailers across the Netherlands. They receive 12 batches of UHT per month from the producer, transfer to their warehouse, then transfer to retailers. One batch (B-2025-09-MILK-04) tests positive for elevated bacterial count two weeks after distribution. 4,000 units of that batch were received; the distributor needs to know where the remaining stock is and which retailers got it.

Without batch tracking, this is a phone call to all 80 retailers, manual stock check, and partial recovery. With batch tracking, the system shows: batch B-2025-09-MILK-04 was distributed to 23 of 80 retailers, with quantities per retailer. 18 retailers still have remaining stock. 5 have already sold through. The distributor calls those 23 specifically, recovers what is in retailer stock, and asks the 5 to alert their consumer customers. Resolution time: hours instead of days. EFSA (European Food Safety Authority) traceability rules under EU Regulation 178/2002 require exactly this level of one-step-up, one-step-down traceability.

The data captured per batch.

Mandatory: SKU code, manufacturer batch number, quantity received, supplier name, GRN reference. Strongly recommended: manufacture date, expiry date, country of origin, supplier-provided test certificate reference. Optional but useful: storage location at receipt, temperature on arrival (for cold chain), photo of label on receipt for disputes.

For pharma, regulator-approved supplier and import licensing references should also be captured per batch — FDA, MHRA, TGA, or EMA depending on your market. For food, organic or halal certification batch reference where applicable. The point of all this is recall readiness — when something goes wrong, you want every relevant fact already in the system, not stored in a paper file in a back office.

  • Manufacturer batch number (mandatory)
  • Manufacture and expiry dates (mandatory for pharma, FMCG)
  • Supplier and GRN reference (always)
  • Test certificate reference (recommended for pharma)
  • Storage location and temperature on arrival (cold chain)

Tracing a batch end to end.

A batch enters your inventory at GRN. Every transfer between branches references the specific batch and quantity moved. Every sale references the specific batch consumed. Every adjustment (damage, expiry, count variance) references the batch. The result is a complete graph: this batch entered on date X, went to branches A, B, C in these quantities, was sold to these customers in these quantities, and the residual is in these locations.

On a recall, you query the batch and follow the graph. Forward (where is it now?) gives you stock to recover. Backward (which customers bought from this batch?) gives you a contact list. Both queries are sub-second with batch tracking enabled. Both are impossible without it.

Supplier GRNBatch + expiry recordedTransfersBatch + qty per moveSalesBatch on every invoiceRecall hitForward + backward traceCustomer callsHours not days
Every hop carries the batch number. A recall becomes a query, not a phone campaign.

How batch tracking integrates with fefo.

Batch and FEFO are the same data structure, used differently. FEFO uses the batch records to pick the soonest-expiring on every sale. Recall tracing uses the same batch records to query which customers got which batch. Setting up batch tracking gives you both — there is no extra cost to enabling FEFO once batches are tracked.

The combined effect is two operational benefits. Day-to-day, FEFO reduces expiry write-off by 50-80%. Crisis-day, batch tracing reduces recall scope, recall time, and reputation damage. The cost is a few extra seconds at GRN to scan or enter the batch data — well worth the payback.

How nonari runs batch tracking.

Nonari supports per-SKU configuration: a SKU can be batch-tracked alongside its WAC costing. On GRN of a batch-tracked SKU, the receiver enters batch number, manufacture date, expiry date, and supplier reference. The batch becomes a record linked to the SKU, with a remaining quantity that decreases on every transfer and sale.

Sales pickers see "batch B-2025-04-A12, expiry 2025-12-31" on the screen and pull from that specific batch. Recall queries are pre-built reports: forward trace ("where is batch X right now?") and backward trace ("which customers bought from batch X between dates Y and Z?"). The system feeds compliance reports for FDA, MHRA, EFSA, FSANZ and similar bodies in standard formats.

Frequently asked

Common questions.

Is batch tracking required by regulators?

For pharma — yes, the FDA, MHRA, TGA, and EMA all require batch traceability. For food — EU Regulation 178/2002, US FDA FSMA, and FSANZ all impose one-step traceability minimums, with more rigour expected for high-risk categories.

How long should I keep batch records after sale?

For pharma, minimum 5 years post-expiry in most jurisdictions. For food, minimum 2 years post-sale or per category-specific rules. Your system should keep them indefinitely with audit-grade timestamps.

Can a customer return a unit from a batch I no longer stock?

Yes — the batch record persists even after stock is exhausted. Returns reference the original sale and original batch.

What if my supplier ships without a batch number?

For pharma and food, refuse the receipt. The supplier should always provide a batch number on the invoice or carton. Without it you cannot meet regulatory requirements regardless of your system.

Does Nonari support recall workflow end to end?

Yes. Forward trace, backward trace, customer contact list export, write-off journal for recovered stock, and a recall log with timestamps for regulator review.

Try nonari

Put your books on autopilot.

Free to start. No credit card. Bring your books, kick the tires, export everything if you decide to leave.