# How to Check a Carrier Invoice Against the Rate Con With AI Before You Overpay

> A carrier invoice can arrive with more lines than the rate con had. Here is how to have an AI assistant read the load's paperwork and tell you, line by line, what the documents support, what they do not, and what is still missing, while your team keeps the decision to pay.

By Vlad Shvets, Partner @ Qvery · Published 2026-10-26 · 20 min read
Canonical: https://qvery.ai/blog/audit-carrier-invoice-ai/

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.

![The invented carrier invoice CT-2291, marked revised: line haul $1,450, stop-off $75, fuel $185, detention $50 and $150, lumper $310, total $2,220, remit to the carrier's own bank.](https://qvery.ai/blog/audit-carrier-invoice-ai/screenshot-invoice.webp)

*The sample's revised invoice: six lines, $2,220 billed against a rate con that said $1,525.*

- **5 of 5** check runs, on three AI models, that matched all nine items of the answer key
- **$317.50** of the $2,220.00 billed that the documents did not support
- **$50.00** held as unknown until one missing document arrives
- **$1,525.00** already approved for the same load, under the factoring company's bill

Source: Qvery: five check runs in Claude Code and Antigravity on an invented sample load, scored against an answer key written before the first run (2026)

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.

**What you'll need**
- **An assistant that reads PDFs:** Claude for the route below; ChatGPT and Gemini take the same files and prompt
- **A data setting you have checked:** a business plan, or model improvement turned off on a personal plan, and your company's own data rules
- **One load's paperwork as PDFs:** the invoice, every rate con version, the agreement's accessorial terms, the signed bill of lading and receipts, any lumper receipt and notice of assignment
- **Your invoice log as a CSV:** load number, carrier invoice number, the factor's schedule number, amount, status, payee, and whether a notice of assignment is on file

Time: about 20 minutes for the first load

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**:

**Load 48213: what each invoice line needs before it is paid**

| 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](https://www.arrivelogistics.com/temporary-rate-confirmation-terms-and-conditions/) say the rate con "shall govern" where it conflicts with the carrier agreement.

[Freight360's sample agreement](https://www.freight360.net/wp-content/uploads/2023/10/Sample_Broker-Carrier_Agreement.pdf) 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).

![Sample rate confirmation 48213-2, marked as a revision that replaces 48213-1, with three stops, an all-in line haul of $1,450 and a $75 stop-off.](https://qvery.ai/blog/audit-carrier-invoice-ai/screenshot-ratecon-v2.webp)

*The revision adds stop 3 and its $75, and says in red that it replaces the first confirmation.*

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](https://support.claude.com/en/articles/8241126-upload-files-to-claude), 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:

**The check, as we ran it**

```
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:

**What came back from Claude Sonnet 5.5, as returned**

| 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:

1. **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.
2. **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**.
3. **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:

**The one-line request**

```
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:

> 🔍 
> - **It asks "if anything is wrong",** so the reply gave a verdict: the amount payable and who to pay. A figure like that invites someone to pay it.
> - **It never says what to do when proof is missing,** so the shipper detention, with no out time, came back as $0.00. A zero short-pays a charge one document may still support.

The check in step 2 asks for UNKNOWN instead and keeps the payment with a person. Where the two replies differ:

**The same pack, two prompts: where the 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

> ⛽ 
> - **What it is.** A fuel surcharge billed on top of a rate that already includes fuel.
> - **How the check found it.** Rate con 48213-2 reads "Line haul, all-in (fuel included)", and agreement 4.3 allows no surcharge on an all-in rate.
> - **The fix.** Short-pay the $185.00, citing clause 4.3 and the rate con line.
> - **How to know it held.** The carrier's next all-in load arrives with no fuel line.

### Detention: Free Time Runs From the Appointment, Not the Arrival

![Fifteen-minute blocks for the Charlotte stop: eight of free time from the 07:00 appointment, five billable to 10:15, one partial to 10:25, so 1.25 hours against 3.0 billed.](https://qvery.ai/blog/audit-carrier-invoice-ai/illustration-detention-clock.webp)

*The clock starts at the appointment plus the free time, not at the 06:40 arrival, and the last ten minutes do not make a block.*

1. **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.
2. **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.
3. **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.
4. **Check the next invoice** The carrier's next invoice counts detention from two hours after the appointment and arrives with both times signed.

![Sample delivery receipt DC-31877 from the Charlotte DC: appointment 07:00, handwritten in 6:40 and out 10:25, 18 pallets, unloaded by the lumper on receipt Q-55817.](https://qvery.ai/blog/audit-carrier-invoice-ai/screenshot-receipt.webp)

*The receiver's signed times are what the detention line has to match.*

These are our sample's terms, and published ones differ. [An Arrive Logistics carrier addendum](https://downloads.regulations.gov/FMCSA-2023-0257-6912/attachment_2.pdf) 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](https://pittohio.com/myPittOhio/RulesTariff/190), 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

> 🧾 
> - **What it is.** The fee an unloading crew charges at the dock, paid by the carrier and billed back. Federal law makes the shipper or receiver that requires the help provide it or pay for it ([49 U.S.C. 14103](https://www.law.cornell.edu/uscode/text/49/14103)); the receipt is the proof of what it cost.
> - **How the check found it.** Receipt Q-55817 shows $265.00 paid; the invoice bills $310.00. Supported: $265.00.
> - **The fix.** Pay the receipt's amount. Anything above it needs its own term in writing.
> - **How to know it held.** The payment equals the receipt, and the receipt sits in the load's file.

### 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](https://www.law.cornell.edu/cfr/text/49/378.2) is "two or more payments for transporting the same shipment," the loss the invoice log is there to stop.

1. **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.
2. **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.
3. **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](https://www.law.cornell.edu/ucc/9/9-406), once you have the notice, paying the carrier does not discharge the debt, and the factor is still owed.
4. **Check the log** It shows the $1,525.00 paid once, and every payment on load 48213 made to Brindlewood.

![Sample notice of assignment from Brindlewood Capital, dated 2026-09-02, telling the broker to pay every Copperfen invoice to Brindlewood until Brindlewood releases it in writing.](https://qvery.ai/blog/audit-carrier-invoice-ai/screenshot-noa.webp)

*The notice that decides who gets paid, whatever the invoice's remit-to says.*

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:

> ✅ **Five flags on load 48213 that are fine** 
> - **A $75 stop-off the first rate con never mentions:** the revision added stop 3 at $75.
> - **A second bill for the load, from a factoring company:** Brindlewood's bill is the right one, because its notice is on file.
> - **At the DC, the driver arrived 20 minutes early:** early is on time, and free time still runs from the appointment.
> - **22 pallets picked up, 18 delivered at the DC:** the other 4 went to stop 3.
> - **A lumper charge at all:** it is reimbursable with a receipt; only the amount was wrong.

Brokers on r/FreightBrokers put the fixes on the paperwork itself:

**Tips**

> Outline the requirements on your rate confirmation such as must email upon check in, accept tracking, etc.
> ([r/FreightBrokers · Sep 2026](https://www.reddit.com/r/FreightBrokers/comments/1wtnk9o/detention_claims_we_lose_are_almost_never_about/pcvwmsh/))

> 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.
> ([r/FreightBrokers · Sep 2024](https://www.reddit.com/r/FreightBrokers/comments/1f8bau9/lumper_reimbursement/lldaqse/))

> 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.
> ([r/FreightBrokers · Nov 2022](https://www.reddit.com/r/FreightBrokers/comments/yrqvxr/carriers_factoring_company_didnt_want_to_work/iw502we/))

> You would have needed to get a letter of release from the factor in order to pay the carrier direct.
> ([r/FreightBrokers · Nov 2022](https://www.reddit.com/r/FreightBrokers/comments/yrqvxr/carriers_factoring_company_didnt_want_to_work/ivv517k/))

## 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.

![Two bills for load 48213: the factor's $1,525 and the carrier's revised $2,220 share the line haul and stop-off; paid as billed, $3,745 goes out, where the shared $1,525 is owed once, to the factor.](https://qvery.ai/blog/audit-carrier-invoice-ai/illustration-two-bills.webp)

*The shaded lines are billed twice; the notice of assignment says which bill to pay, and the rest of the revised invoice is checked line by line.*

That is one invented invoice. Detention alone comes up often: [FMCSA's 2014 study](https://www.fmcsa.dot.gov/research-and-analysis/impact-driver-detention-time-safety-and-operations) 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:

**The hours, with our assumptions (put yours in)**

| 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:

**The first-month tally, one row per invoice, with load 48213's row**

| 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:

Have Us Build Your Carrier Invoice Check Into the Payables Desk: https://calendly.com/qvery-vlad/30min

## Step 6: Draft the Short-Pay Note From the Table, and Let a Person Send It

In the same chat, paste the second prompt:

**The short-pay note prompt, as we ran it**

```
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:

**The short-pay note, as Claude returned it**

```
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 LLC
```

**Check 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](https://support.claude.com/en/articles/10166901-use-google-workspace-connectors) 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.

1. **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.
2. **Let it draft on its own** The table and the note move no money and reach no one until a person acts on them.
3. **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](https://support.claude.com/en/articles/9519177-how-can-i-create-and-manage-projects), 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.

> ⚠️ **Three limits that break the check** 
> - The Gmail connector sees an attachment's details, not its contents, so attach the pack to the chat instead of pointing at the email.
> - A file read from Google Drive comes in as text only, with images inside it skipped, so a scanned receipt read through Drive loses its handwritten times. Attach the PDF.
> - A chat holds up to 20 files. One load fits; a week of loads does not, which is step 8's job.

Carrier bills are one of the freight jobs our logistics playbook ranks for brokers and 3PLs, beside quote requests, carrier packets and status calls:

Industry Playbook: https://qvery.ai/industry-playbooks/ai-agents-for-logistics/

## 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:

1. **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.
2. **Start it on every invoice** Each carrier invoice as it arrives, revised ones included.
3. **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.
4. **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.
5. **Keep the releases with a person** Every payment release, every note before it goes out, every change to a payee.
6. **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](https://qvery.ai/blog/workflow-mapping-ai-agents/).

## 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.

Take AI Across Your Freight Back Office, One Job at a Time: https://calendly.com/qvery-vlad/30min

## 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.
