Running a Milk Shop: The Numbers Most Dairies Never See
How to record daily milk collection, farmer dues and customer subscriptions so month end adds up instead of turning into an argument over litres.
A milk shop is two businesses sharing one counter. On one side you buy litres from farmers, usually on credit, and settle at the end of the week or the month. On the other side you sell litres for cash to people who walk in and on subscription to people who take a fixed quantity every morning.
Most record keeping fails because it treats this as one flow of milk. It is not. It is two ledgers that have to agree with each other, and the place they disagree is where your money goes.
Why the notebook holds up all month and collapses on the last day
The daily notebook is not a bad tool. For a single day it is excellent. You write down who brought what, you write down who took what, and by evening the page makes sense.
The problem arrives when someone asks a question that spans thirty pages. A farmer says he brought more than you have paid him for. A subscription customer says he was away for four days and should not be charged. You now have to read a month of handwriting, add columns in your head, and defend the answer to someone who is unhappy.
That is the real cost. Not the writing, the reading.
The three questions your records must answer
Everything else is detail. If your system answers these three, you are in control of the shop.
What is owed to each farmer right now? Not at month end, right now. Total litres received from that farmer since the last settlement, valued at the rate that applied on each day, minus anything already paid or advanced.
What does each subscription customer owe? Days delivered, not days in the month. A customer who paused for a week owes for the days he actually took.
Where did the difference between litres bought and litres sold go? You bought 400 litres today and sold 383. The 17 litres are not a mystery, they are a number you should be able to explain.
Most dairies can answer the first question roughly, the second question with effort, and the third not at all.
Record the rate on the entry, not in your head
This is the single change that prevents most farmer disputes.
When you enter 12 litres from Farmer A on the 3rd, store the rate that applied on the 3rd along with the quantity. Do not store only the quantity and look the rate up later from a "current rate" field.
The reason is simple. Rates change. When you raise the purchase rate mid-month, a system that holds one current rate will silently revalue everything you bought before the change. The farmer's total moves. He remembers what you told him on the 3rd, your book now says something different, and neither of you can prove anything.
Recording the rate on the entry means a rate change applies from the day you change it and nothing behind it moves. History stops being editable by accident. The same applies on the selling side, and it applies to fat-based or quality-based rates too — whatever rate you agreed for that collection, it belongs on that line.
Morning and evening are two different sessions
Treat them as separate records, not one daily total.
Farmers do not always supply both times. Quantities differ between sessions, and so sometimes does the rate. A farmer who brings 8 litres in the morning and 5 in the evening should see two lines, not 13 litres in a single line he cannot check.
Separate sessions also make the shrinkage number readable. If the gap between bought and sold sits mostly in the evening, you are looking at a specific shift, a specific person, and a specific set of containers. A single daily figure hides that.
Subscriptions are a different business from the counter
Walk-in sales are simple. Money changes hands, milk goes out, the day closes.
Subscriptions are a small credit business. You deliver every morning for thirty days and ask for money once. That means you need three things recorded: the standing quantity, the daily deviation, and the pauses.
The deviations are what break the notebook. A customer normally takes 2 litres and today took 3. Another normally takes 1 litre and was away from the 10th to the 14th. If those are not captured on the day, they are gone, and at month end you are either guessing or accepting whatever the customer tells you.
A workable rule: record the delivery every day, even when it matches the standing quantity. A row that says "2 litres, as usual" is worth writing, because a missing row then genuinely means something.
When you bill, bill from the delivery records, not from the standing quantity multiplied by thirty. If you are VAT registered, the monthly bill is a tax invoice with VAT at 15 per cent and it needs to look like one — our guide to creating a ZATCA-compliant invoice covers the required fields and the QR code.
Where the litres actually disappear
Shrinkage is treated as theft far more often than it is theft. That assumption is expensive because it makes people defensive and stops them reporting the real causes.
Litres go missing in ordinary ways:
| Cause | What it looks like |
|---|---|
| Generous pouring | Consistent small gap, every day, no pattern by shift |
| Measurement error | Gap appears when a particular measure or container is used |
| Spillage and residue | Milk left in cans, transfer losses, cleaning |
| Unrecorded staff consumption | Tea, breaks, small quantities nobody thinks to write down |
| Sales entered late or not at all | Gap on busy days only |
| Genuine loss | Souring, breakage, a rejected batch |
The point of measuring shrinkage is not to catch anybody. It is to know your normal. Once you know that your shop typically loses a small and stable percentage, the useful signal is a change in that number, not the number itself.
So publish it. Tell your staff you measure it, tell them what normal looks like, and ask them to write down the tea and the spillage rather than hide it. Recorded consumption is not a loss, it is a cost you can see. Unrecorded consumption is what turns into a monthly argument.
The five-minute daily routine
This is the whole discipline. It does not need a computer, but it is much faster with one.
- Enter morning collection by farmer, with quantity and rate on each line.
- Enter morning subscription deliveries, including the ones that match the standing quantity.
- Repeat both after the evening session.
- Enter counter sales as they happen, or as a single closing figure if that is all your setup allows.
- Before you lock up, compare litres in against litres out plus known consumption. Write the difference down.
Step five is the one everybody skips and the only one that produces new information. A number written every day becomes a line you can read across a month. A number nobody writes is a number nobody can explain.
What month end looks like when this is in place
Farmer settlement becomes a printout instead of a negotiation, because each line carries its own date, quantity and rate. Subscription bills come from delivery records, so a customer disputing four days can be shown the four days. And the litre gap is a figure with a history behind it rather than a shrug.
None of this requires expensive equipment. It requires that the rate lives on the entry, that sessions stay separate, and that the daily difference gets written down even when it is boring.
If you would rather not maintain this in a book, our milk and dairy management software handles collection entries, per-farmer dues, subscription billing and the daily litre reconciliation, and it works alongside the counter side of the shop in our POS software for Saudi Arabia. Both come with a 7-day free trial and are paid after that; the invoice generator and CV Studio are free to use.
Both sides of the dairy in one ledger
DairyDesk records collection from farmers and sales to customers together, so the litres reconcile.