How to Automate BOL and POD Document Extraction the Right Way
BOL and POD parsing is the most-automated freight workflow and still the most broken, because the parser cannot see the shipment record the document is supposed to reconcile against. Here is the reconciliation-first path.
Mithrilis Team
15 min read
Most teams already run software that reads paperwork. The honest question is not whether to start, it is how to automate BOL and POD document extraction so the parsed result is actually trusted, because the part that breaks is never the optical character recognition. It is that the parser reads a bill of lading or a proof of delivery in isolation, with nothing to check it against. A document only matters in relation to the deal it is supposed to confirm: the rate confirmation, the tender, the accessorials you agreed to. Read alone, a perfectly parsed BOL is a clean transcription of numbers nobody has verified.
TL;DR
Automating BOL and POD extraction the right way means parsing the document against the unified shipment record it is supposed to reconcile, not transcribing it into a field-by-field copy nobody checks. The OCR is the easy 20 percent. The hard 80 percent is reconciliation: does the parsed accessorial match the tender, does the POD signature and weight match what was booked, does the rate confirmation agree with the invoice you are about to send. When a document agent reads against connected data, a mismatch is caught before invoice, not after dispute. That is the difference between automating a single workflow and applying intelligence to connected data.
Key takeaways
- BOL and POD parsing is the most-automated freight workflow and still the most broken, because the parser sees the document but not the shipment record it should reconcile against.
- A parsed field is only useful next to the value it confirms or contradicts: the tendered rate, the contracted free time, the booked accessorials.
- ATRI found 94.5 percent of fleets charge detention fees but collect on fewer than half of those invoices, a reconciliation failure, not a parsing failure.
- ACT mode means a document agent closes the routine cycle and escalates the genuine mismatch to a human, instead of straight-through-posting an unverified number.
- The product win is not faster OCR. It is reconciliation against connected data, so the dispute is prevented before the invoice goes out.
Why is BOL and POD parsing the most-automated freight workflow and still the most broken?#
BOL and POD parsing is the most-automated and most-broken freight workflow because automating the reading of a document is easy and reconciling it against the deal is hard, and almost everyone automated only the easy half. Optical character recognition on a bill of lading is a solved problem. Vendors have offered it for a decade, and most brokers and asset carriers already pass scanned paperwork through some extraction engine that pulls the consignee, the weight, the piece count, and the signature line into structured fields. The reading works. The trust does not.
The reason is structural. A document is a claim about a shipment, and a claim has to be checked against something. A proof of delivery says a load arrived at 14:32 with two pallets refused. Useful only if you know what was tendered, who was supposed to receive it, and whether refused freight triggers a return accessorial under the rate confirmation. A bill of lading lists a detention line and a lumper fee. Useful only if you know the contracted free time and whether the customer agreed to reimburse lumpers. Parsed in isolation, these are orphaned numbers. The extraction engine has no shipment record to compare them to, so it transcribes faithfully and verifies nothing.
This is why the most-automated workflow still generates the most disputes. The billing friction that survives every wave of document automation is the same friction that comes from systems that do not talk to each other, because the automation never touched the part that was actually broken. You can read a BOL flawlessly and still bill detention the customer never agreed to, miss a lumper you were owed, or post a POD against the wrong load. The parser did its job. Nobody did the reconciliation.
What does it actually mean to reconcile a parsed document against connected data?#
Reconciling a parsed document against connected data means comparing every extracted field to the value it is supposed to confirm in your unified shipment record, and surfacing the disagreements instead of swallowing them. It is the step between reading the page and trusting the page, and it is the step almost every document tool skips.
Concretely, reconciliation runs three comparisons on every document. First, identity: does this POD belong to the load the carrier says it does. The parsed BOL number, pro number, and stop sequence have to bind to one shipment in your records, the way a unified shipment record binds a TMS load to an ELD trip to a dock appointment. Second, terms: does each parsed accessorial line correspond to something in the tender or rate confirmation. A detention charge has to map to contracted free time and gate timestamps. A lumper line has to map to a customer agreement. Third, fact: does the parsed weight, piece count, and delivery outcome match what was booked and what the telematics recorded.
When all three agree, the document is verified and the cycle closes without a human touching it. When one disagrees, that disagreement is the signal. The disagreement is precisely what a parser in isolation can never produce, because it has nothing to disagree with. This is the inspectability promise the Mithrilis platform is built on: every parsed field links back to the source document image and to the tender field it was checked against, so a billing clerk or a customer in a dispute can see exactly why a number was accepted or flagged.
Read the test, not the demo
The test for whether a document tool reconciles or merely transcribes: ask what it does when a parsed accessorial on the BOL has no matching line in the tender. A transcription tool posts it and moves on. A reconciliation agent flags it as a mismatch, shows you both values side by side, and holds the invoice until a human resolves it. One creates disputes. The other prevents them.
Why can't a parser catch what is wrong if it reads the document alone?#
A parser reading a document alone cannot catch what is wrong because catching an error requires a second value to compare against, and a standalone parser has only the one value it just read. Error detection is a relationship, not a property of a single field. The number "2 hours detention" is neither right nor wrong on its own. It is wrong only relative to a tender that allowed three free hours, or right relative to one that allowed one. Without the tender in scope, the parser has no basis to judge, so it does not judge.
This is the quiet failure mode behind the industry's detention numbers. ATRI's 2024 analysis found that truck driver detention drove $3.6 billion in direct expenses and $11.5 billion in lost productivity in 2023, with drivers detained in 39.3 percent of all stops and total time lost exceeding 135 million hours. The detail that matters for document automation is this: ATRI reports that while 94.5 percent of fleets charge detention fees, they are paid for fewer than 50 percent of those invoices. That collection gap is not a parsing failure. The dwell happened, the gate timestamps exist, the BOL was read. The failure is that the detention claim went out without being reconciled, before invoice, against the contracted free time and the operational record, so it was easy for a customer to short-pay or reject.
The same blindness cuts the other way for asset carriers. A parser that reads a POD and never checks it against the tender will silently let accessorials you were owed go unbilled, because nothing in the document itself announces "you forgot the lumper." Only the comparison to the agreement reveals the gap. As FreightWaves has documented in its coverage of the document barrier between delivery and cash, the documents that have to agree before a clean invoice goes out are the proof of delivery, the bill of lading, the rate confirmation, and the accessorial charges. Reading each one perfectly and never cross-checking them is how billing stalls, factoring submissions get rejected, and disputes multiply.
What is ACT mode and how does a document agent handle the cycle?#
ACT mode is the intelligence mode where an agent closes the routine cycle and escalates only the genuine exception to a human, and a document agent is one of its clearest applications. The Mithrilis intelligence layer operates in four modes that build on each other: SEE shows you what you are missing, WATCH tells you before it happens, BENCHMARK shows you how you compare, and ACT handles it for you. ACT means agents that close the loop on the routine cycles, with humans on the exceptions, which is exactly the shape of document processing.
A document agent in ACT mode does not replace the human who handles billing. It changes what reaches that human. The agent ingests the BOL or POD, parses it, and runs the three reconciliation comparisons against the unified shipment record. When everything agrees, which on a clean lane is the large majority of loads, the agent closes the cycle: the document is filed against the shipment, the verified accessorials flow to the invoice, and no person spends a minute on it. When something disagrees, the agent does the opposite of straight-through posting. It stops, holds the invoice, and routes a structured exception to a human that names the specific conflict: this parsed detention line claims two hours, the tender allowed three, here is the gate-in and gate-out, here is the document image, please decide.
That escalation is the whole point. The human is no longer reading every POD to find the rare problem. The human sees only the problems, each one pre-assembled with the parsed value, the tendered value, and the source document linked. This is how ACT differs from the automation it is often confused with. Workflow automation posts the number and moves on, optimizing the speed of a single step. An ACT-mode agent reasons across connected data and decides whether the number can be trusted, optimizing the correctness of the outcome. The manifesto draws this line deliberately: truth lives in the union of the systems, not inside any one of them, and an agent that reads a document against that union is the only kind that can be trusted to close a cycle.
Worked example: a parsed BOL whose accessorial does not match the tender#
The clearest way to see reconciliation-first extraction is a single load where the parsed BOL and the tender disagree, and the agent catches it before the invoice goes out. Walk through it field by field.
A carrier hauls a refrigerated load from a grower in California to a distribution center in Texas. The original tender and rate confirmation are explicit: linehaul of 3,200 dollars, two hours of free time at the receiver, detention billable at 65 dollars per hour after that, no lumper reimbursement because the receiver unloads with its own crew. This is the deal, and it lives in the unified shipment record the moment the load is booked.
The driver delivers. The receiver hands over a signed BOL. The carrier's document engine reads it cleanly and pulls these lines:
Parsed from BOL image (delivery copy)
pro_number: 4471902
consignee: DC-Laredo
delivered_at: 2026-06-24 16:58
detention_hours: 4.0
detention_rate: 65.00
lumper_fee: 180.00
signature: present
Every one of those fields is read correctly. A transcription tool would push all of them onto the invoice, and the carrier would bill 3,200 linehaul plus 260 detention plus 180 lumper, total 3,640. The 180 lumper would be rejected on receipt because the tender said the receiver unloads itself, and the 4.0 detention hours would be short-paid because the customer never sees the free-time math. A clean parse just manufactured a dispute.
Now run the same document through an ACT-mode agent that reconciles against the unified shipment record:
Reconciliation against unified shipment record
detention_hours: 4.0 parsed
-> free time 2.0h (tender) + gate-in 12:58, gate-out 16:58 (ELD)
-> billable detention 2.0h x 65.00 = 130.00 (parsed claim 260.00 is 2h over)
lumper_fee: 180.00 parsed
-> tender: no lumper reimbursement (receiver unloads)
-> MISMATCH: hold, route to human with both values + BOL image
signature: present -> matches expected consignee DC-Laredo OK
The agent closes the parts that reconcile and stops on the parts that do not. Detention is corrected to the contracted two billable hours, anchored to the actual gate timestamps the ELD recorded, so the carrier bills 130 dollars of detention that is defensible because every number links to its source. The lumper line is flagged, not posted: the agent routes it to a human with the parsed 180 dollars, the tender line that says no lumper reimbursement, and the BOL image, so a person decides whether to chase the receiver, eat it, or discover the tender was wrong. The invoice that goes out is 3,200 linehaul plus 130 detention, every line reconciled, and the one genuinely ambiguous charge is resolved before billing instead of after a short-pay. That is reconciliation before invoice, not dispute after.
How does reconciliation-first extraction apply to both brokers and asset carriers?#
Reconciliation-first extraction applies to both brokers and asset carriers because both bill against documents they did not author and both lose money in the gap between what a document says and what was agreed. The document types and the deal terms differ, but the structural problem and its fix are identical: parse against the connected record, not in isolation.
For freight brokers, the documents arrive from carriers and the reconciliation protects margin on both sides. A carrier's BOL detention claim has to reconcile against what the broker can in turn bill the shipper, or the broker absorbs the spread. A POD has to confirm the delivery the broker is about to invoice the customer for. The broker sits between two sets of terms, and a parser that reads documents in isolation cannot see either set, so it cannot protect the margin that lives in the difference. An agent reading against the unified shipment record can hold an invoice the moment a carrier accessorial has no shipper-side counterpart.
For asset carriers, the documents are the carrier's own evidence and the reconciliation protects revenue capture. The detention the driver actually sat, the accessorials the lane actually incurred, the POD that proves the delivery: all of it has to be billed correctly and defensibly, against the tender and against the carrier's own telematics. ATRI's finding that detention invoices are paid less than half the time is, for a carrier, a direct revenue leak that better OCR does nothing to fix. What fixes it is reconciling the claim against the gate timestamps and the contracted free time before the invoice goes out, so the number is defensible when the customer questions it. This is the same SEE-to-ACT progression that turns a unified shipment record into recoverable margin: first see the gap, then have an agent close it.
Both audiences are also operating inside the same regulatory frame. Under FMCSA 49 CFR Part 373, motor carriers must issue receipts and bills of lading for the property they transport, and under the Carmack Amendment, 49 USC 14706, the bill of lading is the governing record of the carrier's liability for a shipment. The document is not paperwork to be filed and forgotten. It is the legal anchor of the transaction, which is exactly why parsing it against the agreement it documents, rather than transcribing it into a void, is the difference between a defensible invoice and an avoidable dispute. The American Trucking Associations and ATRI both treat this paperwork burden as a real operating cost, not a clerical afterthought, and the carriers that win the collection fight are the ones whose claims reconcile on the first pass.
What changes operationally when documents are parsed against the record instead of in isolation?#
When documents are parsed against the record instead of in isolation, the dispute moves from after the invoice to before it, and the human moves from reading everything to resolving only the exceptions. That is the operational shift, and it compounds. Every detention claim that reconciles cleanly is a claim that gets paid on the first submission instead of entering the short-pay and re-bill cycle that ATRI's collection numbers describe. Every lumper that should not have been billed is caught before it reaches a customer, so the relationship is not spent on a charge you would have had to reverse anyway.
The inspectability is what makes the speed safe. Because every parsed field links back to the source document image and to the tender field it reconciled against, the agent can close the routine cycle without a human, and the human can trust the exceptions it surfaces because each one arrives with its evidence attached. Nobody has to take the agent's word for it. The sources are visible and the comparison is shown. That is the structural promise that lets an asset carrier or a broker hand the routine billing cycle to an agent and keep their attention on the loads where something genuinely needs a decision.
None of this is faster OCR, and that is the point worth holding onto. The reading was never the bottleneck. The bottleneck was that a perfectly read document had nothing to be read against, so a clean parse and a wrong invoice were the same event. Reconciliation-first extraction puts the shipment record back in the loop, so the parsed BOL is checked against the tender it is supposed to confirm, the parsed POD is checked against the load it is supposed to close, and the accessorials are reconciled before the invoice rather than disputed after it. The win is not automation of a single workflow. It is intelligence applied to connected data, with an agent closing the cycle and a human on the exceptions.
What document automation should actually mean#
Most document automation is sold as faster reading: better extraction, cleaner handwriting recognition, fewer keystrokes. Reading the document was never the hard part. Trusting it was. A perfectly parsed bill of lading is still a clean transcription of numbers nobody has checked against the deal they belong to.
Mithrilis treats document automation as reconciliation, not transcription. Because it holds your tender, accessorials, and shipment record in one connected view, a parsed BOL or POD is read against what you actually agreed to, and the accessorial that does not match surfaces before the invoice goes out instead of after the dispute comes back.
That is the version worth having: not a faster path to a number you still have to verify, but a number that arrives already verified. See how Mithrilis reconciles every document against the load it belongs to.
Related Mithrilis capabilities
The Mithrilis platform
How connected data becomes verifiable intelligence, with every field traceable to its source.
For freight brokers
Reconcile carrier documents against both sides of the deal before the invoice goes out.
For asset carriers
Make every detention and accessorial claim defensible against the tender and the telematics.
Frequently asked questions
You parse each document against the unified shipment record it is supposed to reconcile, not in isolation. Optical character recognition reads the bill of lading or proof of delivery, then a reconciliation step compares every parsed field to the value it should confirm: the tendered rate, the contracted free time, the booked accessorials, the gate timestamps. Fields that agree close the cycle automatically. Fields that disagree are flagged for a human before the invoice goes out. The trust comes from the comparison, not from the reading.
Freight document automation should do two things, and most tools only do the first. The first is read the document, which is the solved part. The second is reconcile what was read against the deal the document confirms, which is the hard part almost everyone skips. Automation that only reads transcribes errors faithfully onto invoices. Automation that reconciles catches a mismatched accessorial or a misposted POD before it becomes a dispute, because it checks the parsed value against the tender and the operational record.
Because parsing reads a document in isolation, and a document cannot be judged in isolation. A detention line of two hours is neither right nor wrong until you compare it to the free time the tender allowed and the gate timestamps the telematics recorded. A parser with no shipment record to check against has nothing to disagree with, so it transcribes the number and posts it. The dispute comes from the missing reconciliation, not from a bad read. Fixing the parser does not fix the dispute. Adding the comparison does.
POD verification requires binding the parsed proof of delivery to the specific load it closes and checking the delivery outcome against what was tendered. Reading the signature, the delivery time, and any exceptions noted at the dock is the start. Verification is confirming the POD belongs to the right shipment, that the consignee matches the booked receiver, that refused or short freight triggers the right accessorial under the rate confirmation, and that the delivery the carrier is about to invoice actually matches the load. That requires the connected shipment record, not the document alone.
A faster OCR engine reads documents more quickly and still verifies nothing, so it produces clean parses and wrong invoices at higher speed. Reconciliation-first extraction puts the shipment record back in the loop, comparing every parsed field to the agreement and the operational data before anything reaches an invoice. The bottleneck in freight billing was never reading speed. It was that a perfectly read document had nothing to be checked against. Reconciliation, not OCR throughput, is what prevents the dispute.
ACT is the Mithrilis intelligence mode where an agent closes the routine cycle and escalates only the genuine exception to a human. For documents, an ACT-mode agent parses the BOL or POD, reconciles it against the unified shipment record, files and bills the loads that agree without a person touching them, and stops on the ones that do not. When a parsed accessorial has no matching tender line, the agent holds the invoice and routes a structured exception that names the conflict and links the source document, so the human resolves the rare problem instead of reading every document to find it.
No. They handle different documents and sit on different sides of the deal, but the structural problem and its fix are identical. Brokers reconcile carrier documents against both the carrier terms and the shipper terms to protect the margin in the spread. Asset carriers reconcile their own documents against the tender and their telematics to make every detention and accessorial claim defensible and collectable. In both cases the answer is the same: parse against the connected shipment record, not in isolation, and let an agent close the cycle while a human handles the exceptions.
Topics
Keep reading
Beyond On-Time Percentage: What a Real Carrier Scorecard Measures
Read→On-time percentage grades the past. A real carrier scorecard weighs tender acceptance, dwell, claims, POD timeliness, and performance drift, per lane and per facility.
Customer Concentration Risk: What a Freight Brokerage Loses When Its Biggest Customer Leaves
Read→Revenue share is the wrong way to size customer concentration. Measure the top account's share of true profit, plus the carriers, lanes, and people that leave with it.
The Quotes You Shouldn't Be Winning: Margin-Aware Pricing for Freight Brokers
Read→Win rate and quote speed are vanity metrics. Margin-aware quoting prices each load against what the lane, customer, and carrier actually returned on a true-margin basis, and walks the quotes you would regret winning.