WooCommerce shipment tracking: what actually breaks
The failure modes that show up once you have real parcels moving — and the settings that stop them from becoming support tickets.
“Add a tracking number to the order” sounds like a one-field problem. It is not, once a courier is actually involved. Here is what tends to go wrong, roughly in the order stores discover it.
The status never updates
A tracking number gets attached at fulfilment and then nothing changes until a customer emails asking where their parcel is. Static tracking fields do not poll the courier: someone has to open the order and check manually, or the store needs something polling the courier’s API on a schedule and writing the result back onto the order. Without that loop, “tracking” is really just a link, not a status.
One courier account, several courier brands
In the Baltics in particular, a single order can realistically move through Omniva, Venipak or LP Express depending on which locker the customer picked at checkout. A tracker built around one courier’s API silently stops working the moment an order ships with a different one. The fix is detecting the courier from the tracking number format or the shipping method used at checkout, not assuming.
Event codes that do not mean what you think
Courier APIs return their own internal status codes and keywords, and they are not consistent between couriers or even between a courier’s domestic and international services. Mapping “in transit”, “out for delivery”, “delivered” and “returned to sender” correctly for each courier is most of the actual engineering work. Get it wrong and customers see “Preparing” on a parcel that already arrived.
Rate limits and polling frequency
Polling every order every minute looks responsive until the courier API starts rejecting requests. A sane refresh interval (we default to checking active shipments a few times a day, with a manual “refresh now” for support situations) keeps the store well inside any reasonable rate limit while still catching status changes the same day they happen.
What to check in your own store
- Does your tracking status actually change on its own, or only when someone opens the order?
- If you ship with more than one courier, is each one mapped correctly, or is only your main courier actually working?
- Do “delivered” and “returned” reliably show up as different statuses, not both as a generic “done”?
This is the exact list we built Shipment Tracker to answer for our own store first: Omniva and Venipak natively, plus a wider carrier database for everything else.