Every carton of medicine, milk, maize meal or agro-chemical that moves through South African distribution carries two pieces of data that decide whether it ends up as revenue or as a write-off.
They are the batch number and the expiry date. For a distributor loading a truck in Johannesburg for the N3 run down to Durban, or a pharma wholesaler breaking bulk for pharmacies across Gauteng, they separate a clean, targeted recall from a frantic ring-around of every account on the ledger.
The chain is long. Manufacturer to distributor to regional depot, then out through cash-and-carry and independent wholesalers to national chains, forecourts, tuck shops and the spaza shops of the township trade. When a batch has to be traced or pulled, most operators find they cannot say where it went.
This is a practical guide for FMCG and pharma distributors in South Africa on building batch and expiry discipline that holds up in the real market: dual-channel coverage across modern trade and township trade, routes where mobile signal thins out, a field force working in several languages, and stock that changes hands more than once before anyone buys it.
Why Batch and Expiry Discipline Is Not Optional Here
SAHPRA oversees medicines and health products in South Africa, and the same batch logic runs through food, dairy, cosmetics and agro-chemical lines. A regulated pack carries a batch identity for a reason.
When a regulator or a principal raises a recall or a public alert against one batch, you are expected to take that exact batch out of circulation quickly. If your records show only how many cases you sold, and not which batch reached which account, you have nothing to act on.
That leaves two poor options:
- Pull everything back, which costs a fortune and dents your standing with the principal.
- Pull nothing back, which is unsafe and indefensible.
Expiry is the slower, steadier leak. Short-shelf-life lines run down quickly: dairy, juice, bread and confectionery, a long list of pharma SKUs, and agro inputs pinned to a planting window.
In a chain where stock can rest for weeks at a regional depot in Bloemfontein or an independent wholesaler in Polokwane before a shopper ever sees it, product that left the warehouse fresh can be almost dead by the time it sells. With no batch-level expiry view, that stock turns quietly into rand write-offs, returns and damage claims against margins that were thin to begin with.
Following One Batch Across Every Change of Hands
The real problem is visibility at the handovers. A batch does not vanish in one dramatic moment; it fades a little at every transfer.
Tracking it properly means recording the batch each time custody changes, not only when it crosses your own receiving bay.
Capture the batch at the receiving bay
Batch tracking begins at goods receipt, not at the point of sale. When a consignment lands, whether it came off a production line in Gauteng or through the port at Durban, the batch number, manufacturing date and expiry date belong on the goods received note (GRN) line by line, before anything is put away.
Miss that step and every record downstream is an estimate. Getting inward right gives you:
- Every case on your racking tied to a real batch and a real expiry date, not just a quantity against an SKU.
- Imported stock and locally made stock of the same product kept apart, even when they sit on the same rack.
- A near-expiry clock that starts the day stock arrives, so nothing ages quietly at the back of the warehouse.
Carry the batch through dispatch and into secondary sales
Once stock is inside, the batch has to travel with it. When you dispatch to a regional depot in Gqeberha or an independent wholesaler supplying Umlazi, the invoice and the delivery note should both carry the batch.
When a rep books a secondary order at a spaza shop in Khayelitsha or a tuck shop on a Cape Town route, the system should already know which batch is being committed. Then a recall traces forward to the exact outlets that took the stock, and backward from a single complaint to the consignment it came out of.
FEFO, FIFO and Picking the Right Allocation Rule
Which batch leaves the warehouse first is the strongest single lever you have against expiry loss. Only a handful of standard rules exist, and matching the rule to the product is what actually matters.
Here is where each one earns its place:
| Allocation rule | Batch released first | Where it fits |
|---|---|---|
| FEFO (First Expiry, First Out) | The batch nearest its expiry date | Perishable lines: pharma, dairy, juice, bread, agro inputs |
| FIFO (First In, First Out) | The earliest batch received | Steady non-perishable lines where arrival order mirrors age |
| LIFO (Last In, First Out) | The most recent batch received | Rare accounting cases; a poor fit for dated stock |
| Manual selection | Chosen by the operator | Recalls, or steering one ageing batch to a chosen account |
The workable setting is FEFO by default on perishable SKUs, FIFO on stable lines, and manual override kept live for the exceptions, so nobody on a loading bay in Johannesburg is picking batches from memory under time pressure.
A Recall Down the N3: Where the Trail Holds or Snaps
Picture a distributor in Johannesburg who receives a recall notice on one batch of a paediatric suspension, three weeks after it left the warehouse.
With batch discipline running, the trail is short and specific:
- The batch was captured at GRN, so the quantity received is known precisely.
- Dispatch records place that batch at two regional depots, one in Durban and one in Bloemfontein.
- Secondary-sales records name the wholesalers and pharmacies each depot went on to supply.
- A targeted pull-back reaches those accounts inside hours rather than weeks.
Without it, the same distributor knows only that roughly 800 cases went out that month to dozens of accounts. The choice narrows to recalling the lot at brutal cost, or gambling that the affected units never sold. Either way, the regulator and the principal see a business that cannot account for its own stock.
Clearing Near-Expiry Stock Before It Turns Into a Loss
Near-expiry stock is not yet a loss; it is a countdown. The distributors who defend their margins are the ones who move while the shelf life still has value.
That takes the right measurements and early action. Three signals carry most of the weight:
- Days-to-expiry by batch and warehouse so you can see exactly which batches sit at risk in which location, rather than one headline stock number.
- Stock ageing buckets that sort holdings into bands (beyond 90 days, 30 to 90 days, inside 30 days) so exposed value is readable at a glance.
- Sell-through rate per SKU so you know whether an ageing batch can realistically clear through your accounts before the date.
Once a batch trips the near-expiry threshold, the moves are practical. Shift it to a faster territory, because a batch crawling in Polokwane may clear in days through the high-traffic trade around Warwick Junction in Durban.
You can also run a scheme or a price incentive, or lodge a claim with the principal where the trade terms allow it. What matters is that the alert lands early, with the person who can actually move the stock.
Where batch discipline usually breaks
- Tracking at SKU level only tells you 500 cases are on hand but not which batches they belong to, so you can neither recall nor run FEFO. Batch is the unit that counts.
- Capturing batch at the counter lands far too late to plan around expiry. Move it to GRN.
- Leaving the batch off the invoice snaps the trail at the very first handover to a depot or wholesaler.
- Alerts addressed to nobody amount to no alert at all. Route the near-expiry flag to whoever can shift the stock.
- Relying on rep memory for batch selection guarantees errors. Automate allocation and keep manual override for genuine exceptions.
Making It Work on the Ground: Coverage, Language and Routes
A batch-tracking process that only behaves on a good day at head office is worthless. South African distribution has conditions any system has to absorb.
Offline-first, because signal is not guaranteed on every route
Mobile coverage thins out along rural routes and drops into dead pockets inside township trade and dense transport-hub trading, from Warwick Junction to the streets around the Bree taxi rank.
If recording a batch at GRN, or booking a batch-allocated order, needs a live connection, it will simply not get done. Reps drop back to paper and the numbers never reconcile.
Batch capture and order booking have to run offline in the mobile app and sync on their own once signal comes back, so a rep working deep inside a market building or out on a rural leg keeps recording accurately.
Built for a multilingual field force and patchy addressing
Your reps work across several of South Africa's official languages, and in plenty of areas they find outlets by landmark rather than street name, because street addressing is inconsistent.
Batch and expiry steps have to be light enough that a rep confirms the right batch at the counter without stretching the visit. Outlet records should tie to GPS and landmarks so the same shop is recognised every time, which is what keeps the batch-to-outlet trail whole.
How 1Channel Supports Batch and Expiry Control in South Africa
Batch discipline holds only when capture, allocation and alerts sit in one connected system instead of being spread across spreadsheets and rep recall. 1Channel pulls the entire batch-to-outlet trail into a single platform, and supports the traceability a South African distributor is expected to demonstrate.
It records batches at goods receipt, holds them through dispatch and secondary sales, and keeps working offline where route coverage is unreliable.
On this subject, the platform lets you:
- Capture batch number, manufacturing date and expiry on the GRN, line by line.
- Apply FIFO, FEFO, LIFO or manual allocation, set per SKU or across the platform.
- Flag near-expiry stock by batch and by warehouse, and route the alert to its real owner.
- Trace a batch forward to the accounts that received it and backward to its consignment when a recall lands.
- Carry on capturing and booking orders offline, syncing by itself once signal returns.
Put Every Batch and Expiry Date on One Screen
See how 1Channel's Cloud AI Batch & Expiry Management Software records batches at GRN, applies FIFO, FEFO, LIFO or manual allocation, flags ageing stock, and carries on working offline where South African route coverage runs thin.
Explore Batch & Expiry Software →FAQs
What does batch traceability actually require a distributor to do?
At a minimum you must be able to say which specific batch of a regulated product reached which account. That means recording the batch number and expiry at goods receipt and keeping them attached through dispatch and secondary sales, so a recall resolves to named outlets.
Should I run FEFO or FIFO on my stock?
Run FEFO on anything perishable, such as pharma, dairy, juice, bread and agro inputs, because it releases the batch nearest its expiry date first. FIFO fits steady non-perishable lines where arrival order roughly matches age. Set the default per SKU and keep manual override for recalls.
How do batches stay tracked where mobile coverage drops?
Batch capture and order booking should run offline in the mobile app and sync automatically once signal returns. A rep working a rural leg or a dense trading hub keeps recording accurately, and the batch-to-outlet trail stays unbroken.
How does batch discipline defend distributor margins?
The same batch-level records that let you answer a recall in hours rather than days also surface ageing stock early enough to move it, discount it or claim it. Capturing the batch at inward, holding it through every handover and running FEFO where it counts turns a compliance obligation into a margin advantage.


