A single cross-border shipment passed through this company's back office as thirty-odd documents — commercial invoices, packing lists, certificates of origin, delivery orders, arrival notices — and most of the figures on them were typed by hand into three separate systems, usually more than once. Multiply that by the several hundred consignments the operations desk handled each month, and it becomes clear where the working day actually went.
We were brought in to review the back office of a regional logistics and freight-forwarding company of roughly 150 staff. Nothing was broken. Growth had simply outrun the paperwork, and the team had absorbed the difference in overtime. The brief was never to replace people; it was to stop asking them to act as human OCR.
The situation
Coordinators spent much of their day reading PDFs and scanned attachments that arrived by email from carriers, shippers, and customs brokers, then re-keying the same reference numbers, weights, HS codes, and values into an ERP, a customs portal, and a set of tracking spreadsheets. The data existed; it just had to be copied, and copied accurately, because a single wrong digit on a customs field could hold a container at the port. The predictable results were long hours at month-end, invoicing that trailed the actual movement of goods by days, and a quiet, steady rate of correction work that nobody had ever measured.
Why it was hard
Document automation looks trivial in a demo and is unforgiving in production. The formats were inconsistent — every carrier and supplier had its own layout, and many documents were photographed rather than scanned. Accuracy was not a nice-to-have; customs and financial records leave no room for a plausible-looking wrong number. And the team, reasonably, did not trust a black box to touch regulated filings. The real difficulty was never the routine document that reads cleanly. It was the exception — the smudged scan, the missing field, the unit that should have been kilograms — and any honest design has to start there.
How we approached it
- Map before automating. We followed a dozen real shipments end to end and timed each hand-off, so the baseline was measured, not guessed.
- One document type first. We began with the highest-volume, most standardized form rather than trying to swallow everything at once.
- Confidence, not blanket trust. Every extracted field carried a confidence score; only high-confidence data flowed through automatically, and the rest was routed to a person.
- Keep the ERP as the system of record. We integrated through its API rather than replacing anything the business already relied on.
What we built
We stood up an ingestion pipeline that pulled documents straight from a shared mailbox, classified them by type, and passed them to an extraction layer combining OCR with a language model tuned to the fields that mattered. A validation rules engine checked the output against what the business already knew — cross-referencing shipment numbers, flagging weights outside sane ranges, catching currency mismatches. Anything above the confidence threshold was written back to the ERP automatically; anything below it landed in a review queue, where a coordinator confirmed or corrected a pre-filled form in seconds instead of typing from scratch. We rolled it out behind feature flags, one document type and one team at a time, and every correction a reviewer made was fed back to sharpen the next month's extraction.
The outcome
| Metric | Before | After |
|---|---|---|
| Hands-on data entry per shipment | ~25–30 minutes | Under 10 minutes |
| Documents re-keyed by hand | Nearly all | Roughly a third (exceptions only) |
| Lag from shipment to invoice | Several days | About a day |
| Entry-error corrections | Baseline | Down by roughly two-thirds |
| Month-end overtime on the desk | Routine | Occasional |
Taken together, the manual back-office load on the operations desk fell by about half — enough that the same team absorbed a growing book of business without new hires, and coordinators spent their time on exceptions and customers rather than transcription. We are deliberately citing ranges: the numbers moved week to week, and the honest story is a durable halving of routine effort, not a single headline figure.
What made the difference
Three lessons travel well beyond this client. First, automate the predictable majority and design deliberately for the exceptions; the value is in how gracefully the system handles the document it cannot read, not the one it can. Second, confidence thresholds with a human review queue earn trust far faster than full automation — people accepted the tool because it asked for help when it was unsure. Third, integrate with the systems a business already runs on rather than replacing them; the ERP stayed the source of truth, which kept the change small enough to actually adopt.
The pipeline now handles a widening set of document types on its own, and the next conversation is a natural one: letting the same foundation surface the patterns hiding in all that structured data.