Open shipments arrived as a spreadsheet attached to a recurring email. Someone opened it, and for anything that looked late, opened the carrier's website and pasted in a tracking number.
Three failure modes fell out of that, and all three cost real money. Freight put on carrier hold looked identical to freight in normal transit, so nobody called until it was days late. Freight delivered to the wrong city was discovered when it didn't show up. And completed lines never fell off the report — the source system kept every line of an order visible while any line stayed open — so the list grew until people stopped trusting it.
Direct integrations with the major carriers, refreshed on a cycle, writing status and revised arrival dates straight onto the open shipment record. One carrier had no API at all — that lane is handled by driving their portal in a real browser session, bounded and retried so a slow website can never stall the rest of the pipeline, bounded and retried so a slow website can never stall the rest of the pipeline.
The integration was the easy half. The half that changed the operation was giving every shipment an owner.
- Carrier hold language detected and parked in its own queue, then released automatically when the carrier resumes
- Delivery to an unexpected destination flagged for human action — outranking 'delivered', because wrong-city freight still needs work
- Shipments past their transit allowance swept into a research queue
- Receipt quantities reconciled against the warehouse system, with mismatches escalated only after a dwell period
Getting the details right
Automation that overwrites human judgment gets switched off within a week. Every automated update is scoped so it can only act on shipments still in an early state — once a person has advanced something, the machine leaves it alone.
The same care applies to bad data. A failed carrier lookup returns text, and text is easy to mistake for a status. Placeholder and error responses are explicitly excluded from ever being read as evidence that a hold was released, and a blank destination is never treated as a wrong destination. Every field edit is written to a change log with the old value, the new value, the user and the time.
The dashboard answers the questions the spreadsheet couldn't: what is overdue, what is expected today, what is stuck and whose problem it is. Exceptions surface on their own instead of waiting to be found, and the report shrinks when work is done rather than growing forever.