Location and Observation Platform (LOOP)

Upgrade your mobile app with LOOP powered location insights. Automatically detect trips, visited locations and other insights with our battery efficient Android and iPhone SDK's.

Have a question? We're here to help.
Experience LOOP with our sample apps

Drive & Mileage Tracker

This sample app uses LOOP to automatically detect journeys you take. Your mode of transport, driving path, travel time and distance are calculated for every trip you take. Download the app or fork it on Github.

Location Detection

This sample app automatically detects your home and work, showing you the gps coordinates and past visits. You can create triggers, like sending an SMS, based on location or activity. Download the app (coming soon) or fork it on Github.

SDK and platform features

Integrate the LOOP SDK into your iOS or Android app to automatically generate location insights and react to changes in your user's context. Combine LOOP insights with your own data to delight your users with a personalized app experience.
Geofencing
React to changes in location and activity. Receive a callback when users enter or exit a location or register changes in activity.
Trips
Auto detect trips taken. Receive details including path, time, distance, and locale. Supports various types of trips including driving, walking, or biking.
Location history
Remember your user's location history, and save details on places they have been.
Home and Work
Anticipate what users want, and change your app based on context. Auto detect your user's home and work.
Places of Interest (coming soon)
Suggest places of interest near your users (e.g. nearby cafe) or categorize places they visit (e.g. their favorite gym).
Parking (coming soon)
Detect where your users have parked so they have one less thing to worry about.

Powerful features. Easy to integrate.

Realtime Analytics

Manage your teams and usage from a single dashboard. Get a clear picture of how many users are sending signals and receiving location insights.

iOS and Android Support

Native LOOP SDK's for both iPhone and Android.

@Override
public void onKnownLocationEntered(KnownLocation location) {
    if (knownLocation.hasLabels()){
        Label label = knownLocation.labels.getLabels().get(0);
        if (label.name.equals("home")){
            // The location entered is home
        }
        if (label.name.equals("work")){
            // The location entered is work
        }
    }
}
func onLocationEnter(visit: CLVisit, location: LoopLocation) {
    location.labels.forEach { label in
        if (label.name == "home") {
            print("Home score %i", label.score)
        }
        if (label.name == "work") {
            print("Work score %i", label.score)
        }
    }
    // array of all previous visits. most recently visited is last.
    location.visits 
    print("Latitude %f, Longitude %f", location.latitude, location.longitude);
}
Rich Insights

Detailed trip and location responses. Focus on growing your app, and we’ll take care of delivering rich location insights.

[{
    "entityId": "0a46ec10-6d56-40a2-b00f-f0145f950f60",
    "startedAt": "2016-06-12T17:10:34.436-07:00",
    "endLocale": {
    "region": "Washington",
    "county": "King",
    "locality": "Seattle",
    "country": "United States"
    },
    "path": [
    {
        "longDegrees": -122.32427428,
        "latDegrees": 47.68067114,
        "accuracyMeters": 9,
        "timeAt": "2016-06-12T17:10:34.436-07:00",
        "altitudeMeters": 68,
        "transportMode": "driving"
    },
    {
        "longDegrees": -122.33581851,
        "latDegrees": 47.68504651,
        "accuracyMeters": 8,
        "timeAt": "2016-06-12T17:13:46.362-07:00",
        "altitudeMeters": -4,
        "transportMode": "driving"
    }
    ],
    "endedAt": "2016-06-12T17:13:46.362-07:00",
    "distanceTraveledInKilometers": 4.661534746022072,
    "startLocale": {
    "region": "Washington",
    "county": "King",
    "locality": "Seattle",
    "country": "United States"
    },
    "transportMode": "driving",
    "userId": "e280b177-9692-4b67-9558-adf7977fdd96",
    "deviceId": null,
    "updatedAt": "2016-06-15T17:50:31.476Z",
    "createdAt": "2016-06-15T17:50:31.476Z"
}]
[{
    "entityId": "0101f1c2-e770-4e5b-b454-0a5c0e8119d7",
    "visits": [
      {
        "startTime": "2016-03-27T08:50:27.830-07:00",
        "endTime": "2016-03-27T16:30:27.830-07:00"
      }
    ],
    "labels": [
      {
        "name": "work",
        "score": 1
      }
    ],
    "latDegrees": 47.679515,
    "longDegrees": -122.327404,
    "radiusMeters": 150,
    "lastEntered": "2016-03-27T08:50:27.830-07:00",
    "userId": "e280b177-9692-4b67-9558-adf7977fdd96",
    "deviceId": null,
    "updatedAt": "2016-06-15T17:50:30.702Z",
    "createdAt": "2016-06-15T17:50:30.702Z"
}]