On this page
- Step 1: Gather the Whole Pack, Because the Rate Con Alone Cannot Settle Every Line
- Step 2: Attach the Pack and Paste a Check That Is Allowed to Say Unknown
- Step 3: Read the Table Line by Line Before Anyone Trusts It
- Step 4: Settle Each Finding With Its Clause, Its Fix and Its Check
- Step 5: Price the Check on Your Own Desk Before You Run It on Every Invoice
- Step 6: Draft the Short-Pay Note From the Table, and Let a Person Send It
- Step 7: Save the Check So Every Load Gets the Same One
- Step 8: Hand the Check to an Agent When the Tally Holds
- Fix the Paperwork Upstream So Next Month's Check Has Less to Hold
- Frequently asked questions
The rate con said $1,525: a line haul and one extra stop. The invoice says $2,220, marked revised: a fuel surcharge, detention at two stops, and a lumper.
By hand, somebody on the carrier payables desk now opens the right version of the rate con, the carrier agreement's accessorial terms, the signed times on the bill of lading and receipts, the lumper receipt, and the invoice log, and does the arithmetic, one invoice at a time.
An AI assistant can do that reading in one pass and return every line with the term that allows it, the document that proves it, and the amount the documents support, for a person to check row by row.
At Qvery it is a job we build agents for, because every invoice comes with the same kind of pack and gets the same check. Step 8 is that agent's brief.
We ran the check on one invented load: a broker (Larkmoor Logistics), its carrier (Copperfen Transport), the carrier's factoring company (Brindlewood Capital), and the paperwork for load 48213.
Real carrier invoices carry real parties, so every name and number here is made up, and six things on the invoice are wrong on purpose. We wrote the answer key before the first run.
The runs went through developer tools rather than the chat app: Claude Code for Claude's models and Google's Antigravity for Gemini, each holding only the prompt and the files.
The steps in Claude's app come from Anthropic's help pages.

This page walks through the documents the check needs, the prompt we ran, the table it returned, what each finding means, the short-pay note, and how to save the check and price it on your own desk.
It runs on your own invoices tomorrow. If your rate cons and receipts already sit in a TMS, download the load's documents from it and start at step 2.
This checks truckload carrier invoices against the rate con and its proof. It does not cover LTL reweighs and reclasses, the payment run, or fraud screening.
Step 1: Gather the Whole Pack, Because the Rate Con Alone Cannot Settle Every Line
For anything past the line haul and the stops, our rate con pays accessorials "only as set out in Exhibit A" of the carrier agreement, "and only with the proof Exhibit A requires." So every other line needs a term that allows it and a document proving it:
| Invoice line | The term that allows it | The document that proves it |
|---|---|---|
| Line haul | Rate con 48213-2 | Signed bill of lading and delivery receipts |
| Stop-off | Rate con 48213-2 (stop 3); Exhibit A: $75 if on the rate con | The stop's delivery receipt |
| Fuel surcharge | Agreement 4.3: none on an all-in rate | Nothing can |
| Detention | Exhibit A: $50 an hour from two hours after the appointment | Signed in and out times |
| Lumper | Exhibit A: at cost, the amount on the receipt | The lumper's receipt |
| The whole invoice | Your invoice log and any notice of assignment | Load number, invoice number, status, payee, notice on file |
Your own paperwork decides what governs, and published terms disagree on whether the rate con or the agreement wins a conflict. Arrive Logistics' rate confirmation terms say the rate con "shall govern" where it conflicts with the carrier agreement.
Freight360's sample agreement says the agreement "shall prevail over any conflicting terms" in a rate confirmation. Ours lets the rate con govern its load (agreement 4.1) and says a revision the carrier has signed replaces every earlier confirmation (4.2).

Find those clauses in yours, attach every version of the rate con, and attach the accessorial schedule in force on the load date.
The documents do most of the work. We gave Claude Sonnet 5.5 only the invoice and the first rate con, with a one-line request.
It could not price the detention or the lumper, and it called the $75 stop-off "Not supported", which is true only of the version the revision replaced. Given the revised rate con instead, it got the stop-off right and still could not confirm $510 of accessorials.
Step 2: Attach the Pack and Paste a Check That Is Allowed to Say Unknown
In Claude, open a new chat, click the "+" button in the lower left corner of the chat box, choose "Add files or photos", and pick the load's files.
A chat takes up to 20 files, and our sample's pack is eight files.
Claude reads text and visual elements in PDFs of 100 pages or fewer, so a scanned receipt goes in as it is. ChatGPT and Gemini take the same files and the same prompt.
Then paste the check:
You check carrier invoices for our carrier payables desk. You prepare the check; a person on our team decides what to pay. Use only the files attached to this chat, and read every page of each.
For each load I attach: the carrier's invoice, every rate confirmation for the load, our carrier agreement (or its accessorial schedule), the signed bill of lading and every delivery receipt, the receipts for any reimbursed charge, any notice of assignment, and our invoice log as a CSV.
Work in this order:
1. Rate confirmation. Name the one that governs this load and quote the clause that makes it govern. If no document says which one governs, write UNKNOWN and stop.
2. Lines. For every line on the invoice, find the term that allows it (on the rate confirmation or in the agreement) and the document that term requires as proof.
3. Amounts. Recompute every amount from the term and the proof. Show the arithmetic, times included.
4. Result. Mark each line MATCH (the billed amount is what the documents support), MISMATCH (they support a different amount, zero included) or UNKNOWN (a term or a proof is missing, illegible or unsigned). Never fill in a missing time, amount or term: write UNKNOWN and name the document that would settle it.
5. Duplicates. Search the invoice log for this load number and this carrier invoice number. Say whether the invoice is new, a duplicate submission (billed before, not yet paid) or already paid, and give the earlier record's number, amount, status and payee.
6. Payee. If a notice of assignment is on file, name the assignee and say whether this invoice's remit-to matches it.
Reply with one table of five columns: Line | Billed | Supported | Result | Why (the clause, the proof and the arithmetic, in under 30 words). Under it, four lines: total billed, total supported, the amount held as UNKNOWN with the documents to request, and who any payment goes to. Then list what a person must decide. Do not approve, schedule or promise any payment.What each part of it is for:
- The governing rate con first, because every line after it depends on the version.
- A term and a proof for every line, so nothing is paid on the invoice's word.
- The arithmetic shown, so you can check any line in a minute.
- UNKNOWN instead of a guess, with the document that would settle it.
- The log and the payee, so a second bill for the same load, or a remit-to a notice of assignment overrides, shows up before the payment does.
- No payment decided, because that is your team's call.
Step 3: Read the Table Line by Line Before Anyone Trusts It
In Claude Code, Claude Sonnet 5.5 read the eight files and the prompt in 77 seconds and returned this table:
| Line | Billed | Supported | Result | Why |
|---|---|---|---|---|
| Line haul, Groveport to Charlotte | $1,450.00 | $1,450.00 | MATCH | RC 48213-2 line haul, all-in, $1,450.00. BOL and both receipts show 22 pallets delivered. $1,450.00 = $1,450.00. |
| Stop-off, Concord | $75.00 | $75.00 | MATCH | Exhibit A: $75.00 per added stop, only if on the rate confirmation. RC 48213-2 stop 3 is Concord at $75.00. Receipt S112-0950 confirms delivery. |
| Fuel surcharge | $185.00 | $0.00 | MISMATCH | Agreement 4.3: an all-in rate includes fuel, no surcharge payable. RC 48213-2 says "all-in (fuel included)". $185.00 ā $185.00 = $0. |
| Detention at shipper | $50.00 | UNKNOWN | UNKNOWN | Exhibit A: starts 10:00 (08:00 + 2 h). Driver in 7:50 is on time, but the BOL "Driver out" is blank. Hours cannot be computed. |
| Detention at receiver (Charlotte) | $150.00 | $62.50 | MISMATCH | Starts 09:00 (07:00 + 2 h). In 6:40 is on time. Out 10:25 (DC-31877). 85 min = 5 full 15-min blocks = 1.25 h Ć $50 = $62.50. |
| Lumper, Charlotte | $310.00 | $265.00 | MISMATCH | Exhibit A: lumper at cost, per the receipt. Receipt Q-55817 shows $265.00 paid. $310.00 ā $265.00 = $45.00 over. |
Under it: $2,220.00 billed, $1,852.50 supported, $317.50 not supported, and $50.00 held as unknown. Then six decisions for a person, starting with the $1,525.00 already approved for the same load.
To settle the $50.00, it asks for the shipper's bill of lading with the driver-out time signed, "or the shipper's gate or dock log showing in and out times."
That last document is the check's own addition. Our Exhibit A accepts "a signed bill of lading or delivery receipt showing in and out times," and a dock log is neither; two of the five check runs offered one. Ask only for the proof your agreement names.
Check it three ways before anyone acts on it:
Check every row for a clause and a document
A row missing either is a guess. Ours has one: the receiver row applies Exhibit A's two free hours and 15-minute blocks without naming Exhibit A, as four of the five check runs did on that row. Ask in the same chat which clause sets that row (here, Exhibit A); its arithmetic holds, as the next check shows.
Recompute one line yourself
At the receiver, the appointment was 07:00 with two free hours, so the clock starts at 09:00, not at the 06:40 arrival. Out at 10:25 is 85 minutes, or five full 15-minute blocks: 1.25 hours at $50, $62.50 against $150 billed.
Run it twice
A second Sonnet run, a run on Claude Opus 5.5 and one on Gemini 3.8 Flash returned the same amount on every line. Send any line two runs disagree on to a person.
The prompt is there for two things the arithmetic does not do: keep UNKNOWN apart from zero, and leave the payment to a person. We tried a one-line request on the full pack:
Check this carrier invoice against the rate confirmation and tell me if anything is wrong.It got the arithmetic right on every line the documents settle. Its two faults are in the request:
The check in step 2 asks for UNKNOWN instead and keeps the payment with a person. Where the two replies differ:
| Line | One-line request | The check |
|---|---|---|
| Shipper detention, no out time | "$0.00 (on hold)" | UNKNOWN, with what to request |
| The difference | "overstated by $367.50" | $317.50 not supported, $50.00 unknown |
| Payment | "The correct payable is $1,852.50, paid to Brindlewood Capital." | Six decisions listed for a person |
We also ran the check with the bill of lading and receipts as a bad scan: grey, tilted and blurred. It returned the same table and asked for the handwritten times to be confirmed against the original.
The check reads a time; it cannot tell you the time is true. Where a time decides money, tracking or ELD data can corroborate it.
Step 4: Settle Each Finding With Its Clause, Its Fix and Its Check
If you settle only one of these today, settle the duplicate: it is the most money on the invoice, and the only one where paying the wrong party means paying twice.
Fuel on an All-In Rate: $185 Billed, $0 Owed
Detention: Free Time Runs From the Appointment, Not the Arrival

Read the rule
Detention pays for the time a driver waits past the free time. Under our sample's terms the clock starts two hours after the appointment, only for an on-time driver, and counts full 15-minute blocks.
See what the check found
It read the receiver's in and out times off delivery receipt DC-31877 and got 1.25 hours where the invoice billed 3.0. The shipper's bill of lading has an in time and no out time, so that $50 stayed UNKNOWN instead of becoming zero.
Short-pay and ask
Short-pay the receiver line to $62.50, and ask for the signed out time before paying anything at the first stop.
Check the next invoice
The carrier's next invoice counts detention from two hours after the appointment and arrives with both times signed.

These are our sample's terms, and published ones differ. An Arrive Logistics carrier addendum starts detention two hours after the appointment for an on-time driver and wants signed paperwork "with both in and out dwell times."
Pitt Ohio's tariff, for truckload shipments, allows one free hour from arrival or appointment, "whichever is later," and charges "for each 15 minutes or fraction thereof."
Notice rules differ too. The Arrive addendum wants notice 30 minutes before detention starts.
Our rate con asks the carrier to call the carrier desk before detention begins, a term our answer key missed. Four of the five check runs raised it anyway and left it to a person, most of them noting that the agreement does not make the call a condition of pay.
If yours does, add a line to step 2 of the prompt asking for the notice record, and mark the line UNKNOWN without it.
Lumper: Pay What the Receipt Says
The Same Load Billed Twice, and Who Gets Paid
A duplicate submission is the same charge billed twice before either bill is paid. A duplicate payment is "two or more payments for transporting the same shipment," the loss the invoice log is there to stop.
Know the two bills
Brindlewood had already billed load 48213 as schedule BC-77810: $1,525.00, approved, scheduled for November 13, payee Brindlewood. Copperfen's revised invoice bills the same line haul and stop-off again, payable to Copperfen's own bank.
See what the check found
It searched the log by load number and invoice number, found the earlier record with its status and payee, and read Brindlewood's notice of assignment.
Pay once, to the factor
Pay the $1,525.00 once. Of the revised invoice's added lines, $327.50 is supported (receiver detention $62.50, lumper $265.00) and $50.00 waits for the out time. Send every payment to Brindlewood: under UCC 9-406, once you have the notice, paying the carrier does not discharge the debt, and the factor is still owed.
Check the log
It shows the $1,525.00 paid once, and every payment on load 48213 made to Brindlewood.

The notice sits on the carrier's record, not on one load, so the log tells the check one is on file; attach the notice itself with the pack. Confirm any change to who gets paid by phone, on a number you already have, never one from the email asking for the change.
The Flags That Are Fine
Telling these apart from the faults is what keeps a short-pay fair. On load 48213, five things look wrong and are not:
Brokers on r/FreightBrokers put the fixes on the paperwork itself:
Tips from Reddit
Brokers on putting the rules on the paperwork
Outline the requirements on your rate confirmation such as must email upon check in, accept tracking, etc.
I have it on the rate con to submit lumpers to me directly via email within 24 hours of last drop and I have an email I send every rate con attached to which has the same instructions bolded and underlined.
Every NOA specifically says you have to pay them and typically it will also say something along the lines of even if you pay someone else they are still owed the money and you must pay them.
You would have needed to get a letter of release from the factor in order to pay the carrier direct.
Step 5: Price the Check on Your Own Desk Before You Run It on Every Invoice
On load 48213, paying the revised invoice as billed while Brindlewood's scheduled payment also went out would have cost $3,745.00 for a load whose documents support $1,852.50, and the money sent to Copperfen would not have settled what Brindlewood is owed.

That is one invented invoice. Detention alone comes up often: FMCSA's 2014 study found drivers detained at about 1 stop in 10, for 1.4 hours beyond the two-hour standard on average, and each of those stops can come back as a line that turns on two signed times.
Say your desk checks 250 carrier invoices a week, a full check by hand takes 12 minutes once you count finding the documents, and verifying a table the step 8 agent prepared, with the pack already gathered, takes 4:
| How each invoice is checked | Invoices a week | Minutes each | Hours a week |
|---|---|---|---|
| Checked by hand | 250 | 12 | 50 |
| Prepared by the agent (step 8), verified by a person | 250 | 4 | 16.7 |
| The difference | 33.3 |
Both minute figures are assumptions; we found no study we would trust on them. At your payables team's hourly cost, the 33.3 hours a week are what the check is worth in time.
For the money, run the check on 20 paid invoices from last month that carried accessorials. Count only the flags a person upholds, scale them to last month's invoices with accessorials, and you have the other half of the case.
Together they are the budget for step 8's agent. Before that, the check needs one Claude project, set up once in step 7.
Then keep one row per invoice for the first month:
| Column | What goes in it | Load 48213 |
|---|---|---|
| Load and invoice | The load number and the carrier's invoice number | 48213, CT-2291 (revised) |
| Lines flagged | Each MISMATCH and UNKNOWN, by kind | Fuel, two detention lines, lumper, duplicate, payee |
| Upheld or overturned | Whether a person agreed with each flag after reading the documents | Your team's call |
| Dollars | Short-paid, and how much of it the carrier accepted | $317.50 short-paid |
| Held for a document | Yes or no, and which document | Yes: BOL FH-660412 with the out time |
| Days to settle | From the short-pay note to the carrier's answer | Counted from the note's date |
| Minutes | A person's minutes on this invoice, from arrival to release | Yours to time |
Our pack was built to carry these errors, so it cannot tell you how the check does on your paper. Four weeks of rows show how often the flags hold up, what they are worth, and how many minutes each invoice takes now.
Once the numbers say the check pays, the work is fitting it into your inbox, your TMS and your payment run:
Step 6: Draft the Short-Pay Note From the Table, and Let a Person Send It
In the same chat, paste the second prompt:
Draft the email that goes with our short payment of this invoice, from our carrier payables desk to the carrier's billing contact, with the assignee on the notice of assignment copied.
- One line for each invoice line we will not pay as billed: the billed amount, the amount we can support, and the clause and document that set it.
- For each UNKNOWN line, the document that would let us pay it.
- For a duplicate submission, the earlier record it duplicates and its status.
- Who all payment on this invoice goes to, and that any change to payment instructions is confirmed by phone.
Plain and factual. No threats, no apologies, no payment date. Under 200 words.In Claude Code, as a second turn after step 3's run, this came back 21 seconds later:
To: billing@copperfen.example
Cc: verify@brindlewood.example
Subject: Invoice CT-2291 (revised), load 48213: short payment
Hello,
We checked invoice CT-2291 (revised, $2,220.00), load 48213, against rate confirmation 48213-2 and the Broker-Carrier Agreement. Under Agreement 7.2 we short-pay these lines:
- Fuel surcharge: billed $185.00, supported $0.00. Agreement 4.3; rate confirmation 48213-2 is all-in.
- Detention at receiver: billed $150.00, supported $62.50. Exhibit A; delivery receipt DC-31877 (detention starts 09:00, out 10:25, five full 15-minute increments).
- Lumper: billed $310.00, supported $265.00. Exhibit A; lumper receipt Q-55817.
Detention at shipper ($50.00) cannot be supported yet. To pay it we need BOL FH-660412 with the driver-out time filled in and signed by the shipper, or the shipper's dock log showing in and out times.
CT-2291 duplicates our record received 2026-10-14 (schedule BC-77810, $1,525.00), which is approved and scheduled, not yet paid. The line haul and stop-off repeat that record.
All payment on this invoice goes to Brindlewood Capital under its notice of assignment dated 2026-09-02 (Agreement 7.3), not to the remit-to shown on the invoice. Any change to payment instructions is confirmed by phone with Brindlewood before we act on it.
Carrier Payables
Larkmoor Logistics LLCCheck that it held: every amount matches the table, the unknown line asks only for proof your agreement accepts, the duplicate is named with its earlier record and status, and no payment date is promised.
Ours fails the second test: it carried over the dock log from step 3, so strike the dock log before the note goes.
To save it straight to Gmail, connect Claude's Gmail connector once: open the Connectors Directory at claude.ai/connectors, click Gmail, click "Connect" and follow the prompts to sign in to Google. After that, click the "+" button in any chat, hover over "Connectors" and switch Gmail on.
It drafts emails, and by default it sends, replies or forwards only after you approve each action. On Team and Enterprise plans an Owner turns the connector on first and decides whether members may skip that approval. Leave the approval on for this one.
Then ask in the chat for the corrected note, with the dock log struck, to be saved as a Gmail draft and not sent. In Gmail's Drafts it should sit unsent, with To and Cc as in the note, every amount as in the table, and no dock log.
Try it on a settled load first
Draft the note for a load your team already short-paid, and compare it with the note they sent.
Let it draft on its own
The table and the note move no money and reach no one until a person acts on them.
Keep these with a person
Sending the note, releasing the payment, and any change to who gets paid or where.
Step 7: Save the Check So Every Load Gets the Same One
In Claude, go to claude.ai/projects and click "+ New Project" in the upper right corner. Name it, click "Set project instructions", paste the check from step 2, and click "Save instructions". Claude then reads those instructions in every chat inside the project, and Projects come with every Claude plan, the free one included.
Then open one chat per load, attach that load's files with the carrier's agreement, and write "Check this load." The check reads only the files attached to the chat, so the agreement goes in with every load; every check run here had it among the files.
The reply should be the same five-column table as step 3, with no prompt pasted.
Carrier bills are one of the freight jobs our logistics playbook ranks for brokers and 3PLs, beside quote requests, carrier packets and status calls:
Step 8: Hand the Check to an Agent When the Tally Holds
A chat per load suits the month the tally runs. At hundreds of invoices a week, the same check belongs in an agent. As a brief someone could build from:
Let it read the inbox and the TMS
The carrier-invoice inbox, the load's record in the TMS, the carrier agreement, and the invoice log with its notices of assignment.
Start it on every invoice
Each carrier invoice as it arrives, revised ones included.
Hold it to the same rule
The governing rate con, the agreement's accessorial terms, the invoice log and any notice of assignment, exactly as in the prompt.
Have it write the table and a hold
The table goes on the payables record and every line that is not a match is held. The whole invoice is held when the log shows an earlier bill for the load or the remit-to differs from a notice on file. The short-pay note waits as a draft.
Keep the releases with a person
Every payment release, every note before it goes out, every change to a payee.
Count it in the tally's columns
Minutes per invoice and dollars of flags upheld.
Set up the log first, because the agent can only count what the log holds: add the tally's columns to it. If you have not priced and mapped the job yet, map the workflow before you build the agent.
Fix the Paperwork Upstream So Next Month's Check Has Less to Hold
Read down the first month's "Held for a document" column and each entry traces to a term or a proof the paperwork did not carry: no out time, no notice record, no receipt, or a revised invoice that does not say what it replaces.
The cheapest fix is the rate con you send tomorrow. Say which version governs, when the carrier must give notice before detention, where lumper receipts go and by when, and that a notice of assignment decides who is paid.
Frequently asked questions
How do you audit a carrier invoice against a rate confirmation?
Line by line. Find the rate con that governs and the clause that says so, then give every line the term that allows it and the document that proves it. Recompute each amount, mark a line with missing proof as unknown rather than zero, and check your invoice log for an earlier bill for the same load and for the payee on file.
Can AI check detention and lumper charges?
Yes, when it has the terms and the proof. With the accessorial schedule, the signed in and out times and the lumper receipt attached, five of five check runs on our sample priced both correctly. Given only the invoice and the rate con, Claude Sonnet 5.5 could not confirm either.
What documents do you need to check a carrier invoice?
The invoice, every version of the rate con, the carrier agreement's accessorial terms, the signed bill of lading and every delivery receipt, the receipt for any reimbursed charge, any notice of assignment, and your invoice log with status, payee and any notice on file.
How do you catch a duplicate carrier invoice when a factoring company is involved?
Keep a log with the load number, the carrier's invoice number, the factor's schedule number, the amount, the status, the payee and whether a notice of assignment is on file, and search it by load and by carrier invoice number. A factor may bill under its own schedule number, as Brindlewood did.
Who do you pay when a carrier uses a factoring company?
The factor, once a notice of assignment from the carrier or the factor identifies what was assigned: under UCC 9-406, paying the carrier after it does not discharge the debt. If a notice looks wrong, ask the factor for proof; until it arrives, 9-406(c) lets you pay the carrier. To pay the carrier again, get the written release your agreement requires, and confirm any new payee by phone.
How long does a carrier have to bill for a load?
Your carrier agreement sets the invoicing window (our sample's is 15 days from delivery). For a lawsuit, federal law gives a motor carrier under federal jurisdiction 18 months after the claim accrues to sue for its charges, and the same 18 months applies to an action to recover overcharges (49 U.S.C. 14705).
Is it safe to upload rate confirmations to an AI assistant?
Use a business plan or check the setting. Anthropic does not train on inputs from its commercial plans by default; on its Free, Pro and Max plans it does if you allow it in the privacy settings. Rate cons show what you pay carriers, so follow your own data rules before the first real load.