VWTVWT
← All insights

Budgeting Transport When Rates Are Going to Move

Published August 22, 2026 Β· 14 min read

Somebody is going to ask you for next year's transport number in the next few weeks. The method almost everyone uses is to take this year's actual, add a percentage for inflation, and send it.

In Thailand right now, that method would have been wrong by a factor of four.

The published price of road freight rose 11.1% in the year to the second quarter of 2026. The Bank of Thailand's forecast for headline inflation across the whole of 2026 is 2.8%. Both numbers are correct. They are simply measuring different things, and a transport budget built on the second one has already failed.

This is about how to build the number so that a quarter like that does not break it.

The quarter that broke last year's budget

The Ministry of Commerce publishes a road freight transport index, based on 2021 = 100, built from freight rates collected across 57 provinces. Here is what it did.

Index Change on same quarter a year earlier
Q1 2026 112.4 +0.4%
Q2 2026 124.1 +11.1%

The quarter-on-quarter jump was 10.4%. Almost the entire year's movement arrived inside three months.

Two things are worth taking from that, and they point in opposite directions.

The first is that this was not unforeseeable. When the Q1 figure was published, the same office said it expected the index to keep rising, and named the world energy market as the reason. The direction was called correctly by the body that publishes the series.

The second is that calling the direction bought you almost nothing. Nobody's budget said "up a bit". Budgets say a number. Going from +0.4% to +11.1% in one step is not a forecasting miss you fix by forecasting harder next time. It is a reason to stop building a budget out of a single number.

The headline is not your number

Before anything else, throw the 11.1% away. It is an average of things that did not move together.

Sorted by how much freight prices moved, year on year, in that same quarter:

What is being moved Change Share of the index
Textiles +26.8% 1.64%
Machinery and tools +17.5% 6.65%
Agricultural and fishery products +15.5% 12.65%
Refined petroleum products +12.5% 6.98%
Chemicals +12.3% 6.12%
Food products +10.7% 11.46%
Motor vehicles, parts and accessories +9.4% 8.77%
Computers and electronics +5.9% 11.03%
Beverages +5.1% 3.12%
Pharmaceutical products +0.3% 0.84%
Printing and related 0.0% 0.34%

A pharmaceutical shipper who budgeted the headline over-provided by nearly eleven points. A textile shipper who budgeted the headline is fifteen points short and will spend the year explaining it.

The same spread appears when the index is cut by vehicle instead of by cargo:

Vehicle Change Share of the index
Hazardous materials truck +13.2% 0.97%
Box van +12.5% 8.64%
Pickup truck +12.0% 57.97%
Trailer +11.3% 21.68%
Liquid tanker +9.1% 1.91%
Special-purpose truck +6.1% 8.66%
Semi-trailer for long materials +4.8% 0.16%

Read the weight column on that second table. Pickup trucks are 57.97% of it. If your goods never travel on a pickup, more than half of the headline number is somebody else's price.

Take two lines out of the published series, not one: the commodity group that matches your goods and the vehicle type that matches your trucks. Where they disagree, you have learned something before the budget is even written, because it means the pressure on your lane is coming from the cargo side or the vehicle side rather than from the market in general.

Budget the inputs, not the total

The reason the headline is unstable is that it is a summary of three separate things happening at once: fuel, labour, and everything else. Each behaves differently, and only one of them is worth forecasting in detail.

Fuel is a number you can actually build

This is the line that moved, and it is the line most budgets treat with the least care, usually as a percentage of last year.

Here is what diesel actually did, as the monthly Bangkok weighted average retail price of high-speed diesel B7 in baht per litre.

Price
2025 average 31.96
January 2026 30.07
February 2026 29.94
March 2026 32.12
April 2026 44.13
May 2026 41.13
June 2026 39.25

The second quarter averaged about 41.50 against about 31.96 a year before. That is a rise of roughly 29.9% in the single largest input, against 11.1% on the price of the service.

That ratio, about 0.37, is worth writing down. It is not a law and it will not hold when the pressure comes from wages instead, but it gives you a sanity check that costs nothing: when a carrier proposes an increase, ask what moved and by how much, and see whether the two numbers are in a believable relationship. A 30% fuel move producing a 30% rate demand is not a fuel story.

Build the line itself from quantities, not percentages. Annual kilometres, divided by the kilometres per litre your vehicles actually achieve on your routes, multiplied by a price per litre. Three inputs, all of which somebody in the building can produce, and each of which can be argued about separately. A percentage uplift hides all three.

The price per litre is partly a policy decision, and right now it is being subsidised

The price you put in that third slot is where the real work is, because Thai diesel is not only a market price.

Take the published structure for 21 August 2026, in baht per litre. Retail is 38.39. Inside it sits an Oil Fuel Fund line of minus 5.96, which is the state paying that much per litre to hold the pump price down. It is not a discount from a supplier. It is a subsidy, and the fund paying it stood at negative 75,562 million baht in its own weekly statement for the week ending 16 August 2026, with 58,878 million baht owed to fuel traders.

That matters for a budget in a very specific way. The fund's line sits before VAT, so if it simply went to zero, the wholesale price would rise by the full 5.96 and VAT would follow it up. The arithmetic lands at about 44.77 baht a litre, with no change whatsoever in the world price of oil.

So the honest "nothing changes" case for your fuel line is not 38.39 held flat. It is a range of roughly 38 to 45 before the world market does anything at all. That is the difference between a fuel line that is right and one that is 17% light, and it is knowable today. The mechanics of why Thai diesel steps rather than drifts, and what that does to a surcharge clause, are set out in more detail in how fuel surcharges work here.

Labour is not indexed to the minimum wage, whatever the budget template says

Most budget templates uplift the driver line when the minimum wage is announced and leave it alone otherwise. In this cycle that gets the answer backwards.

The minimum wage schedule currently in force took effect on 1 July 2025. It sets seventeen daily rate bands from 337 to 400 baht, varying by province and by type of business. Nothing has replaced it since.

And yet, in the same quarter the freight index rose 11.1%, the office publishing it named a shortage of skilled truck drivers as one of the reasons, pushing labour cost up. The wage line moved without any decree moving it. Scarcity did that, not law.

The practical consequence is that there are two labour numbers in your budget and they need separate treatment.

  • What you actually pay now. Budget this from your own payroll and your own turnover, not from the statutory floor. If you are recruiting drivers, the rate that fills the seat is the rate, and it is well above the floor in most of the country
  • What the floor might become. This part is genuinely forecastable, because the statute says what goes into the decision. Section 87 of the Labour Protection Act, as replaced in 2017, requires the Wage Committee to weigh nine things: the cost of living index, the rate of inflation, the standard of living, production cost, the price of goods and services, the ability of business, labour productivity, gross domestic product, and economic and social conditions

Look at that list against this year. Production cost and the price of goods and services both rose sharply. Inflation ran above target. Two of the nine inputs into the next wage decision have been pushed in the same direction by the same energy shock that moved your freight rates. That does not tell you the date or the size, but it tells you which way to lean, and it is a great deal better than assuming no change.

Everything else is small, and moves anyway

The same quarterly release named vehicle maintenance, spare parts and administrative expense as rising alongside fuel and labour. None of these will decide your budget on their own. The point of listing them separately is that when they are folded into a single "other" line, the line gets uplifted by general inflation, which is the only assumption in the whole budget that turned out to be roughly right this year, and it is right for the smallest number on the page.

Submit a range with named triggers, not a point

A budget has to end in one number, because that is what gets approved. What it does not have to do is pretend that number is a forecast.

Build three cases, each defined by a thing you can check on a date rather than by a mood.

Trigger you can check Diesel assumption What it does to the freight line
Base The fund keeps paying out at roughly today's rate; world price flat About 38 to 39 Index holds near where it is, which is what the publishing office expects for the third quarter
Squeeze The fund's payout is reduced or withdrawn to start repaying the deficit About 45 Fuel line up about 17%; expect carriers to reopen
Relief World price falls back and the fund is left in place About 32 Fuel line down about 17%; the question becomes whether your contract gives it back

Three points about using it.

The approved number is the base case. Not the average of the three, and not the squeeze case with the risk quietly buried inside it. If you pad every line by a few points for safety, you have created a contingency that nobody can find and nobody will release.

The contingency is the gap between base and squeeze, named, and held in one place. One number, one owner, one page. That way the conversation in month seven is "we are releasing 40% of the transport contingency because the fund rate changed on this date", which is a decision. The alternative conversation is "transport is over budget", which is an argument.

Each trigger needs a date and a place to look. The fuel fund publishes its position weekly. The freight index publishes quarterly. The wage announcements are published when they are made. Put those three in a calendar and the budget reviews itself.

The cheapest way to be right is not to forecast at all

There is a way to make most of this unnecessary, and it is worth considering before you spend three weeks on scenarios.

A rate with a fuel clause tied to a published price transfers the part you cannot forecast to the mechanism instead of to your spreadsheet. Your budget then only has to forecast volume, which is the one variable you genuinely know something about, because it comes out of your own sales plan.

Two conditions make that work rather than just move the problem.

  • The clause has to be symmetric. A clause that only moves up is not a budgeting tool, it is a one-way charge. The reason a fuel clause helps a budget is that it bounds the surprise in both directions, and in a year with a 44 baht April and a 30 baht February, both directions happened
  • The clause has to name a specific published price, a frequency and a base. Otherwise the calculation is somebody's opinion each month and you are back to negotiating, just monthly instead of annually

Which parts of a rate to fix and which to leave floating is a decision with its own logic, and it depends more on which segment of the market you are buying in than on how well you negotiate. That is covered in contract rates against spot rates.

Zero-base one line, not the budget

The standard alternative to "last year plus a percentage" is to rebuild the whole budget from first principles, line by line, as though the operation had never existed, using the best achievable figures rather than the ones you got. Done properly it produces a lower number than the current cost, and the gap is a list of things to fix.

Done across a whole transport budget in September, it produces nothing, because it is abandoned in October.

So pick the largest line and do only that one. In most transport budgets that is either fuel or the vehicle-day count. Rebuild it from quantities: how many kilometres, at what consumption, at what price; or how many vehicle-days, at what utilisation, for what work. Compare that to what you actually spent this year.

The difference is not a budget cut. It is a work list, and it is far more useful than the budget itself, because it names things that can be changed rather than things that must be predicted.

At year end, flex before you judge anyone

One paragraph on what the budget is for after it is approved, because it changes how you should write it.

If volumes came in different from plan, the variance against a fixed budget tells you nothing at all. Flex the plan to the actual level of activity first, then split what remains into a rate difference and a performance difference. Only then is it fair to ask whether your carrier or your team did well, and the fuller method for that sits in choosing the unit you measure transport in.

One Thailand-specific trap when you do it. If you net your rate variance against the published index, use the same window and the same sub-index. In the second quarter of 2026 the all-items number was +11.1% against the same quarter a year earlier, but +5.7% comparing the first half of 2026 with the first half of 2025. Those are the same series and the same day. Pick the wrong one and your carrier is either a hero or a bandit, entirely by accident.

What to change on Monday

  1. Find the two index lines that are yours. The commodity group that matches your goods and the vehicle type that matches your trucks. Write both down with their year-on-year change. Stop quoting the headline
  2. Rebuild the fuel line from litres. Annual kilometres, actual kilometres per litre, price per litre. Three inputs on one row, each of which can be challenged separately
  3. Put a range on the price per litre, not a point. Today's pump price is holding about 5.96 baht of subsidy per litre, on a fund that is 75.6 billion baht in deficit. Roughly 38 to 45 is the honest span before the world price does anything
  4. Split the driver line in two. What you pay now, from payroll; and what the floor might become, watched against the nine factors the Wage Committee is required to weigh
  5. Write three cases with checkable triggers, submit the base case as the number, and hold the gap to the squeeze case as one named contingency with one owner
  6. Put three dates in a calendar: the weekly fuel fund position, the quarterly freight index, and the wage announcements. That is the whole monitoring system
  7. Ask whether you need to forecast the fuel part at all. A symmetric clause on a published price moves it out of the budget, and leaves you forecasting only your own volume
  8. Zero-base exactly one line, the biggest one, and treat the gap as a work list rather than a target

The measure of a good transport budget is not that the number turns out to be right. It is that when the number turns out to be wrong, everybody already knows which assumption broke, and roughly what it costs.