“For seven years I signed every contract with one tariff for all three chambers. Forty hryvnia a pallet-day — in the chilled room and in deep freeze alike. Then someone worked out the energy per occupied slot. In the coldest chamber it came to forty-eight,” — that is how Andrii Levchuk opened the conversation. He owns a cold storage warehouse in Brovary.
The picture is familiar to any warehouse. The chambers hold their temperature, the dock works, tenants bring in pallets. The contract carries one tariff, and it looks perfectly clear.
The arithmetic breaks in one place. The warehouse sells pallet-days and pays for the volume of a chamber. Between those two units sits the empty slot.
Below we split the warehouse into two units. The pallet slot in the racking, and the occupied slot the tenant pays for. And we get to why the coldest chamber gives away more than it brings in.
Both units already exist on site. The racking contractor counted the slots, the storekeeper sees occupancy every day. Neither of them appears in the accounts.
Andrii's path: three chambers
Andrii started with one chamber at 0…+4 °C. He stored vegetables and dairy, and kept revenue in a notebook. There was one tariff, because there was one chamber.
Then came the capital spending. A second chamber at −18 °C, a refrigeration unit for it, a standby generator, racking four levels high. The warehouse grew to 1 800 pallet slots.
The third chamber at −24 °C Andrii built for one particular tenant. That tenant promised steady volume and signed for a year. He did not renew. The chamber stayed, the volume did not.
The tariff did not change through any of it. Forty hryvnia a pallet-day carried over from the first contract into all the rest. It is easier to negotiate that way, and easier to invoice.
Profit did not fall. It simply stopped growing the way the warehouse grew. Andrii put that down to market prices and to the power company's rates.
“While there was one chamber, I knew the cost of a day to the kopeck. Now I see a monthly report: revenue, the power bill, profit. Which chamber the hryvnia came from is written nowhere. I was signing contracts blind.”
One tariff for three zones
For years Andrii ran on one number. The tariff per pallet-day. That is what the contract settles and what you haggle over.
But the tariff does not know the temperature. A tenant in the chilled chamber and a tenant in deep freeze both pay 40 ₴ for the same day. Their cold consumption differs several times over.
Power at the warehouse costs 7.50 ₴/kWh. That is the one price identical in all three chambers. Everything else about them differs.
A tariff is set by temperature, not by warehouse.
One tariff across three zones means a simple thing. The chilled chamber subsidises deep freeze. The contracts do not show that subsidy, because they hold no line for cold.
Cold pays for volume
The refrigeration unit does not know how many pallets are in the chamber. It holds the temperature across the whole volume. An empty rack is cooled exactly like a full one.
So cold consumption is counted per pallet slot, not per pallet. A pallet slot is a bay in the racking. It costs money whether anything sits in it or not.
Cold holds the chamber's volume, not the pallets.
In the chilled chamber one slot eats 0.8 kWh a day. In the chamber at −18 °C it is 2.0 kWh. In deep freeze, 3.2 kWh.
Convert that into money. It comes to 6 ₴ a slot a day in the first chamber, 15 ₴ in the second and 24 ₴ in the third.
This is a cost that does not react to occupancy. Tenants may fill half the chamber or all of it. The compressor will run the same.
An empty slot costs as much as a full one.
What the monthly report missed
The bookkeeping the warehouse lived with is familiar to any cold store grown out of a single chamber. There is not a word about equipment in it.
- One tariff was kept for every zone. The contract carried 40 ₴ a pallet-day, and the chamber's temperature was never mentioned in it.
- The power bill sat as a single line. One sum arrived for the whole warehouse. Nobody broke it down by chamber.
- Occupancy was measured by warehouse, not by chamber. The report held one percentage for 1 800 slots. Which chamber stood half empty it never showed.
- An empty slot was treated as zero. A vacant bay had neither a price nor a line. In the accounts it simply did not exist.
- Revenue was viewed as a single sum. Pallet-days rolled up into a monthly total, and nobody looked into the breakdown.
- The cost of an occupied pallet-day did not exist. That line was absent from the summary — neither overall nor per chamber.
Six points, and all of them in the accounts. Not one is about compressors or about the people on the dock. So neither the engineer, nor the storekeeper, nor Andrii himself saw them.
Taken one by one, each point looks minor. Together they give one result. The owner sees pallet-days and does not see what they cost.
Revenue per pallet slot
Now the other half of the arithmetic. The contract holds one tariff, yet revenue per slot differs. Occupancy makes the difference.
Occupancy is the share of slots with a pallet in them. In the chilled chamber that is 85%. In the chamber at −18 °C it is 70%, in deep freeze 50%.
Revenue per slot per day is the tariff multiplied by occupancy. That gives 34 ₴ in the first chamber, 28 ₴ in the second and 20 ₴ in the third.
The tenant still pays the full 40 ₴ for his pallet. But the warehouse rents out slots, not pallets. And half the slots in the third chamber bring nothing.
What the chamber report showed
Andrii put all three chambers into one calculation. The tariff is the same in every row. Two columns make the difference.
| Chamber | Temperature | Pallet slots | kWh per slot per day | Energy, ₴ per slot | Occupancy | Revenue, ₴ per slot | Margin, ₴ per slot | Total, ₴/mo |
|---|---|---|---|---|---|---|---|---|
| Chamber A | 0…+4 °C | 900 | 0.8 | 6 | 85% | 34 | +28 | 756 000 |
| Chamber B | −18 °C | 600 | 2.0 | 15 | 70% | 28 | +13 | 234 000 |
| Chamber C | −24 °C | 300 | 3.2 | 24 | 50% | 20 | −4 | −36 000 |
| Total | — | 1 800 | — | — | — | — | — | 954 000 |
Look at the second column from the end. Chamber A gives +28 ₴ per slot per day. Chamber B gives +13 ₴. Chamber C takes 4 ₴ away.
The minus in the third row is not a rounding error. Energy per slot there is 24 ₴ and revenue is 20 ₴. The difference stays with the warehouse.
Over a month that is 36 000 ₴ the warehouse did not earn. The chamber runs, tenants pay, invoices go out on time.
The last column reads even more simply. The first two chambers give 756 000 ₴ and 234 000 ₴. The third takes 36 000 ₴ back.
“I carried this report around for a week. Everyone looked at the occupancy column and said: the chamber is half empty, bring in more. Decisions are made on the second column from the end. That is where margin per slot sits.”
0.8 and 3.2 are not money
Two figures in the fourth column are easy to read as hryvnia. They are kWh. 0.8 means something else: holding one slot in the chilled chamber for a day takes 0.8 kWh.
They turn into money in the next column. There stand 6 ₴ and 24 ₴ — the same energy multiplied by 7.50 ₴/kWh.
34 ₴ is the tariff multiplied by occupancy
The tariff in chamber A is the same as everywhere else — 40 ₴ a pallet-day. Yet the revenue column shows 34 ₴. That is not a discount to the tenant.
It is the same tariff restated across every slot in the chamber. Occupancy is 85%, so each slot carries 34 ₴. In chamber C occupancy is 50%, and it comes to 20 ₴.
Cost above the tariff
Now the same energy on a different base. Not across every slot in the chamber, only across the occupied ones. Occupied slots are what the tenant pays for.
| Chamber | Energy, ₴ per slot | Occupancy | Energy, ₴ per occupied slot | Tariff, ₴ |
|---|---|---|---|---|
| Chamber A | 6 | 85% | 7.06 | 40 |
| Chamber B | 15 | 70% | 21.43 | 40 |
| Chamber C | 24 | 50% | 48.00 | 40 |
The last two columns stand side by side for a reason. In chamber A an occupied pallet-day costs 7.06 ₴ against a tariff of 40 ₴. In chamber B it is 21.43 ₴.
In chamber C it costs 48.00 ₴. The tariff is the same. Cost is above the price the warehouse sells it at.
Cost above the tariff on an occupied pallet-day is a loss.
This is no longer a “thin margin” or a seasonal dip. Every pallet in chamber C leaves the warehouse at a loss. And the longer it lies there, the bigger that loss.
6 ₴ and 7.06 ₴ are different bases
Both figures are the same energy of chamber A over one day. The only difference is what you divide it by.
6 ₴ is per every slot in the racking, occupied or not. 7.06 ₴ is per slot that actually holds a pallet. The second figure is the one to compare with the tariff.
Low occupancy costs twice
This is where the whole calculation breaks. The empty slot enters it from two sides. It is not one problem but two.
First it takes away revenue. A slot without a pallet brings nothing, because the tariff is charged only on occupied ones.
Then it removes no cost at all. The compressor holds the whole volume of the chamber. The same energy is divided over fewer pallets.
Low occupancy cuts revenue and leaves energy untouched.
That is why 48.00 ₴ sits so far from 24 ₴. Half of chamber C stands empty, and all its energy lands on the other half.
The same arithmetic works in chamber A, only more gently. Occupancy is 85%, and 6 ₴ turns into just 7.06 ₴.
“For two years I waited for chamber C to fill up on its own. I assumed a half-empty chamber simply earns less. It turned out otherwise: in the meantime it had doubled the cost of a day. That mistake cost me thirty-six thousand a month.”
The month in summary
Now the whole warehouse in one column. First revenue, then power and fixed costs, and profit at the end.
Revenue for the month is 1 602 000 ₴. That is every pallet-day of three chambers over 30 days.
The power bill is 648 000 ₴. After it the three chambers give 954 000 ₴ of contribution.
Against that contribution stand the fixed costs. They do not know how many slots in the warehouse are occupied.
- Salaries — 320 000 ₴.
- Depreciation — 210 000 ₴.
- Repairs and maintenance of refrigeration equipment — 78 000 ₴.
- Rent — 140 000 ₴.
- Security — 44 000 ₴.
- Administrative costs — 68 000 ₴.
Together 860 000 ₴. Profit is 94 000 ₴, that is 5.87% of revenue.
And that contribution is already reduced by the 36 000 ₴ loss of chamber C. That line was never in the monthly report.
860 000 ₴ does not know occupancy
Compressors, racking, security and rent stand there regardless. It does not matter how many pallets the tenants brought in. Depreciation of 210 000 ₴ is the same for a full chamber and a half-empty one.
So all the work on tariff and occupancy hits profit directly. Fixed costs do not react to it at all.
Fixed costs do not know how many slots are occupied.
Where the margin hides
94 000 ₴ on revenue of 1 602 000 ₴ is 5.87%. For a warehouse with this equipment that is not much.
Looking for the reason in fixed costs is pointless. 860 000 ₴ for a cold store like this is ordinary money. There is nothing to cut there.
The reason sits higher up. One tariff across three temperature zones — and chamber A subsidises chamber C all year.
Count it another way. If chamber C simply broke even, the month's profit would be 36 000 ₴ higher. That is more than a third of the whole profit as it stands.
One tariff across three zones is a subsidy.
Three moves and their price
The owner's first thought is always the same. Shut the loss-making chamber and forget it. Andrii counted three moves before deciding anything.
| Move | What changes | ₴/mo |
|---|---|---|
| Tariff by zone: chamber B from 40 to 50 ₴, chamber C from 40 to 76 ₴ | margin B from +13 to +20 ₴, margin C from −4 to +14 ₴ | +288 000 |
| Occupancy of chamber C from 50% to 85% at the same tariff | margin from −4 to +10 ₴ per slot | +126 000 |
| Shut chamber C, cargo into the 180 free slots of chamber B | 216 000 ₴ saved, 180 000 ₴ lost, 180 000 ₴ billed back | +216 000 |
The first move is the strongest, and that is the main thing in the table. 288 000 ₴ a month without a single new pallet.
With it profit goes from 94 000 ₴ to 382 000 ₴. That is 4.06 times over. Same chambers, same compressors, same tenants.
The second move is weaker, and it does not depend on the accounts. Only a tenant who does not exist yet can fill chamber C to 85%.
The difference between the first and the second move matters. The owner raises the tariff himself. Occupancy is brought to him by the market.
50 ₴ and 50% are different fifties
The figure 50 stands twice in the table, and it is about different things. The first is the new tariff of chamber B in hryvnia per pallet-day.
The second is the occupancy of chamber C, the share of slots that are filled. There is no arithmetic link between the two.
Two different readings of 85%
85% also stands twice in this article. The first is the current occupancy of chamber A. That is a fact from the storekeeper's log.
The second is the target occupancy of chamber C in the second move. That is a target, not a fact. Pulling chamber C up to the level of chamber A is worth +126 000 ₴.
The limit of the third move
The third row looks the simplest. Switch off chamber C, move its pallets into chamber B, save on power.
The arithmetic adds up. The warehouse stops paying 216 000 ₴ for the cold of chamber C. Revenue of 180 000 ₴ disappears with the chamber.
But the pallets do not disappear. They move into chamber B, and the tenant pays for them there. The extra billing returns the same 180 000 ₴.
What remains is the power saving — 216 000 ₴ a month. Less than the first move, but with no tariff negotiations at all.
And here a limit appears that the table does not hold. Chamber B is kept at −18 °C. Only cargo that tolerates that temperature will go there.
Deep freeze will not move. Fish, ice cream and ready meals held at −24 °C would spoil in chamber B. For them the third move simply does not exist.
The figure in the row is correct, but the move is not open to every tenant. You judge it not by the sum, but by what lies on the pallets.
Where the 180 free slots came from
Chamber B has 600 slots and is 70% occupied. That leaves 180 slots free, and the warehouse already pays for their cold.
That is the only reason the third move is possible at all. The cargo from chamber C fits into those free slots, and no new cold is needed for it.
“I put the third row at the top of the plan — it looked the cheapest. Then I called the tenant who stores fish. He asked one thing: what temperature chamber B is held at. I struck the row off the plan the same day.”
A decision worth 288 000 ₴
Andrii chose the first move. The tariff now differs by zone: chamber B went to 50 ₴, chamber C to 76 ₴.
The price of the decision is known as well. Two contracts had to be rewritten from scratch, and one tenant of chamber C refused. His slots stood empty for a month and a half.
Andrii deliberately gave up replacing the compressor in chamber C. The money went on meters per chamber and on separate accounting for power.
The hard part was not the calculation but saying 76 ₴ out loud. That tariff is almost double the one the warehouse ran on for seven years.
“I opened the negotiation with the power bill, not with the price. I put two figures on the table: forty-eight hryvnia of cost and forty hryvnia of tariff. The tenant did the arithmetic himself and signed at seventy-six. He saw exactly what I saw.”
One metric every month
Andrii turned the decision into four changes in the accounts. All of them on paper, none in the plant room.
- The tariff went by zone. The contract now carries the chamber's temperature, not one figure for the whole warehouse.
- Power is split out by chamber. Not one sum for the warehouse, but each chamber on its own.
- Occupancy is measured per chamber. 85%, 70% and 50% — three percentages instead of one for 1 800 slots.
- The empty slot got a price. A vacant bay now weighs 6 ₴, 15 ₴ or 24 ₴ a day, depending on the chamber.
A new line appeared in the summary — energy per occupied pallet slot. Per chamber separately, and beside it that chamber's tariff.
Those two numbers are what Andrii watches every month. If cost closes on the tariff, he opens the tariff conversation. Without waiting for the quarter to end.
The first month of the new report was unpleasant. Occupancy in chamber B swung from week to week, and the monthly average smoothed it out.
The subject of negotiation changed as well. Andrii used to bargain over volume, now over temperature and storage term.
One metric: energy per occupied slot against the tariff.
The takeaway for owners. If you sell a slot and pay for a volume, one tariff for every zone is deceiving you. Work out the consumption of one slot in each zone separately. Then divide it by the occupancy of that zone. You get the cost of the unit you are actually paid for. Put that number next to the tariff — and you will see which zone brings money and which takes it away. Any storage and any rental of capacity works the same way: dry warehouses, grain silos, data centres, vehicle fleets.
A checklist for the owner
- Work out the energy per pallet slot. Per chamber separately: 0.8, 2.0 and 3.2 kWh a day are three different economics.
- Convert kWh into hryvnia. At a price of 7.50 ₴/kWh that is 6 ₴, 15 ₴ and 24 ₴ per slot per day.
- Divide the cost by the chamber's occupancy. 6 ₴ becomes 7.06 ₴, and 24 ₴ becomes a full 48.00 ₴.
- Put the tariff beside it. For Andrii that is 40 ₴, and one of the three costs has already passed it.
- Count margin per slot, not per pallet. +28 ₴, +13 ₴ and −4 ₴ — three figures instead of one, and you see which chamber carries the month.
- Give the empty slot a price. While a vacant bay costs zero, nobody will fill it.
- Set the tariff by the temperature of the zone. One tariff for chilled and for deep freeze means one chamber subsidises another.
Money does not vanish — you just do not see it
People think a cold store is all about equipment. Compressors, insulation, backup power. In truth the equipment decides whether the warehouse runs at all.
How much it earns is decided by something else. What temperature the chamber holds, and how many of its slots are occupied.
The bottom line does not lie, though. 94 000 ₴ of profit is the truth. But it does not say that chamber C took 36 000 ₴, and one tariff across three zones another 288 000 ₴.
Andrii still runs the chamber at −24 °C. The difference is that it now costs the tenant 76 ₴, not 40 ₴.
As soon as energy per occupied slot becomes its own line, the main thing is visible. 5.87% is not the ceiling of this warehouse. It is its result under one tariff for three temperatures.
How to see this at your own warehouse
Everything above rests on one row: not the warehouse as a single revenue figure, but each chamber on its own — with its temperature, its occupancy and its energy restated per occupied pallet slot. As long as one tariff covers every zone, you see neither that the chilled room is subsidising the frozen one, nor that low occupancy divides the same energy over a smaller base. When the same data is collected automatically, it becomes visible which chamber pays for itself — which is exactly why owners of small and medium businesses use Finmap: to see the financial picture rather than reconstruct it from memory.
Read also
- Fulfillment Warehouse: Profit Per Order and Per Pallet Space
- Greenhouse growing: cost per kilo, not kilos per square metre
Topic foundation: Management Accounting Explained: What It Is and Why Owners Need It
Frequently asked questions
Because the refrigeration unit holds the temperature across the whole volume of the chamber, not separately above each pallet. An empty rack is cooled just like a full one: the compressor does not know how many slots are occupied. So the unit of consumption is the pallet slot — a bay in the racking that costs money regardless of whether anything lies in it. At Andrii's warehouse one slot eats 0.8 kWh a day in the chilled chamber, 2.0 kWh in the chamber at −18 °C and 3.2 kWh in deep freeze. At a price of 7.50 ₴/kWh that is 6 ₴, 15 ₴ and 24 ₴ per slot per day. Count it per pallet and the empty slots drop out of the calculation — out of the power bill they do not drop.
Because the tariff does not know the temperature and the consumption does. A tenant in the chilled chamber and a tenant in deep freeze pay the same 40 ₴ a pallet-day, although the energy on their slots differs fourfold. For Andrii this shows up in margin per slot per day: chamber A gives +28 ₴, chamber B gives +13 ₴, chamber C takes 4 ₴ away. One tariff across three temperature zones means the chilled chamber subsidises deep freeze. The subsidy is visible neither in the contract nor in the monthly report: there is no line there for cold by chamber. While it is missing, the owner believes the problem is occupancy or market prices.
Revenue per slot per day is the tariff multiplied by the occupancy of the chamber. At a tariff of 40 ₴ and occupancy of 85%, chamber A gives 34 ₴ per slot, chamber B at 70% gives 28 ₴, chamber C at 50% gives 20 ₴. From that you subtract the energy per slot: 6 ₴, 15 ₴ and 24 ₴ respectively. The margin comes out at +28 ₴, +13 ₴ and −4 ₴ per slot per day. In money for the month that is 756 000 ₴ from the 900 slots of chamber A, 234 000 ₴ from the 600 slots of chamber B and minus 36 000 ₴ on the 300 slots of chamber C. Together the three chambers give 954 000 ₴ of contribution across 1 800 pallet slots.
Because of the division by occupancy. Energy per slot in chamber C is 24 ₴ a day, and that is below the tariff of 40 ₴. But the tenant pays only for occupied slots, and only 50% are occupied. The same energy is divided over half as many pallets and gives 48.00 ₴ per occupied pallet-day. The tariff meanwhile stays at 40 ₴. In chamber A the same arithmetic works more gently: 6 ₴ at occupancy of 85% gives 7.06 ₴. In chamber B it is 21.43 ₴. Three figures stand in one column, and only in the third row has cost overtaken price. This is not a “thin margin” but a loss on every pallet.
Because it enters the accounts from two sides. First it takes away revenue: a slot without a pallet brings nothing, since the tariff is charged only on occupied ones. Then it removes no cost at all: the compressor holds the whole volume of the chamber, and the power stays the same. In the end the energy is divided over a smaller base. That is exactly why 24 ₴ per slot turns into 48.00 ₴ per occupied slot in chamber C. A half-empty chamber does not save cold — it spreads the same cold over half the pallets. That is what makes low occupancy dearer than it looks: the owner sees only the revenue he did not get and does not see the doubled cost of a day.
For Andrii this is the strongest move: 288 000 ₴ a month. Chamber B goes from 40 ₴ to 50 ₴ a pallet-day, chamber C from 40 ₴ to 76 ₴. Margin per slot in chamber B moves from +13 ₴ to +20 ₴, in chamber C from minus 4 ₴ to +14 ₴. The warehouse's profit for the month rises from 94 000 ₴ to 382 000 ₴, that is 4.06 times over. This needs neither new equipment nor new tenants: the chambers, the compressors and the pallets all stay the same. The only thing that changes is that the tariff in the contract is now tied to the temperature of the zone instead of being identical across the whole warehouse.
The arithmetic looks attractive, but it has a limit. Shutting chamber C means stopping the payment of 216 000 ₴ for its cold. Revenue of 180 000 ₴ disappears with the chamber, yet the cargo moves into the 180 free slots of chamber B, and the extra billing returns the same 180 000 ₴. In the end the move gives 216 000 ₴ of saving a month. The limit is in the temperature: chamber B is held at −18 °C, and only cargo that tolerates it will go there. Fish, ice cream and ready meals at −24 °C would spoil in chamber B. For such tenants the move does not exist at all, so you judge it not by the sum but by what lies on the pallets.
Energy per occupied pallet slot, and always beside the tariff of the same chamber. For Andrii that is 7.06 ₴ against 40 ₴ in chamber A, 21.43 ₴ against 40 ₴ in chamber B and 48.00 ₴ against 40 ₴ in chamber C. One line for the whole warehouse does not work here: an average smooths out exactly the chamber that drags profit back. Revenue of 1 602 000 ₴ and profit of 94 000 ₴ for the month will not show it — 5.87% looks like a working return. For the metric to appear you need meters per chamber and occupancy measured separately for each zone, not one percentage across 1 800 slots.
