1. From a GPS point to a toll
A toll is not detected; it is computed. TollTally runs the same steps on every trip, live or historical, from a marketplace feed or the API, and the same inputs with the same rule version give the same output every time.
Normalize
GPS from any provider is converted into one trip model: unit, position, time. The provider's format never reaches the calculation.
Map-match
Each point is aligned to the road network. A point 30 feet off the carriageway is placed on the road the vehicle was actually on, and the sequence becomes a path, not a cloud of dots.
Reconstruct the trip
The path is cut into trips and legs from movement and stops, so a multi-stop day is costed leg by leg.
Apply the unit
The unit's configuration is attached: axle count, weight, height, length, vehicle class, tractor and trailer, tag or plate, transponder and plate, emission class where a country prices on it.
Look up the rules
For every toll point the path crosses, the facility's rules and rates for that direction, that time of day and that vehicle class are looked up in the toll data, which covers 900 plus toll authorities in 100 plus countries.
Price and roll up
The toll is calculated per crossing at both the tag rate and the plate rate, then rolled up per leg, per trip and per unit.
The output is a per-vehicle, per-trip toll record: facility, gantry or plaza, direction, expected toll. It is more than a crossing; it is the expected toll for that vehicle at that time.
2. What the unit configuration changes
Two identical trips can price differently. The unit is the reason. This is why unit configuration is a setup step and not a detail.
| Attribute | What it changes | Example |
|---|---|---|
| Axle count | Class on most US facilities and many closed systems | A tractor-trailer priced as two axles instead of five underprices every crossing |
| Weight and height | Class on facilities that price by weight or height band; access to some facilities | A rate that steps at a weight threshold |
| Vehicle class | The rate table row, where the authority classes by vehicle type rather than axles | Bus, truck, car, motorcycle classes |
| Tractor and trailer configuration | Whether a trailer with its own tag or plate produces a second charge | Trailer tag charged alongside the tractor |
| Payment method: tag or plate | Which of the two rates applies; plate or video rates run higher and on some facilities add a fee | Plate rate on a unit whose tag is not mapped |
| Transponder and plate | The evidence the statement will carry; the mapping TollMatch reconciles on | A tag mapped to the wrong unit |
| Emission class | Rate on European distance-based truck tolls that price on Euro or CO2 class | Two identical trucks, different emission class, different toll |
3. GPS quality: flagged, not absorbed
A toll depends on the trace. TollTally does not fill in what the trace does not show. Gaps, jumps and low-quality segments that could affect a toll are flagged on the trip so a person can decide, rather than silently absorbed into a number.
| Condition | What causes it | What TollTally does |
|---|---|---|
| Gap | Device off, no signal in a tunnel or garage, a provider outage, a ping interval too long for the road | No crossing is invented across the gap; the trip carries the gap flag |
| Jump | A point placed far from the path, often in an urban canyon or under foliage; a point snapped to a nearby toll road the vehicle was not on | The point is treated as an outlier for pricing and the segment is flagged |
| Low-quality segment | Sparse or noisy points where the matched path is uncertain, for example a plaza lane beside a free lane | The crossing is priced on the best match and flagged for review |
| Entry or exit outside the trace | On a ticket system the trace starts after the entry plaza or ends before the exit plaza | The crossing cannot be priced as driven; it is flagged so the fleet can supply the missing points or check the device |
Ping rate matters. Civilian GPS carries an error of several yards, and a reading every few minutes can miss a plaza entirely on a fast road. Fleets that see gap flags on the same unit every day have a device or ping-rate problem, and the fix is with the telematics provider, not in the toll record.
4. Tag rate and plate rate
Every crossing is priced twice. The tag rate is what a working transponder pays for that class, direction and time. The plate rate is what the authority bills by video when there is no tag or the tag is not read, and on many facilities it is higher and can carry a fee.
TollTally shows both so that two decisions stay separate: what to bill and reimburse (the tag rate, for a tagged unit) and what the authority actually charged (whichever the statement shows). Where a tagged unit is charged the plate rate, the tag was not read or is not mapped; that difference is recoverable and TollMatch files it.
5. Time of day and dynamic pricing
Rates change by hour on many facilities and by demand on express lanes. TollTally prices a crossing at the rate in effect at the facility-local time of the crossing, not at the trip's departure time. For API integrators sending a route rather than GPS, the polyline endpoint accepts a timestamp per point along the route for the same reason (see the developer guide).
Express lanes are dynamically priced. TollTally applies the rate window for the crossing time; where a fleet's managed-lane policy does not authorize the lane, the leg is flagged so the fleet decides who pays it.
6. Why a TollTally toll differs from the statement
When the statement arrives, most lines match. The ones that do not fall into two groups, and the group decides who acts.
Fleet-side (your configuration or equipment):
| Difference | Cause |
|---|---|
| Wrong class on every crossing for a unit | Axle count, weight or class set wrong on the unit |
| Plate rate on a tagged unit | Tag not read, tag in the wrong vehicle, or tag not mapped in the toll account |
| Two charges for one crossing | Trailer tag or plate charged alongside the tractor |
| Crossing missing | GPS gap at the plaza; ping rate; device off |
Authority-side (the statement is wrong):
| Difference | Cause |
|---|---|
| Maximum fare on a closed system | Entry or exit not read; the authority charged the longest possible trip |
| Duplicate charge | The same crossing billed twice |
| Class overcharge | Charged at a higher class than the unit's configuration |
| Express lane overcharge | Charged above the rate window in effect, or charged for an express lane the GPS places the unit outside of |
| Misread | A tag read where the GPS shows the unit was not present |
TollTally produces the expected toll and keeps the evidence per crossing: the trace, the facility, the class applied, the rate version. TollMatch does the line-by-line comparison and the disputes.
7. History runs the same engine
Send past GPS and TollTally calculates the tolls for trips already driven, on the same map-matching and the same rules. Fleets use this to price a statement period that has already been billed, to check TollTally before changing a process, and to cost lanes they are bidding on from trips they have already run.
Rates are versioned. A historical trip is priced on the rates in force at the time of the crossing, not today's.
8. Coverage and toll data
The toll data behind TollTally covers 900 plus toll authorities in 100 plus countries: facility geometry, gantry and plaza locations, direction, class tables, time-of-day schedules and payment-method rates, maintained by a toll data team and updated as authorities change rates. Rates carry a version so any past toll can be recomputed on the rules that applied.
When a fleet finds a facility, a gantry or a rate that is missing or wrong, the report goes to tolltally@mapup.ai with the facility, the direction, the date and the amount expected. The data team corrects it and the affected trips are regenerated. Coverage grows this way; a fleet running new lanes is the first to see a new gantry.
9. Live feed, API and history: one engine
Whether the GPS arrives from a marketplace feed every 30 minutes, from a file of last quarter's tracks, from the GPS tracks endpoint, or as a route polyline from a mapping service, the same engine prices it. The only difference is the input: a complete polyline from a mapping service is priced as a path with no map-matching step, which is why a sparse trace sent that way can miss a plaza and vehicle-produced points should go to the GPS tracks or polyline map matching endpoints instead. The developer guide covers when to use which.