AI in Fleet Management: Auditing Yard Time and Tolls From Telematics

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI in Fleet Management: Auditing Yard Time and Tolls From Telematics.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI in Fleet Management: Auditing Yard Time and Tolls From Telematics.

A small fleet can export two files, a driver activity report and a toll statement, and ask an AI chatbot to flag every shift with more than 30 minutes on duty but not driving at the yard, then match each toll to a trip and list the ones never billed. Check every flagged row against the raw data before acting.

The AI does the sorting, not the judging. It reads a few thousand rows faster than anyone in the office, but it cannot know that a loader was late, that the yard boundary on your map includes the fuel island, or that a toll belongs to a trailer swap. So every flag in the worked month below comes with a check that stops it turning into a wrong accusation.

Follow me on Instagram@sagnikteaches

What one carrier found in about three minutes

In a FreightWaves report published on 23 September 2026, the owner of Polyak Trucking, a small third-generation family carrier, described feeding her fleet's telematics data into Claude and asking it to flag any driver with more than 30 minutes on duty but not driving while at the terminal. One driver averaged well over 110 minutes of that time per shift. Because her drivers are paid by the hour, the idle stretches were a direct payroll cost, and she credited the finding with about $53,000 of savings. The article describes that sum as the cumulative cost of the idle time before the AI flagged it, although its headline calls it annual. She also had the AI compare tolls for two drivers on the same lane in opposite directions and found a gap of around $50 a load.

Connect on LinkedInSagnik Bhattacharya

Treat those numbers as one owner's account. The FreightWaves piece does not verify them independently, does not say what happened to the driver, and the figures it quotes are loose (an average above 110 minutes and a description of two to three hours per shift are not the same thing). What is useful is the method, which is cheap and repeatable: pick one rule, give the AI the rows, and get a ranked list in minutes. A fleet that has already looked at fuel-card misuse in a spreadsheet will recognise the pattern. If you want the same job done with one specific assistant and a different prompt style, the Claude-specific version covers that; this page is about the export, the columns and the checks that apply with any assistant.

Subscribe on YouTube@sagnikteaches

The two exports and the columns you need

Telematics systems differ in menu names, so look for reports called something like driver activity, duty status log, geofence visits, or location history, and for tolls, a statement from your toll-tag provider or a toll column in your fuel or expense system. You are after a CSV or spreadsheet, one row per event, not a PDF.

For the yard-time audit you need these columns, in whatever words your system uses:

  • Driver ID (not the name, see the privacy step below).
  • Vehicle ID and, if available, trailer ID.
  • Date and local start and end time of each duty-status segment: driving, on duty not driving, off duty, sleeper.
  • Location or geofence name for each segment, so the AI can tell yard from customer site.
  • Segment length in minutes, or enough to calculate it.

For the toll audit you need the toll statement (tag or plate, date, time, plaza or facility, amount, axle class) and your trip or load list (load number, vehicle, pickup and delivery times, customer, and the amount you billed for tolls, even if that is zero).

Pull a month, not a year. A month is around 1,500 to 6,000 rows for a small fleet, small enough for an assistant to hold in one conversation and small enough for you to read the flagged rows by hand.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

Strip the export before it leaves your system

Driver activity data is personal data about identifiable people, and it can show where someone was at specific times. Before upload:

  1. Replace names with the IDs you already use (D01, D02 and so on) and keep the key in a separate file the AI never sees.
  2. Delete columns you do not need: phone numbers, home depots or home addresses, licence numbers, employee payroll numbers.
  3. Use a paid business plan with training on your data switched off, or a tool your IT adviser has approved. Read your telematics contract for limits on sharing exports.
  4. Tell drivers that you review telematics data, and for what. If the handbook does not say so, fix that first; a driver handbook is the natural place.

These steps take ten minutes the first time and almost nothing after you save a column template. If you have in-cab cameras as well, the consent questions are bigger, and the dash-cam tutorial covers them.

Worked month: an eight-truck carrier

This is an illustration with invented figures. Say a carrier runs eight tractors on regional lanes, pays drivers $26 an hour, and has 22 working days in the month. The owner exports driver activity for October and the toll statement from the tag provider, then removes names. The first prompt is below.

I own an eight-truck carrier. Attached is October's driver activity export (columns: driver_id, vehicle_id, date, status, start_local, end_local, minutes, location).

Task: find shifts where the driver was ON DUTY NOT DRIVING for more than 30 minutes in total while the location is "Yard" (the home terminal geofence).

Rules:
1. Count only on-duty-not-driving segments at location "Yard". Ignore off duty and sleeper.
2. Per driver, give: number of shifts, average yard on-duty-not-driving minutes per shift, the median, and the 3 longest shifts with date and minutes.
3. Show a table sorted by average, highest first.
4. Then list any rows where start_local is later than end_local or minutes does not match the times, so I can fix the data.
5. Do not guess at causes. If something is unclear, ask me.

A realistic reply (illustrative) looks like this.

DriverShiftsAverage yard minutesMedianLongest shifts
D0421961017 Oct 168; 14 Oct 154; 28 Oct 149
D072241383 Oct 77; 21 Oct 69; 9 Oct 64
D0220272516 Oct 52; 30 Oct 49; 8 Oct 44
Other five drivers10114 to 2412 to 22none above 45

The AI also notes eleven rows where the minutes do not match the start and end times, all from one vehicle after a clock change. That is the sort of data fault you want listed before you reach any conclusion.

Now the sum. D04 averages 96 minutes against a 30-minute threshold, so 66 minutes a shift above it. Across 21 shifts that is 1,386 minutes, or 23.1 hours. At $26 an hour, 23.1 hours cost about $601 in a month. Compare D04 with the fleet's typical 20 minutes and the gap is 76 minutes a shift, about $690 a month. Whether that is a problem depends on what the rows say, which is the next step.

Read the raw rows before you say a word

Ask the AI to print the exact rows behind D04's three longest shifts, then open your telematics map for those days. In the illustration, the owner finds that on 7 and 14 October D04 was first in the queue for a Monday-morning load that the customer released late, a pattern shared by two other drivers at the same customer. The 28 October stay shows a vehicle on the yard geofence for 149 minutes with the engine off, which is where the owner has to ask a question rather than draw a conclusion.

A short script for that conversation, written as a request for the driver's account rather than a charge:

On 28 October the system shows you on duty at the yard from 06:10 to 08:39 with the truck stationary. Can you walk me through that morning? I'd like to know what was going on before I look at how we log it.

If you want a fast way to collect the answer, driver debrief voice memos can be turned into a short exceptions log. Keep a note of the answer next to the flag so next month's run starts from what you already learned.

Where the yard flags go wrong

Five faults produce false yard time, and each has a quick test.

  • Geofence too big. If the yard shape includes the fuel island, wash bay or the road outside, driving-adjacent time gets labelled yard. Zoom the boundary on a map; ask the AI how many flagged minutes fall between 05:00 and 06:00, when pre-trip checks happen.
  • Legitimate duties. Pre-trip inspection, loading supervision, fuelling, paperwork and a trailer swap are on-duty-not-driving. Decide which of them you expect and subtract a standard allowance, say 20 minutes, before you set the threshold.
  • Dispatch delay. A driver waiting for a load number is not slacking. Count how many drivers wait at the same time; one driver is a conversation, five is a dispatch problem.
  • Clock and time-zone faults. Segments that straddle a clock change, or devices that log in UTC while the report shows local time, create overlaps and negative minutes. Ask for those rows by name, as in rule 4 of the prompt.
  • Duplicate segments. Some exports repeat a status change when a driver logs in again. Ask the AI to count identical start times per driver.

An easy habit that catches most of these: sort the flagged rows by the minute they started and look for clusters. A cluster at the same time every week points to a process. A random scatter on one driver points to behaviour.

Tolls: match each charge to a trip, then to an invoice

Yard time is a cost you hold in-house. Tolls are money that might be leaving silently, because a toll paid on a customer's load is only recovered if someone bills it. The second prompt matches toll statements to your load list.

Attached: (1) toll_statement.csv with columns tag_id, vehicle_id, date, time, plaza, axle_class, amount; (2) loads.csv with columns load_no, vehicle_id, pickup_time, delivery_time, customer, toll_billed.

Task:
1. Match each toll to a load where the toll time falls between pickup_time and delivery_time for the same vehicle_id.
2. Tolls with no matching load: list them separately with date, time, plaza and amount.
3. For matched tolls, compare the total toll per load with toll_billed. List loads where toll_billed is less than the toll paid, with the shortfall.
4. Give totals: tolls paid, tolls matched, tolls billed, tolls unmatched, shortfall.
5. Flag the same plaza charged twice within 10 minutes for one vehicle.

Illustrative output for the eight-truck month:

MeasureTollsAmount
Paid on the statement212$4,386
Matched to a load187$3,905
Billed to customers131$2,744
Matched but not billed56$1,161
No matching load25$481
Possible double charges3$41

The $1,161 is the first number worth chasing, because it is toll cost sitting on loads that never carried a toll line. The $481 of unmatched tolls is the second: usually empty repositioning trips, a trailer-swap run with no load number, or a tag used on a vehicle that should not have it. Check a handful before assuming the worst.

Same lane, two drivers, a $37 gap

Back to the carrier in the news piece, who compared two drivers on the same lane. Here is how to do that on your own file. Ask the AI:

Using the matched loads, group by lane (origin to destination). For each lane with at least 6 loads, show the average toll per load for each driver, the average trip minutes, and the difference between the highest and lowest driver. Sort lanes by that difference.

Suppose the output says that on the busiest lane D03 averages $68 in tolls and 5 hours 40 minutes, while D06 averages $31 and 5 hours 18 minutes. The gap is $37 a load. At five loads a week that is $185 a week, about $9,600 a year if it persisted. The cheaper driver is also faster, so there is no trade-off to argue about. The likely causes are a different route onto the same road, a different plaza, or the toll class, so look at which plazas appear for each driver before you decide it is anyone's fault. Then agree the route, record it in the dispatch notes, and see if next month closes the gap. The same data feeds your cost per mile once tolls are right.

Checks that tell you the AI read the file correctly

Do these every time, in this order. They take about fifteen minutes.

  1. Row count. Ask the AI how many rows it read from each file and compare with the spreadsheet. A mismatch means the file was truncated.
  2. Re-add one total. Sum the toll column in the spreadsheet itself and compare with the AI's "paid on the statement" figure. They must match to the cent.
  3. Trace three flags. For three flagged shifts or loads, find the raw rows by hand and confirm the minutes or the dollars.
  4. Test a negative. Pick a driver the AI did not flag and confirm that their longest yard shift really is under the threshold.
  5. Re-run with a different split. Ask for the same table with a 45-minute threshold. A very different driver ranking points to a threshold artefact, not to behaviour.

For anything that will lead to a pay decision or a written warning, do the arithmetic in a spreadsheet as well. The AI is for finding the shifts; the spreadsheet is the record you can show.

A first month with a baseline, then a rule

A single month tells you who is out of line. A second and third tell you whether something changed. Keep the summary table from each run in one sheet with the month in the first column. When the trend line holds steady for three months, turn the threshold into a written rule in the handbook ("on-duty-not-driving at the yard over 30 minutes needs a reason noted by dispatch") and put that exception column into the dispatcher's end-of-day routine. Link it to a fair driver scorecard so that yard time sits beside safety and on-time figures, not alone.

What to do with the money you find

Resist treating recovered dollars as profit before you have tested them. A process fix (release loads earlier, add a second loader on Monday mornings) usually recovers more than a conversation does, and it does not cost you a driver. Put the recovered figure in your tracking sheet only after two clean months.

Other places the same method fits

The pattern, one rule, one export, ranked output, raw-row check, works beyond yard time and tolls:

  • After-hours vehicle use. Ask for any ignition-on event between 20:00 and 05:00 with no matching load. A van that moves at 22:15 on a Saturday is either an emergency job nobody logged or a personal trip.
  • Idling. Ask for engine-on, speed-zero stretches over 10 minutes by vehicle and location, then multiply by your fuel use per idle hour to cost them.
  • Detention time to bill. Wherever a customer site shows 2 hours of waiting, compare it with your detention terms and list the loads you could have charged.
  • Speeding by road type. Ask for the 20 worst events and read them in context, because a speed limit is wrong in the map data more often than you would think.

Each of these has the same weak point, which is that a flag is not a finding. Keep the order: export, strip, ask, trace, talk, fix, re-run.

The same audit in a six-van delivery business

A smaller case shows how little changes. Say a six-van parcel business pays its drivers a day rate, not by the hour, so yard time costs no extra wages. The owner still runs the first prompt, because long yard stays delay the first drop and the day's overtime hits the dispatcher. Two vans average 58 and 61 minutes at the depot against a 25-minute norm. The raw rows show both vans loading last because their parcels are picked last. The fix is in the picking order, not with the drivers, and the next month's run shows 31 and 33 minutes.

For tolls, the same owner finds that two vans carry tags registered to the wrong plate after a swap. Eleven tolls in the month, $93 in total, are unmatched because the statement lists the old plate. A five-minute call to the tag provider fixes the register. That is a typical outcome: most of what the audit finds is housekeeping, and a smaller part is behaviour.

Before you move on, write down your own three numbers for next month: the threshold you will use, the yard allowance you will subtract, and the toll shortfall you consider worth chasing, say anything over $20 a load. Fixed numbers stop the rules drifting each time you run the audit.

Cost and time to run it

The marginal cost is low. Individual paid plans for the main assistants that read spreadsheets start at about $20 a month (ChatGPT Plus, or Claude Pro billed monthly, as of November 2026), and business plans with team data controls cost a little more per seat; Claude's Team plan, for instance, is $25 a seat billed monthly. Many small fleets already pay for one. The real cost is your time: about 45 minutes for the first run, including cleaning, and 20 to 30 minutes a month once the prompts are saved. Telematics subscriptions are usually priced per vehicle and vary by plan; check your own contract for any limits on exports and on how far back data is kept before you plan a year-on-year comparison.

If you would rather map which of these checks is worth running monthly in your fleet and set the routine up with someone, that is what an AI implementation consultation covers.

Questions fleet owners ask before running the audit

Can I upload telematics data to a public AI chatbot?

Only after you strip what the question does not need. Replace driver names with IDs, drop home addresses and phone numbers, and keep a business plan with data-controls switched on. Check your telematics contract too, because some providers restrict how exports are shared with third parties.

Does a long yard stay prove a driver is stealing time?

No. It shows a pattern. Loading queues, paperwork, vehicle checks, a late dispatch or a wrongly drawn yard boundary all produce the same row. Treat each flag as a question for a conversation, and look at the raw rows for those shifts before you say anything to the driver.

How often should I run this audit?

Monthly is enough for most small fleets, with a quick weekly look at the top three drivers once you have a baseline. Run it again within a fortnight of any change to yard layout, dispatch process or pay rules, because those move the numbers.

What if my toll data comes from a separate provider?

That is the usual case. Export the toll statement as a spreadsheet, keep the plate or transponder ID, date, time and amount, and ask the AI to match each toll to a trip by vehicle and timestamp. Expect a few rows that will not match; those are worth reading by hand.

Further reads

Sources: FreightWaves, AI Saves Trucking Company $53,000 Annually (23 September 2026, Polyak Trucking); ChatGPT and Claude pricing pages (November 2026). The telematics and toll exports in the worked example are illustrative.

Want your telematics audit set up properly?

On a 1:1 call we can look at the exports your system produces, pick the two or three checks worth running monthly, and set up a routine your dispatcher can run without me.

Book a 1:1 call with me