Toll cost comparison on one Illinois lane: $20.70 returned without a vehicle profile versus $55.00 with height, weight and five axles specified

Google's truck routing doesn't price the trip

On 17 August 2026, Google Maps Platform took Large Vehicle Routing to general availability. Height, width, length, gross weight, axle count, hazardous goods classes, across the Routes API, the Route Optimization API and the Navigation SDK, for the 48 contiguous United States.

It is a real product and it settles a real argument. A truck profile on a routing call is no longer a differentiator. HERE has had one for years. Trimble and PC*MILER built businesses on one. Now the largest maps platform in the world ships one too.

We licence and integrate HERE for a living, so the honest read matters more than the defensive one: for a US domestic carrier running online dispatch, that is a working truck routing engine.

Then you read the limitations section of Google’s own documentation. Three features listed as unsupported: speed limits, routing for radioactive materials, and truck toll prices.

The third one is not a feature gap. It is a number your dispatcher already needs.

A toll is not a property of a road

This is the part that gets skipped, and it is the whole thing.

The toll on a stretch of highway is not a fixed figure you look up. It is a function of the road and the vehicle on it. In most of the United States, commercial toll class is driven primarily by axle count. Two axles and five axles are different prices on the same asphalt. Add weight bands, height bands, time of passage on some systems, and a transponder discount on others, and the same origin-destination pair produces a range rather than a value.

Which means a routing engine cannot price a trip unless you tell it what is driving.

One lane, two requests

We ran a single Illinois lane twice against HERE Routing v8, same origin, same destination, same departure time. The only difference was whether the request described the vehicle.

transportMode=truck, no vehicle profile: $20.70.

transportMode=truck, full profile — height, width, length, gross weight, five axles: $55.00.

Two and a half times the cost. A 166% difference on one lane, produced by nothing except describing the truck.

Put a number on that. At 500 runs a year — roughly two a working day for a single tractor on a fixed lane — the gap is about $17,000 of unbilled toll on one truck. Assumptions stated so you can substitute your own: one lane, one vehicle configuration, 500 annual runs, no transponder discount applied. Run yours and the number will be different. The mechanism will not be.

Google does not return either figure for a large vehicle. Its documentation says so.

The failure mode is worse than a blank

Here is the part that should worry anyone running this in production, and it is not a criticism of Google.

The unprofiled request above did not fail. It returned HTTP 200, a well-formed response, and a toll figure. No error. No warning. No notice indicating that the number described a vehicle nobody had specified.

A missing number is a visible problem. A dispatcher sees a blank and asks. A plausible number for the wrong vehicle class is invisible. It passes code review, populates a quote, ships to a customer, and surfaces at settlement six weeks later when someone reconciles against the actual toll statement and the margin is gone.

We have watched teams carry that defect for months. It never throws an exception. Nothing in the response marks it. The only way to catch it is to run the same lane twice and look at the difference — which nobody does, because the first response looked fine.

Three more places the number goes wrong

Once you are requesting tolls properly, four things routinely go wrong in implementation. All four return 200.

Reading the first toll instead of summing the sections. Tolls come back per route section, not per route. A run crossing two toll authorities returns two toll objects. Reading tolls[0] and calling it the trip cost produces a number that is internally consistent, roughly half right, and wrong in the same direction every single time. It looks like a working integration.

Leaving the emission class unset in Europe. HERE accepts an emission type with an optional CO2 class. When the CO2 class is not specified, it defaults to the first band. That is a price, not an absence of one, and in Germany it is a real money difference. Set it from your fleet register rather than letting it fall through.

Computing the route without a real departure time. Several toll systems price by time of passage, and the time of passage is derived from the ETA. A route computed without a departure time cannot price a time-of-day toll correctly, and it will not tell you that.

Assuming a currency. Without an explicit currency parameter, a cross-border route returns local currencies — several of them, in one response. Summing that is a type error your language will happily let you commit.

What this changes about procurement

If a truck profile is now table stakes, “do you support height and weight?” has stopped being a useful question. Every vendor will say yes and every vendor will be telling the truth.

Better questions:

Does the toll figure reflect the vehicle I described, or a default? Run the same lane with and without a profile. If the two numbers are identical, the profile is not reaching the pricing layer.

What comes back when the toll system has no published price? A blank is a legitimate answer. A silent default is not. HERE, for instance, returns no toll information for HOT lanes, because the price is dynamic — that absence is correct behaviour, and it is better than a fabricated estimate.

Is this a planning figure or a settlement figure? HERE documents toll prices as best-effort, because toll systems are numerous, locally administered, and change without a versioned API. That is the honest answer, and it means your reconciliation logic has to survive a discrepancy without treating it as a defect. Any vendor claiming settlement-grade accuracy for toll estimates is telling you something about their vendor management, not their data.

What does it cost to ask? Toll data is not a free rider on a route you were already computing. On HERE, requesting toll information counts as an additional transaction. Budget it as its own line — and cache it, because toll prices for a fixed lane and vehicle configuration are stable for far longer than the ETA on the same route. Two dispatches of the same tractor on the same lane an hour apart have different ETAs and identical tolls.

Where this leaves the argument

Large vehicle routing arriving in the Routes API is good for fleets. More vendors, better prices, fewer trucks sent down roads they do not fit on. We are not going to pretend otherwise because we sell the alternative.

What it does not do is price the trip. And for a carrier quoting freight before the wheels turn, the toll figure is not a reporting feature bolted on after the fact. It is the quote.

If your lanes stay inside the contiguous 48, run online, and someone else handles tolls, Google is now a genuine option and we would rather tell you that than sell you something you do not need.

If your dispatcher needs to know what the trip costs before the truck leaves the yard, that is a different question, and it is still answered in one place.

Placematic is a HERE Technologies Gold Partner. We can run profiled and unprofiled toll calculations across your real lane set and reconcile the output against your invoices as part of a structured pilot. Placematic USA LLC is always the contracting party.

Toll figures above are our own measurement on a single Illinois lane and vehicle configuration, taken August 2026, with assumptions stated. Google capability statements verified August 2026 against Google’s large vehicle routing documentation. Capabilities change; verify against primary sources.

Related Post