Method
This page lists everything the calculator does: the formulas, the starting values and where the dairy price comes from.
Formulas
Direct sales are compared with delivering the same milk to the dairy. The dairy price is therefore counted as a cost of every litre sold directly.
dairyPricePerL = pricePer100kg × 1.03 / 100
marginPerSoldLitre = sellPrice × (1 − paymentFeeShare)
− bottleCostPerL
− dairyPricePerL / (1 − wasteShare)
annualFixed = hoursPerDay × daysOpen × hourlyValue
+ electricityPerYear + maintenancePerYear
+ labTestsPerYear + insurancePerYear
annualMargin = marginPerSoldLitre × soldLitresPerDay × daysOpen − annualFixed
paybackMonths = investment / (annualMargin / 12)
breakEvenLitresDay = annualFixed / (marginPerSoldLitre × daysOpen)
targetLitresDay = (annualFixed + investment / paybackTargetYears)
/ (marginPerSoldLitre × daysOpen)
cashFlow[m] = −investment + m × annualMargin / 12, m = 0..60
If the margin per litre sold is zero or negative, the break-even and target volumes are shown as "not profitable at this price".
What each result means
- dairyPricePerL
- The dairy price converted from € per 100 kg to € per litre. One litre of milk weighs about 1.03 kg.
- marginPerSoldLitre
- What one litre sold directly earns more than a litre delivered to the dairy, after payment fees, the bottle and the milk that was loaded but not sold.
- annualFixed
- Costs that do not depend on the volume sold: your time, electricity, maintenance, lab tests and insurance.
- annualMargin
- Extra margin per year compared with the dairy, after fixed costs.
- paybackMonths
- Months needed for the extra margin to cover the investment. If the annual margin is zero or negative, the investment does not pay back.
- breakEvenLitresDay
- Litres to sell per day for the annual margin to be exactly zero.
- targetLitresDay
- Litres to sell per day to recover the investment within the payback target.
- cashFlow
- Cumulative cash flow for each month from 0 to 60, starting at minus the investment.
Scenarios
Three scenarios are calculated. Expected uses your figures as entered. Pessimistic uses 25% fewer litres and 5 percentage points more unsold milk. Optimistic uses 25% more litres.
Starting values
Every starting value can be changed in the calculator. Values marked as not yet verified are placeholders until a reliable source is found.
| Input | Starting value | Source | Status |
|---|---|---|---|
| Country | Belgium | Design choice: KTLO is based in Belgium | Verified |
| Herd type | Conventional | Design choice: the most common case | Verified |
| Milk sold | 30 L/day | Placeholder | Not yet verified |
| Selling price | 1.2 €/L | Placeholder, pending a survey of Belgian vending machines | Not yet verified |
| Investment | 20,000 € | University of Hohenheim study on German milk vending machines: an investment under €20,000 is realistic | Not yet verified |
| Your time | 0.75 h/day | Placeholder | Not yet verified |
| Days open | 365 days/year | Placeholder | Not yet verified |
| Payment fees | 2 % | Placeholder | Not yet verified |
| Bottle cost | 0 €/L | Placeholder: customers usually bring or buy their own bottles | Not yet verified |
| Milk loaded but not sold | 10 % | Placeholder | Not yet verified |
| Value of your time | 20 €/h | Placeholder | Not yet verified |
| Electricity | 400 €/year | Placeholder | Not yet verified |
| Maintenance | 500 €/year | Placeholder: yearly hose replacement plus monthly calibration | Not yet verified |
| Lab tests | 300 €/year | Placeholder | Not yet verified |
| Insurance | 200 €/year | Placeholder | Not yet verified |
| Payback target | 5 years | Design choice: matches the 60-month chart | Verified |
Dairy price data
Dairy prices come from the raw milk price data of the European Commission's Agri-food Data Portal: monthly prices per member state, for conventional and organic milk, in € per 100 kg.
Each value is checked before it is published. A value is rejected if it is outside 20–90 € per 100 kg, if its month is more than 4 months old, or if it differs by 30% or more from the previous value. In that case the previous value stays and is marked as outdated.
Where no organic price is published, the conventional price is used. Where a country has no recent price at all, a neighbouring country's price is used. The calculator says so in both cases.
Last update: 13 October 2026
| Country | Herd type | € per 100 kg | € per litre | Month |
|---|---|---|---|---|
| Belgium | Conventional | 44.00 | 0.4532 | September 2026 |
| Belgium | Organic | 54.79 | 0.5643 | August 2026 |
| Netherlands | Conventional | 44.00 | 0.4532 | September 2026 |
| Netherlands | Organic | 67.00 | 0.6901 | August 2026 |
| Luxembourg | Conventional | No data | ||
| Luxembourg | Organic | No data | ||
| Germany | Conventional | 41.15 | 0.4238 | September 2026 |
| Germany | Organic | 63.35 | 0.6525 | August 2026 |
| France | Conventional | 44.39 | 0.4572 | September 2026 |
| France | Organic | 53.40 | 0.5500 | August 2026 |
Data source: European Commission
API request: https://api.tech.ec.europa.eu/agrifood/api/rawMilk/prices?memberStateCodes=BE,NL,LU,DE,FR&years=2025,2026
Disclaimer
Estimate, not financial or legal advice. The results depend entirely on the figures entered. Check them with your accountant, and check the rules for selling raw milk with your food safety authority.