How to Build an Order Tracking System for Your Customers
Keeping customers informed of the delivery status of their orders is a common component of most major ecommerce platforms. You see this in action when you order something from Amazon and get an email with links to track your shipment. For many small online businesses, using a platform like WooCommerce or Shopify, tracking numbers are attached to orders automatically as part of the software package or with additional plugins.
Unfortunately, most custom order management applications and plenty of off the shelf products don’t include integration with your shipping company’s data. In cases like that, there is no easy way to keep your customers in the loop of how close their orders are to reaching them without a lot of manual data entry or hand holding with phone calls and emails. Tasks like that are obvious drains on employee time and resources.
Instead of making staff look up information for your customers you should aim to provide that data to them automatically. Thankfully writing a small application to handle all of this work for you is a pretty simple task.
I’m going to lay out the steps I take for including order tracking information with my own client’s order management projects. My clients use any of these three freight compaines so I have solutions for each one in this post:
But before we get to the process of drawing tracking status from the freight companies we need to figure out how to associate customer orders with their corresponding tracking numbers.
Connecting Orders with Tracking Numbers
For my clients, I typically create additional modules in their order management applications that let them associate tracking numbers they receive from their freight companies with individual order numbers or entire packing slips their system has generated.
For example, one of the companies I work with uses a fully custom Intranet application to manage their orders. At the end of the day, the workers in the shipping department go to a special form I created that is preloaded with all of the orders they shipped that day by packing slip. They choose the freight company that was responsible for the orders on each packing slip and enter in the tracking number they were issued.
It looks something like this:
Once they save that form all of the orders on the chosen packing slips are tied to the tracking numbers they entered. Now because this client ships palettes full of orders every day we went with this packing slip approach. This concept can just as easily be applied to individual orders as well; the method would be the same. This whole process only takes a few minutes each day but the amount of time it saves in the long run is exponentially greater.
Making decisions like that is easy when you are in total control of the software but if you find yourself stuck with a third-party vendor’s program that you can’t modify there are still options. It wouldn’t take much to create a brand new application, that runs independently, that would handle basic data entry like the screenshot example above and then maintain the next steps in the process as well. You might not get integration as tightly woven together as you want but you would still have a way to better server your customers order tracking needs.
Once we have the orders tied to individual tracking numbers we have all sorts of options. We can simply email customers with their order numbers and corresponding tracking numbers and be done with it. Or, if we want to go a little further, we can start monitoring those tracking numbers ourselves to give near real-time delivery updates to your customers.
This takes a little bit of extra work. Let’s go over how to monitor the status of tracking numbers for the three freight carriers I’m the most familiar with.
Monitoring UPS Tracking Numbers
The first step in looking up UPS tracking numbers is to create a UPS.com profile. You can learn more about the steps involved in doing this at the UPS Developer Kit page on their site. You will need to create a profile and request an access key in order to start pulling data out of their system.
Once you finally have everything setup properly from the administration side getting tracking number statuses is pretty simple. You just make a basic XML request, like the one below, and send it to the UPS tracking URL (which should be provided to you in the API documentation).
<AccessRequest xml:lang='en-US'> <AccessLicenseNumber>YOUR_ACCESS_KEY</AccessLicenseNumber> <UserId>YOUR_USER_ID</UserId> <Password>YOUR_PASSWORD</Password> </AccessRequest> <TrackRequest> <Request> <TransactionReference> <XpciVersion>1.0</XpciVersion> </TransactionReference> <RequestAction>Track</RequestAction> </Request> <TrackingNumber>YOUR_TRACKING_NUMBER</TrackingNumber> </TrackRequest>
If you did everything correctly and your tracking number is valid you’ll get an XML response back that will look something like this:
<TrackResponse> <Shipment> <Service> <Code>003</Code> <Description>UPS GROUND</Description> </Service> <PickupDate>20180207</PickupDate> <Package> <TrackingNumber>1Z1111111111111111</TrackingNumber> <DeliveryIndicator>N</DeliveryIndicator> <Activity> <ActivityLocation> <Address> <City>LOS ANGELES</City> <StateProvinceCode>CA</StateProvinceCode> <PostalCode>90023</PostalCode> <CountryCode>US</CountryCode> </Address> <Code>AI</Code> <Description>DOCK</Description> <SignedForByName>MARK PRICE</SignedForByName> </ActivityLocation> <Status> <StatusType> <Code>D</Code> <Description>DELIVERED</Description> </StatusType> <StatusCode> <Code>9E</Code> </StatusCode> </Status> <Date>20180213</Date> <Time>141100</Time> </Activity> </Package> </Shipment> </TrackResponse>
I’ve trimmed some parts out of that XML example above to get to the good stuff so what you get back might be slightly different. You’ll also see different responses based on the delivery status as well. This example is for a package that has reached it’s final destination and it tells us the delivery address, who signed for the package and what date and time the delivery happened.
Monitoring XPO Logistics Tracking Numbers
XPO Logistics has a similar XML-based API as UPS. You’ll need to create an account with them and then send your username, password and a simple XML request like the following to get back details on a given tracking number:
<ShipmentStatusRequest testmode="N"> <CustRefNbr>111-111111</CustRefNbr> <ShipmentStatusRequest>
A typical XPO response for a submitted tracking number will look like this:
<PRONmbr>111111111</PRONmbr> <Status> <StatusCode>23</StatusCode> <StatusMessage>Delivered<StatusMessage> </Status> <PickupDate>2/9/2018</PickupDate> <PickupAfterHours>N</PickupAfterHours> <DeliveredDate>2/12/2018</DeliveredDate> <DeliverySignature>J Gronas</DeliverySignature> <DeliverySignatureDate>2018-2-12T12:23</DeliverySignatureDate>
I’ve cleaned up a lot from this example response as well to get to the meat of what you really need. XPO tells you delivery times and details on the person who received the package just like UPS.
Monitor Holland Freight Tracking Numbers
Holland offers the most straight forward web services of the three freight companies I’m reviewing in this post. To get back tracking number data from Holland you submit a very simple HTTP request like so:
The typical XML response you’ll get back from Holland will be similar to this:
<TrackDetailResponse> <TrackDetail> <PRONUMBER>11111111111</PRONUMBER> <PONUMBER>111111</PONUMBER> <CURRENTSTATUS>Delivered Clear 12/11/17 at 11:29</CURRENTSTATUS> <PICKUPDATE>12/08/2017</PICKUPDATE> <STANDARDDELIVERYDATE>12/11/2017</STANDARDDELIVERYDATE> <SERVICE_TYPE>REGIONAL_DELIVERY</SERVICE_TYPE> <SIGNATURE>FIDEL</SIGNATURE> </TrackDetail> </TrackDetailResponse>
Holland’s API returns the same data we need as the rest but is just so much easier to use than the others. There is no account necessary or documentation to work your way through. If you use Holland as your main shipping company you can get customer order tracking up and running in very little time.
Pulling It All Together
Once you have all of this tracking data stored in a database the next step is deciding how to use it in the most effective way possible.
My typical approach is to integrate it throughout the order management system in reports, order lookups and anywhere the current whereabouts of an order would be useful to staff. Again, this is only possible when I’m the one directly responsible for the order management system in question so with third-party software you’ll have to get more creative with systems and software running adjacent to your main package.
For one of my clients I went a step further and built a customer portal completely from scratch. This lets my client’s customers log in to a basic web application and monitor order statuses on their own through a search interface. The aim is to cut down on the amount of phone calls and emails from customers asking where their orders are in the production and shipping process.
You can do the same thing for your customers as well. The heaving lifting to get to that point is the order and tracking number integration and monitoring the delivery statuses on a regular basis until orders are finally delivered.