Upload each rate confirmation to ChatGPT or Claude with one fixed prompt that returns a load row and a row per stop, quoting the source line for money, dates and reference numbers. Paste the rows into a two-tab sheet and check seven things by eye before the load counts as booked. Broker emails get a shorter prompt of their own.
The retyping isn't the real cost. The cost is the quiet errors: a transposed pickup number, a date read as day-first, a detention clause nobody noticed. So the design principle is that AI does the typing and a person does the checking, and the prompt is built to make the checking fast. Every money, date and reference value arrives with the line of the document it came from.
What is inside a rate confirmation, and where retyping goes wrong
A rate confirmation, usually called a rate con, is the document in which a broker confirms one load and the agreed rate with the carrier. Trade guides agree on what it holds: a load or reference number, the broker's name and contact details, pickup and delivery addresses, appointment times, the commodity, weight and equipment, and the rate, often split into linehaul (the base rate for moving the freight) and a fuel surcharge. Then come the accessorials, the extra charges: detention (paid waiting time, with free hours and an hourly rate), layover, TONU (truck ordered not used, a fee if the load cancels after you've dispatched) and lumper fees (third-party unloading charges). Payment terms (usually tied to receiving the signed bill of lading, BOL, and the proof of delivery, POD), special instructions and often several pages of broker terms follow. One point from those guides is worth keeping in view: anything not written on the rate con may not get paid.
Retyping goes wrong in predictable places. Reference numbers get a digit swapped. A date such as 11/04 is read as 11 April instead of 4 November. A pickup quoted on the phone as first come, first served (FCFS) turns out to be a fixed appointment in the written document. A total that bundles fuel gets keyed as the linehaul. Detention terms have conditions in the small print that never reach the sheet. Each of these costs real money or a missed appointment, and each is easier to catch when the original line sits beside the typed value.
If your transport management system (TMS) already reads rate confirmations, use that first. This method suits fleets that run on a spreadsheet, or whose software can't read PDFs. This tutorial on AI software for small trucking fleets covers what to check before buying anything.
A two-tab sheet: one row per load, one per stop
One load can have several stops, so a single wide row breaks as soon as a load has three of them. Use two tabs and link them by load number.
| Tab | Columns |
|---|---|
| Loads | A Load #, B Broker, C Equipment, D Commodity, E Weight, F Linehaul, G Fuel surcharge, H Other flat charges, I Total, J Payment terms, K Free hours, L Detention rate per hour, M TONU, N Flags (A to N match the prompt's LOADS line, in order), O Status (Offer, Booked, Delivered, Invoiced, Paid), P Rate con link, Q Reviewed by, R Reviewed on |
| Stops | A Load #, B Stop number, C Type (pickup or delivery), D Name, E Address, F Date, G Window start, H Window end, I Appointment or FCFS, J Reference number, K Instructions |
Two columns carry the control. "Reviewed by" and "Reviewed on" stay empty until a person has done the checks, and a load can't move to Booked without them. Add three formulas in spare columns so the sheet flags a breach:
S2 (money check):
=IF(A2="","",IFERROR(IF(ABS(SUM(F2:H2)-I2)<0.01,"ok","CHECK"),"CHECK"))
T2 (review gate):
=IF(AND(O2<>"",O2<>"Offer",OR(Q2="",R2="")),"REVIEW MISSING","")
U2 (duplicate load number):
=IF(A2="","",IF(COUNTIF($A:$A,A2)>1,"DUPLICATE",""))
Each formula guards against a specific slip. The money check uses SUM rather than F2+G2+H2 because the prompt writes NOT FOUND for a missing charge, and adding text with a plus sign returns a #VALUE! error instead of an answer; SUM skips the text, and a total that isn't a number shows CHECK. The review gate fires for any status past Offer, so a load can't dodge it by jumping straight to Delivered. The money and duplicate checks skip empty rows, so you can fill all three down the whole column.
That last check matters more than it looks. When a broker sends a revised rate confirmation for the same load, you want the sheet to say so rather than quietly create a second row with a different rate.
A sample rate confirmation to practise on
This is an invented, illustrative document, short enough to read in one go and containing the traps that catch real extractions: ambiguous dates, several reference numbers, a conditional detention clause and an optional fee. Real ones run to several pages.
RATE CONFIRMATION Load 48213-7 Issued 11/02
Broker: [broker name] Dispatcher: [name] Phone: [phone]
Carrier: [carrier name]
Equipment: 53 ft dry van Commodity: packaged food, no hazmat
Weight: 38,400 lb Pallets: 22
STOP 1 - PICKUP
Shipper A, [address]
Date 11/03 Time 0800-1200 FCFS Pickup # PU-77120
Live load. Check in at the guard gate.
STOP 2 - DELIVERY
Receiver B, [address]
Date 11/04 Appt 0600 Delivery # DL-5521 PO 880213
Call 1 hour before arrival.
RATE (USD)
Linehaul 1,850.00 Fuel surcharge 210.00 Total 2,060.00
ACCESSORIALS
Detention 50.00 per hour after 2 hours free, with prior written
approval and timestamps. TONU 150.00. Lumper reimbursed with receipt.
PAYMENT
Net 30 from receipt of signed BOL and POD. Quick pay available at a
3% fee.
TRACKING AND NOTES
Track via the broker's portal, updates every 4 hours. No double
brokering. Seal number given at pickup. Sign and return this page.
The extraction prompt, rule by rule
Put the prompt in a ChatGPT or Claude Project's instructions so every load starts from the same rules, then open a new chat for each document and attach the PDF. The output is tab-separated text, which pastes into a sheet as columns; markdown tables don't paste cleanly.
You extract load data from a rate confirmation for a small trucking
company. Today is 2026-11-02. Dates in these documents are
month/day.
Return three blocks of tab-separated text, with no markdown and no
commentary.
LOADS (one line): load_number, broker, equipment, commodity,
weight_lb, linehaul, fuel_surcharge, other_flat_charges, total,
payment_terms, free_hours, detention_per_hour, tonu, flags
STOPS (one line per stop): load_number, stop_number, type, name,
address, date, window_start, window_end, appointment_or_fcfs,
reference_numbers, instructions
SOURCES: for the load number, linehaul, fuel surcharge, total, each
stop's date and time, and each reference number, quote the exact
line of the document it came from.
Rules:
1. Use only what the document says. If a field is absent write
NOT FOUND. Never write 0 for a missing amount.
2. Dates as YYYY-MM-DD. Times as 24-hour local time for that stop;
do not convert time zones. If a date could be read two ways,
put AMBIGUOUS in flags.
3. Money as plain numbers. If the total includes charges that are
not itemised, put ALL-IN in flags.
4. Copy every reference number exactly as printed, each with its
label (pickup, delivery, PO, BOL, seal).
5. Do not apply optional fees such as quick pay to the total.
Mention them in flags.
6. In flags, quote any condition attached to detention, TONU,
lumper, layover or payment.
7. If the document says revised, updated or amended, put REVISION
in flags.
8. If two numbers conflict, give both and put CONFLICT in flags.
Do not choose one.
Each rule exists because of a failure. Rule 1 stops the model turning "not stated" into zero, which would make a missing fuel line look like a free one. Rule 2 deals with the date and time-zone traps. Rule 4 keeps a purchase order from being mistaken for a delivery number. Rules 5 and 6 keep the optional and the conditional visible rather than quietly folded in. Rule 8 forces a disagreement between, say, a header total and a line total onto the page, where a person can see it.
What came back, and the four fixes
This is the record the prompt returns for the sample (illustrative), laid out as a table so each value sits beside its source line.
| Field | Value | Source line quoted |
|---|---|---|
| Load number | 48213-7 | "Load 48213-7" |
| Equipment, commodity, weight | 53 ft dry van; packaged food, no hazmat; 38400 | "Equipment: 53 ft dry van ... Weight: 38,400 lb" |
| Linehaul, fuel, total | 1850.00; 210.00; 2060.00 | "Linehaul 1,850.00 Fuel surcharge 210.00 Total 2,060.00" |
| Other flat charges | NOT FOUND | (no line) |
| Free hours, detention, TONU | 2; 50.00 an hour; 150.00 | "Detention 50.00 per hour after 2 hours free ... TONU 150.00" |
| Payment terms | Net 30 from signed BOL and POD | "Net 30 from receipt of signed BOL and POD" |
| Stop 1, pickup | 2026-11-03, 08:00 to 12:00, FCFS, pickup # PU-77120 | "Date 11/03 Time 0800-1200 FCFS Pickup # PU-77120" |
| Stop 2, delivery | 2026-11-04, 06:00, appointment, delivery # DL-5521, PO 880213 | "Date 11/04 Appt 0600 Delivery # DL-5521 PO 880213" |
| Flags | Detention needs prior written approval and timestamps; lumper reimbursed with receipt; quick pay available at 3% fee, not applied; tracking via broker portal every 4 hours | "with prior written approval and timestamps" and others |
It took several rounds of prompt changes to get there, and the earlier outputs are worth knowing because every one is a mistake you could make by hand.
- The date read day-first. With no convention in the prompt, the first run returned 2026-03-11 for the pickup, 11 March. Telling the model "dates are month/day" fixed it, and the AMBIGUOUS flag now catches the rest. Set the convention to whatever your brokers use, and per broker if they differ.
- The PO number became the delivery number. The first run put 880213 in the delivery column and dropped DL-5521. Rule 4, with labels, fixed it.
- The detention conditions disappeared. The model summarised "50 an hour after 2 hours" and left out the need for prior written approval, which is the clause that decides whether you are paid. Rule 6 now makes it quote conditions.
- Missing became zero. Other flat charges came back as 0. Rule 1 changed it to NOT FOUND, which prompts a person to confirm there really are none before typing a zero.
The source column does the most work. With the quote beside the value, the reviewer checks a pair of lines rather than hunting through a PDF, which is what turns a three-minute check into a 30-second one for most fields.
Seven checks before a load counts as booked
The person who agreed the load on the phone should do these, because they know what was promised. They take two to three minutes a document, and the sheet's formulas cover the first.
- The money adds up. Linehaul plus fuel plus other flat charges equals the total. The money-check formula does this, and a mismatch means the AI misread a line or the document contains an error.
- Dates and times are plausible. Pickup falls before delivery, the weekday matches the calendar, and anything flagged AMBIGUOUS is resolved against the original. Times are local to each stop, so the gap between them can mislead on a long haul across time zones.
- Stops are in the right order and complete. The number of stops matches the PDF, each pickup comes before its delivery, and each address is whole, with any suite, dock or gate number.
- Reference numbers match digit for digit. Compare the load, pickup, delivery and PO numbers against the PDF by eye. They are what you will need at the dock, on the invoice and in a dispute, and a transposed digit is invisible to a formula.
- Appointment or FCFS matches the call. If you were told first come, first served and the paper says an appointment, you want to know before the driver arrives.
- The terms match yours. Free hours, detention rate, TONU, lumper handling and payment terms are compared with your standard terms, and every flag is read.
- It isn't a duplicate or a revision. The duplicate formula or a REVISION flag means you compare the new document with the old one before replacing anything.
Enter your initials and the date in the reviewed columns only when all seven pass. A load that can't be marked reviewed shouldn't be marked booked. For what happens to those terms later, this tutorial on tracking detention and invoicing brokers picks up where the Loads tab leaves off.
Load emails, and the gap between the phone call and the paper
Loads usually start as an email or a call, and the rate confirmation follows. The same approach works on the email, with a different prompt, and it gives you something valuable: a record of what was offered, to compare against what arrives in writing. Here is an illustrative offer email.
Subject: Load offer, dry van, Tue pickup
Hi, need a 53 ft dry van Tue 11/03 from [city A] to [city B]. About
38k lb, 22 pallets, packaged food. Pickup FCFS 8 to 12, delivery
appt Wed 6 am. Paying 2,000 all-in. Detention after 2 hrs free at
50 an hour. Can you cover? Reply with your MC and I'll send the
paperwork. [dispatcher]
You read a broker's email about a load for a small trucking company.
Today is 2026-11-02; dates are month/day. Return one tab-separated
line: email_type (OFFER, CONFIRMATION, CHANGE or OTHER), load_number,
origin, destination, equipment, commodity, weight_lb, pickup_date,
pickup_window, pickup_type, delivery_date, delivery_time,
delivery_type, rate, rate_basis (ALL-IN, LINEHAUL or NOT STATED),
accessorial_terms, open_questions.
Write NOT FOUND for anything absent and never guess a load number.
If a weekday and a date disagree, say so in open_questions.
For a CHANGE email, list only what changed and quote the sentence.
For the offer above, a good result is an OFFER with no load number, pickup and delivery dates of 2026-11-03 and 2026-11-04, FCFS and appointment types, a rate of 2000 on an all-in basis, and an open question noting that the weight is "about 38k". When the rate confirmation arrives, load that record and the rate confirmation's record into one chat and ask for the differences.
Compare the EMAIL record and the RATE CON record for the same load.
List every field that differs or appears in only one, as a table:
field, email, rate con, why it could matter to the carrier. Do not
say which version is right.
For our pair, the useful lines of the answer are these (illustrative). The rate moved from 2,000 all-in to 2,060 split as 1,850 plus 210 fuel, which is slightly better for you. Pickup type and delivery appointment agree. The detention rate and free time agree, but the rate confirmation adds a condition, prior written approval with timestamps, that the email never mentioned. And four terms appear only on paper: TONU of 150, lumper reimbursed against a receipt, a quick-pay fee of 3% and four-hourly tracking. The detention condition is the one that matters, because it can decide whether you are paid for waiting. The call to make, whether to ask the broker to drop it or to build a habit of getting approval at the dock, is yours.
The same prompt style handles update emails such as "pickup moved to 14:00, rate now 1,900 all-in". Ask for a CHANGE record and make a person decide which existing load it belongs to, since many update emails carry no load number. If you also broker loads yourself and want the other side of this paperwork, see this tutorial for freight brokers on load emails and rate confirmations.
Letting AI flag the fine print you would skim
Most rate confirmations carry pages of broker terms, and most dispatchers skim them. A model can read every page and list only the clauses that are stricter than yours. Write your standard terms as a short list first: free hours, detention rate and conditions, TONU minimum, lumper handling, payment terms, POD deadline. Then ask for exceptions only.
Here are my company's standard terms:
- Detention after 2 hours free, 50 an hour, no approval conditions
- TONU at least 150
- Lumper reimbursed or paid direct
- Payment net 30 from invoice
- No chargebacks for events outside our control
Read every page of the attached rate confirmation. List each clause
that is stricter than my standard terms or that I haven't listed but
might care about (claims, indemnity, chargebacks, delivery deadlines,
paperwork deadlines). Quote the words, name the term it affects, and
list nothing else. Do not give legal advice.
Trade guides warn about the same families of clause: detention that needs prior written approval through a tracking portal, chargebacks for reconsignment after a missed appointment, claims language that leaves liability to the other side's discretion, force majeure wording that shifts delay risk to the carrier, and short windows for paperwork. A model is good at finding these and poor at judging them, so treat its list as a reading prompt for you or a qualified adviser. Back it with a mechanical check: search the PDF for the words "detention", "claim", "indemn", "chargeback" and "deadline", and confirm each hit appears in the model's list. It takes 30 seconds and catches a clause the model skipped on page four.
Test it on 20 past loads first
Before the method touches a live load, run it on twenty rate confirmations you have already keyed correctly. Pick different brokers and layouts, and add your three worst scans. Run each through the prompt, compare every field with your existing record, and tally the errors by type. You are measuring two things: how often the model is wrong, and whether your seven checks would have caught each error.
| Field group | Checks | Errors | What went wrong | Caught by |
|---|---|---|---|---|
| Money | 60 | 0 | Formula, check 1 | |
| Dates and times | 80 | 3 | Two brokers write day-first, so the month/day rule misread them; one 12-hour time misread | Check 2 and the AMBIGUOUS flag |
| Reference numbers | 80 | 4 | Transposed digits, all on poor scans | Check 4, by eye only |
| Addresses | 40 | 1 | Suite number dropped | Check 3 |
| Terms and flags | 60 | 6 | Conditions left out before rule 6 was added | Check 6 |
These results are illustrative. That is 14 errors in 320 checks, about 4%, and the table shows the point: none of them was uncatchable. The money check is mechanical. The date errors surface through the flag. The reference-number errors need a human, and they cluster on bad scans, so those documents get a slower review, including a phone call to the broker if a digit is in doubt. The terms errors vanished once rule 6 was added, and a re-run of those six documents confirmed it. If one type of error had slipped past all seven checks, I would fix the prompt, or stop using the method for that type of document, before going live.
Scans, multi-load PDFs and other awkward documents
- Poor scans and phone photos. Add a rule: "If any characters are unclear, write [UNCLEAR] and do not guess." A blank is far safer than a plausible wrong digit. Keep the source-quote column, since a quoted line that looks wrong shows a misread immediately.
- Several loads in one PDF. Split the file first and run one load per chat. Claude takes up to 20 files in a chat, but mixing loads invites crossed-over references, and a single load per chat is how you keep one record per document.
- Long documents. Page count is rarely the limit. Claude reads PDFs up to 1,000 pages, though it analyses visual layout only up to 100 pages, and ChatGPT accepts files up to 512 MB, so a six-page rate confirmation with broker terms is well within both. The practical issue is attention: long terms sections are where the model skims, which is why the clause search above exists.
- Revised documents. A second PDF for the same load number is a revision until you've proved otherwise. Run it through the compare prompt against the first before replacing anything, and keep both files.
- Pasted data that misbehaves. If dates paste into the sheet as text or numbers carry stray spaces, this tutorial on cleaning messy data covers the fixes.
Treat every document from outside as untrusted text. A chat that can only produce a draft row can do little harm when it misreads something, because your checks catch it. Connecting the same chat to email, dispatch or payments changes that, so keep extraction separate from anything that can act.
A month at 40 loads a week: time and cost
Take a fleet that books about 40 loads a week, roughly 170 a month. Keying one by hand into a sheet and checking it takes about seven minutes in this illustration. With the prompt and the seven checks, a load takes about three: under a minute to upload and paste, and two minutes to review. That saves four minutes a load, about 680 minutes or 11 hours a month. At $25 an hour for whoever does the keying, that is about $280 a month.
The tool cost is small. A personal plan from either vendor has listed at about $20 a month. If you prefer the business plans that don't train on your content by default, both require at least two seats, so budget roughly $40 to $50 a month. Either way the saving is several times the cost, but the number to watch is errors, not minutes: a month in which the sheet is quicker but two loads are wrong is a bad month. The same sheet then feeds the next jobs. Missing proofs of delivery and late invoices are the subject of this tutorial on chasing PODs and late invoices, and reading the bill of lading itself is tested in this accuracy test on bills of lading.
Questions fleet owners ask about AI and load paperwork
Can ChatGPT or Claude read a scanned or faxed rate confirmation?
Usually, but test it. Claude reads a PDF's pages visually as well as its text (up to 100 pages), and OpenAI says ChatGPT analyses both text and images in PDFs; it suggests uploading pages as PNG or JPEG images if a file's images aren't picked up. Skewed, faint or faxed pages produce more misreads, so run your ten worst scans first and keep the source-quote column so a bad read is easy to spot.
Is it safe to upload rate confirmations to a chatbot?
A rate confirmation holds commercial rates and contacts, so treat it as business data. Business plans from OpenAI and Anthropic don't train on your content by default, and personal plans have a model-training switch in privacy settings. Check whether your broker agreements say anything about sharing documents with third-party tools, and don't connect the chat to anything that can send messages or pay invoices.
Can I automate the whole thing with Zapier or Make?
Possibly, but do it last. On Zapier, triggers and filters don't count as tasks and each action does, and an AI step uses 1, 3 or 5 tasks depending on the model tier. One AI step plus one Sheets step for 170 loads a month is about 340, 680 or 1,020 tasks, against 750 on Professional ($19.99 a month billed annually). First confirm the AI step you pick accepts PDF attachments.
Who is responsible if the AI misreads a rate?
You are. The signed rate confirmation is the contract and the sheet row is your working copy. That is why money, dates and reference numbers are checked by eye against the PDF before a load is marked booked, and why the AI never triggers dispatch, invoicing or payment on its own.
Further reads
- Trucking Price Quote Template: Build One and Check Rates With AI — Check a broker's rate before you accept the load.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: published trade guides to reading rate confirmations (load details, accessorials, payment terms, appointment wording); OpenAI and Anthropic help pages on file upload limits and privacy; Zapier plan and task-counting pages.