Most order systems I have looked at store a tracking URL on the shipment: a full link, built at order creation, pasted into the confirmation email and the order page.
That link is a liability, and the failure mode is quiet. Here is the one that bit us this week.
The failure
Toll Group sold its Global Express division to Allegro Funds, and the business has traded as Team Global Express since 2022. The domestic parcel arm is still IPEC. The customer portal moved from MyToll to myteamge.com.
Checked on 3 October 2026: mytoll.com and www.mytoll.com return no page at all. Not a 404 page, not a redirect - the connection does not complete.
So every order record that baked in a MyToll URL now ships a dead link to the customer. The parcel is fine. The number was never reissued and still resolves on the new portal. The only thing that broke is a string written down two years ago.
Why storing the URL is the bug
A tracking URL is derived data. It is a function of (carrier, number) evaluated at one point in time. Storing it freezes that evaluation forever, and the inputs keep moving:
- Rebrands and acquisitions. Toll Global Express to Team Global Express (2022). CIRRO E-Commerce was founded as PARCLL, renamed April 2023, acquired by GOFO February 2026.
- Last-mile handover. A cross-border parcel is handed to a domestic carrier near the end, so the right link to show changes mid-journey.
- Portal path changes. Carriers restructure query params without warning, and a stored URL with the old param silently renders an empty result.
Store the facts, derive the view:
// not this
shipment.tracking_url = "https://www.mytoll.com/?searchQuery=" + number
// this
shipment.carrier_code = "TEAM_GLOBAL_EXPRESS" // mutable
shipment.tracking_number = "64................001" // immutable
// at render time:
trackingUrl(shipment.carrier_code, shipment.tracking_number)
Now a rebrand is a one-line change in a lookup table, not a backfill across every historical order.
Carrier is a mutable field, not a constant
The second half of the same bug: most schemas write carrier once, at order creation, from the shipping method the customer picked. It then never changes, even when the parcel changes hands.
Make it updatable, and normalise it. One Australian shipment can reach you labelled Toll, Toll IPEC, Toll Road Express or Team Global Express, depending on which system passed the data along. If you report on carrier performance without collapsing those into one key, you are reporting on four carriers that do not exist.
TOLL | TOLL IPEC | TOLL ROAD EXPRESS | TEAM GLOBAL EXPRESS -> TEAM_GLOBAL_EXPRESS
PARCLL | CIRRO E-COMMERCE -> CIRRO_ECOMMERCE
Keep the raw string the partner sent you in a separate column. You will want it the first time a new spelling appears.
Three things worth doing today
- Grep your templates, help articles and support macros for carrier names, not just URLs. The name is what a customer types into a search engine when your link fails, and a dead brand name sends them nowhere.
- Add a cheap liveness check on the carrier URLs you emit. A weekly job that requests each distinct base URL and alerts on connection failure would have caught MyToll the week it went dark. Do not check for HTTP 200 only - a carrier that serves a styled "no results" page at 200 is also broken for your customer.
- Do not derive a carrier from number length alone. Team Global Express numbers are 22 digits beginning 64: a four-digit prefix, a thirteen-digit consignment number, then a three-digit item sequence. Several US numeric labels are also 20-22 digits. Anchor on prefix and length together, and measure a rule against real data before you ship it.
The customer-facing half
If the link does fail, the person holding the parcel has one workable move: search the brand together with "renamed" or "acquired", or paste the number into a universal tracker that works the carrier out from the number itself rather than from a stored name. We build one - 24hTrack is a free package tracker for 3,200+ carriers; paste any tracking number, the carrier is detected automatically, no sign-up. A rename never invalidates the number, so it still resolves.
Written by the team at 24hTrack. Longer walkthrough of the Toll case, with the dates and the number format: https://youtu.be/kbCsSWW4d6k
Top comments (0)