Three-way matching carrier invoices against rate confirmations
Cedarline's billing team reconciled thousands of carrier invoices by hand every week. We built a matching pipeline with an exception queue that only shows the invoices that genuinely need a person.
- Client
- Cedarline Logistics
- Industry
- Freight brokerage, 88 staff
- Engagement
- 10 weeks, then ongoing monitoring
- Published
Note.Client name is anonymized and figures are illustrative until publication is approved. Replace with a signed engagement before launch.
- 1,940
- Invoices matched per week without review
- 94%
- Of volume cleared without a human touch
- 71%
- Smaller weekly exception queue
Business context
Cedarline Logistics brokers freight between shippers and independent carriers. Revenue depends on the spread between what a shipper pays and what a carrier charges, so every invoice has to be matched back to the agreed rate before it is approved for payment.
The bottleneck
Carrier invoices arrived by email, often as a PDF photo of a paper document. Billing staff compared each invoice against the rate confirmation in the management system, line by line, then corrected mismatches by hand.
At peak volume that was more than 2,000 invoices a week handled by five people. Accessorial charges such as waiting time or detention were the worst: they were legitimate but impossible to verify quickly, so staff either approved them to keep carriers moving or pushed them into a queue that never emptied.
What existed before
- Three-way matching done manually in spreadsheets
- No consistent rule for which accessorial charges were acceptable
- Exception queue that grew faster than it was worked
- Carrier payment delays that damaged relationships
Solution architecture
Invoices are ingested from email and parsed into line items. Each line is matched against the rate confirmation, the load record, and the accessorial policy for that customer.
Deterministic rules handle the parts that are genuinely deterministic: mileage rates, fuel surcharge tables, and per-stop fees. A reasoning step handles the parts that are not, such as reading a scanned invoice with an unusual layout or interpreting a detention note.
The output is one of three states: matched, matched with an adjusted amount, or exception. Only the exceptions reach a person, and each one arrives with the specific disagreement spelled out.
Agent behaviour
- Read scanned and phone-photographed invoices without requiring carriers to change format.
- Normalize line item descriptions to the brokerage's own chart of charge codes.
- Propose an adjustment amount for a line that does not match, with the reasoning attached.
- Never approve an adjustment above the threshold the finance team set.
Rollout
- Week 1 to 2: Shadowing the billing team and capturing the rules they apply without writing them down.
- Week 3 to 6: Building the matcher and running it silently against eight weeks of historical invoices.
- Week 7 to 8: Routing exceptions to a queue while matched invoices continued through the old process.
- Week 9 to 10: Turning on automatic approval within thresholds and reviewing every single rejection daily.
Before and after
| Step | Before | After |
|---|---|---|
| Intake | Manual download and re-key | Parsed from the carrier email |
| Matching | Line by line in a spreadsheet | Rules first, reasoning for the rest |
| Exceptions | Everything unclear | Only genuine disagreements |
| Approval | All invoices reviewed | Matched invoices approved within threshold |
Business result
By the end of the rollout the pipeline was matching 1,940 invoices a week with no human review, about 94% of total volume. The weekly exception queue dropped by 71%, which meant the billing team could actually finish it.
Carrier payment time improved by two days on average, which reduced the number of carriers declining future loads.
Lessons learned
- Rules first, language models second. Most of the value came from a fuel surcharge table, not from reasoning.
- Thresholds have to live with finance, in writing, from the first week. The agent approves nothing the finance team has not explicitly allowed.
- Scanning quality was the real ceiling. We added a retry path with a sharper image request instead of accepting bad reads.