using System.Collections.Generic;
using Geotab.Checkmate.ObjectModel;
public static void Main()
var geotabService = new GeotabService();
Console.WriteLine("Start Time: {0}", DateTime.Now.ToString("hh:mm:ss tt"));
var vehicleLocations = geotabService.GetVehicleLocations();
Console.WriteLine(" #{0}: {1}", counter++, vehicleLocations.Count);
Console.WriteLine("End Time: {0}", DateTime.Now.ToString("hh:mm:ss tt"));
System.Threading.Thread.Sleep(2000);
public class GeotabService
private readonly API _api;
private long? _version = null;
var username = "-- change me --";
var password = "-- change me --";
var database = "-- change me --";
_api = new API(username, password, null, database);
private void Authenticate()
if (!string.IsNullOrWhiteSpace(_api?.LoginResult?.Path))
catch (InvalidUserException ex)
throw new Exception("Invalid login credentails for Geotab.", ex);
catch (DbUnavailableException ex)
throw new Exception("The Geotab database is unavailable.", ex);
throw new Exception("Geotab failed to authenticate.", ex);
public List<VehicleLocation> GetVehicleLocations()
search = new LogRecordSearch
FromDate = new DateTime(DateTime.Now.Year, 1, 1)
fromVersion = _version.Value
var logRecords = _api.Call<FeedResult<LogRecord>>("GetFeed", typeof(LogRecord), filter);
_version = logRecords.ToVersion;
var vehicleLocations = logRecords.Data.Select(logRecord => new VehicleLocation()
Imei = logRecord.Device?.Id?.ToString(),
Latitude = (float)logRecord.Latitude,
Longitude = (float)logRecord.Longitude
return vehicleLocations.ToList();
public class VehicleLocation
public string Imei { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }