Track orders with Geotags
Introduction
Geotags help you tag the geolocation of work done by drivers on a timeline. As drivers move about performing actions in the app, the time and location of those actions get geotagged along with associated metadata. Geotags track deviations from expectations and help you take action in real-time through application workflows. Geotags are organized chronologically in the driver timeline and aggregated for a group of drivers. Deviations are classified as driver or address issue, and pinged back to your servers for updating the address book.
With Geotags, your operations can track that things are happening at the right time and place as expected, and proactively improve when they don’t. Scoreboards and insights help understand deviations, routes, durations and distances by cohorts of ops groups, type of work, region and more. Simply add the SDK to your driver app, call the geotag method with expected location and metadata, and unlock the power of Geotags.
The figure below provides an overview of how the Geotags feature works and the guide walks you through how you can implement it:
Create Geotags
Use the geotags SDK method to tag the geolocation of actions in the user's app. HyperTrack SDK provides Geotags on iOS and Android.
Every important app action that is performed by your app user can be captured as a geotag with a payload that represents it.
HyperTrack platform will process geotags sent from your mobile app in the cloud and process them in real-time with analysis for location accuracy.
Additionally, even if your app user's device is temporarily disconnected due to a network loss, geotags generated by your users will be captured offline and sent to HyperTrack once connection is restored.
Geotags are generated in the mobile app through the HyperTrack SDK. Your app is the source of truth for geotagging.
Payload structure
Geotag payload can be a JSON string describing a note your app user may make.
For example, to represent a customer visit, you may want to create this payload as shown below:
{
"product_id": "Kent Ace",
"action": "sold",
"quantity": 5,
"customer_name": "Amit K"
}
As you create a geotag in your app, you do not need to worry about getting location and timing to compose customer event marker payload. HyperTrack will process your geotag payload for location and provide you with distance tracking between geotags.
Examples
The examples below demonstrate how to accomplish this for both iOS and Android with the example payload as discussed:
- Java/Android
- Kotlin/Android
- Swift/iOS
- ObjectiveC/iOS
// create new geotag payload
Map<String,Object> payload = new HashMap<>();
// add event details from the example above
payload.put("product_id", "Kent Ace");
payload.put("action", "sold");
payload.put("quantity", 5);
payload.put("customer name", "Amit K");
sdkInstance.addGeotag(payload);
// create new geotag payload
Map<String,Object> payload = new HashMap<>();
// add event details from the example above
payload.put("product_id", "Kent Ace");
payload.put("action", "sold");
payload.put("quantity", 5);
payload.put("customer_name", "Amit K");
sdkInstance.addGeotag(payload);
if let custom_event_marker = HyperTrack.Metadata(rawValue: [
"product_id": "Kent Ace",
"action": "sold",
"quantity": 5,
"customer_name": "Amit K"]) {
hyperTrack.addGeotag(custom_event_marker)
} else {
// custom_event_marker can't be represented in JSON
}
// add event details from the example above
NSDictionary *dictionary = @{@"product_id": @"Kent Ace",
@"action": @"sold",
@"quantity": @5,
@"customer_name": @"Amit K"};
HTMetadata *custom_event_marker = [[HTMetadata alloc] initWithDictionary:dictionary];
if (custom_event_marker != nil) {
[self.hyperTrack addGeotag:custom_event_marker];
} else {
// custom_event_marker can't be represented in JSON
}
Set expected location
Optionally, you can specify an expected location longitude and latitude for a geotag.
This will allow you to measure deviation between actual and expected locations, and measure address accuracy and app user behavior.
In the Dashboard, you can see a geotag with an expected location as described in the next section below.
Please see examples below:
- Java/Android
- Kotlin/Android
// create new geotag payload
Map<String,Object> payload = new HashMap<>();
// add event details from the example above
payload.put("product_id", "Kent Ace");
payload.put("action", "sold");
payload.put("quantity", 5);
payload.put("customer name", "Amit K");
Location expectedLocation = new Location("any");
expectedLocation.setLatitude(35.0476912);
expectedLocation.setLongitude(-90.0260493);
sdkInstance.addGeotag(payload, expectedLocation);
// create new geotag payload
Map<String,Object> payload = new HashMap<>();
// add event details from the example above
payload.put("product_id", "Kent Ace");
payload.put("action", "sold");
payload.put("quantity", 5);
payload.put("customer_name", "Amit K");
val expectedLocation = Location("any")
expectedLocation.longitude = -90.0260493
expectedLocation.latitude = 35.0476912
sdkInstance.addGeotag(payload, expectedLocation);
Consume Geotags
HyperTrack ops view will display geotags in app user timelines. These are fully embeddable views that you can integrate directly into your ops dashboard.
In the map view, once you select the device you are interested in the left column, please click on the pop-up icon next to it to get to a single device view window.
Each geotag is denoted as a blue dotted marker in both your device history timeline as well as on the map itself. Once you zoom in and click on the blue dot you are interested in, you can see the geotags with sales rep visit notes. Each blue dot represents a geotag your app user made from the app by sending a geotag to HyperTrack.
This view demonstrates how your a geotag will be displayed by HyperTrack after it's delivered from your user's mobile app. HyperTrack also provides location and timestamp in addition to the payload data from the example above.
If your app sends a geotag with an expected location, you can view the geotagged location and deviation from expected location as shown in the image below.
Map view
Geotags generated by your app users are aggregated and presented in Geotags map view in your ops view. Geotags map view provides an aggregate of the total number of geotags created for selected days. The view is organized by day and timezone.

Geotags can be sorted by creation time (time
), route duration
, route distance
from previous geotag, and deviation
from expected location.
Geotags may be filtered by geotag metadata.
Scoreboard
Geotags generated by your app users can be viewed via Scoreboard in HyperTrack Dashboard as shown in the screenshot below. The Scoreboard charts show geotag counts, average route time and distances.



Insights
Geotags generated by your app users are aggregated and presented in Insights.
Geotags Insights provide aggregates of the geotags that have been logged by your app users in the selected time range. You can also see your geotags’ metadata so that you can sort and make groups using these values. Group by geotag metadata to slice your data by the attributes that segment the key moments of your day-to-day operations. An additional group-by tag of ‘App User’ is provided to slice your data by user.

Webhooks
If your app business workflow requires real-time integration of app user's notes as they take place, you may use HyperTrack webhooks feature to get this information.
Please review an example payload as shown below.
You can see that not only you get back payload data your app user generated from the mobile app, but also route_to
data which contain distance
in meters, duration
in seconds, start_location
from the previous geotag event for which distance
and duration
is generated, as well as recorded_at
timestamp which captures the time this geotag was received from your user's app.
Plus, you get location
that HyperTrack captures for you when your app user generates a note in the app.
{
"created_at": "2019-07-01T14:01:00.000000Z",
"recorded_at": "2019-07-01T14:00:00.000000Z",
"data": {
"metadata": {
"product_id": "Kent Ace",
"action": "sold",
"quantity": 5,
"customer_name": "Amit K"
},
"route_to":{
"distance": 238,
"duration": 63,
"start_location": {
"geometry": {
"coordinates": [
-6.271,
57.6398983
],
"type": "Point"
},
"recorded_at": "2019-07-01T13:52:08.213000Z"
}
}
},
"location": {
"type": "Point",
"coordinates": [
-6.2755,
57.6398983
]
},
"device_id": "00112233-4455-6677-8899-AABBCCDDEEFF",
"type": "geotag",
"version": "2.0.0"
}
Questions?
If you have questions or comments on any of the topics above, please do not hesitate to contact us.