Logging GPS Tracks With a Bad Elf GPS Pro+

GPS Pro+ device in the center compartment of a car

The Bad Elf GPS Pro+ is a small device which can record GPS location data1 and export it via Bluetooth to a smartphone or via USB to a computer. This makes it a good option for logging my driving data, and I’ve been using it to do so since early 2022. This tutorial will give you the basics of using a GPS Pro+ for driving logs, including some lessons I’ve learned from using it.

Basic Operation

When you turn the GPS Pro+ on, it will automatically search for and lock onto satellites; once it does so, you’re ready to record. Pressing the GPS button for three seconds will let you start logging; another three-second press will stop the logging.

To download tracks via a smartphone, pair the GPS Pro+ with Bluetooth. The Bad Elf GPS app will let you download GPS tracks (a.k.a. trips) from your paired device.

Once you’ve downloaded the trips to the Bad Elf App, the Edit menu will let you Select All trips. From there, you can use the share icon to send KML files (Google Earth/Maps) or GPX files (other mapping software) via email, or to a cloud drive service such as Dropbox or OneDrive.

(Of course, you can also view and share each trip individually.)

If you’d prefer to download via PC, you can use the USB mini cable that came with the GPS Pro+ to connect it to your computer. The GPS Pro+ will go into a data transfer mode, and will convert the internal data to a GPX or KML format internally before showing up to the PC as a mounted drive, from which you can then download the GPX or KML files.

From there, you can use the GPX or KML files to create maps.

Automatic Logging

While it’s certainly possible to start and stop the GPS Pro+ manually, it’s easy to forget to start or stop the device; you’re most likely going to want to make the logging start and stop automatically. Fortunately, the GPS Pro+ has a lot of configuration settings that allow for this sort of automation.

These settings can be changed via the Bad Elf GPS app; while connected via Bluetooth, click on the device icon just below the speed and elevation on the app’s main screen. This brings up a Product Details screen, with a number of settings categories listed:

Note that because you’re changing the settings via a Bluetooth connection, it may be a second or two before the setting “takes.” Be patient when changing the settings.

There are two main ways to automate logging: logging with power, and logging with motion. For reasons I’ll discuss below, I’d recommend logging with motion.

Logging with Power

Before the Bad Elf, I used Garmin automotive GPSes to log my driving data. Their logging was automatic—they’d turn on when they started getting power from the car, record while they were on, and turn off shortly after losing power from the car. The Bad Elf allows a similar configuration: it can be set to turn on when it receives external power, to record while it has external power, and to turn itself off after a certain number of minutes.

To configure your device for logging with power:

  1. Under Power Settings, set Auto-on with USB power to Yes. If the device is off, this tells the device to turn itself on when it detects that it’s connected to power.
  2. Under Power Settings, set Auto-off when Idle to something other than Never. (I used 30 minutes, so the device wouldn’t turn off if I was only out of the car for a short time.) This won’t affect the recording; it just makes sure the device turns itself off to save battery if it’s not logging and not powered.
  3. Under Datalogger Settings, set Auto-logging to With External Power. This tells the device to start recording when it detects power, and to stop recording if it loses power for ten consecutive seconds (so very brief power interruptions won’t stop the recording).

That configuration worked reasonably well in my own car, but I started running into problems when I tried to use it with rental cars.

Effectively, car accessory power isn’t always a reliable signal for recording. It was less of an issue with the Garmin, which was very obvious if it was powered on—it was always mounted in view of the driver, and it made an alert sound if it lost power. But for the Bad Elf, which is a small silent device that I typically put in a compartment somewhere, it was very easy for it to lose power without me knowing.

Logging with Motion

The Bad Elf also has an option to pause recording if the device is moving below a certain speed threshold. By turning this on, the device can be left running all day without creating huge data files, since it’s only capturing data while the car is moving.

This worked well for my rental car use case; I could charge the GPS Pro+ overnight in my hotel room, start it once at the beginning of the day, leave it recording in my rental car on battery power all day, and stop it once at the end of the day. Best of all, I didn’t have to rely on rental car power or manage yet another power cable in the car.

To configure the device for logging with motion, under Datalogger Settings, change the Smart Filter setting. This changes the speed below which points simply aren’t recorded, and there are a few options:

Setting Threshold
Disabled record all points
Walking over 1mph/1.6kph
Cycling over 4mph/6.5kph
Driving over 10mph/16kph
Flying over 50mph/80kph

Although there is a Driving option, I wouldn’t recommend it. After using it for a few days, I realized that a lot of low-speed navigation of parking lots was below 10 mph, leaving relatively large gaps in my driving data when I parked. Cycling seems to be a good compromise; the threshold is low enough to capture even low-speed driving, but still high enough that if I accidentally forget to stop logging before leaving the car with the GPS Pro+ in my pocket, it doesn’t record my walk back to the hotel room.

One thing I did have to consider was that doing it this way left me one long track for the entire day, where I preferred to have a track for each individual car trip I took. This isn’t a dealbreaker (and it may not be a concern at all for you), but I did end up writing a script which would split up my recorded tracks wherever there was a time gap of at least five minutes.

Simplifying Tracks

When asked to record, the Bad Elf GPS Pro+ records trackpoints at a consistent frequency (by default, one point per second). This is good for things like making heatmaps2 where the number of points over time is important. However, for just putting lines of driving tracks on a map, it results in a lot of extra points. Long straight stretches of road don’t need a lot of points to define them, but curves do need a lot of points to look smooth.

Animation showing a track with one point per second, and the same track with fewer points on straight portions of the track.

Simplifying a track by removing extra points from straight portions of the track

Since I’m storing years of driving data and tens of thousands of tracks, my main driving log map benefits from removing these extra points to keep the size of each track small. I wrote a simplification script to handle this.

Edge Cases

GPS data can be noisy; a GPS device has to listen for very weak signals from multiple satellites at a time with remarkable precision in order to figure out where you are. Additionally, things like tall buildings can interfere with the GPS signal, making logging GPS data on urban roads even more difficult. Smartphones can try to compensate for this by using WiFi in addition to GPS to try to triangulate your location, and automotive GPS devices which hold databases of roads will generally “snap” you to the nearest road.

These are both imperfect techniques, but the GPS Pro+ can’t do either of these techniques, having to rely purely instead on something like dead reckoning (assuming you’re most likely to continue traveling in the direction and speed you’re already traveling until it receives sufficient GPS data otherwise) and a Kalman filter (to determine how likely it is you’ve changed speed/direction based on several successive points of GPS data).

First, this means that driving data in dense urban cores can look a little wobbly.

A crooked GPS track in downtown Seattle.

A GPS track in downtown Seattle. While it’s obvious what roads I drove, interference from the buildings makes the track look wobbly.

Satellite imagery from Google Earth

A smooth GPS track in a less dense area.

For comparison, a track in a less dense area is much smoother.

Satellite imagery from Google Earth

Second, I’ve noticed that the Kalman filter is a bit aggressive on this device—that is, it tends to wait for a decent amount of data before deciding you’ve turned. This means that some turns show up a little wider in the log than they actually were. In practice, this tends to be most noticeable on high-speed turns, such as highway flyover ramps:

A GPS track with a radius slightly larger than the curve of the overpass it should be following.

Note that the track tends to “overshoot” the curvature of the ramp.

Satellite imagery from Google Earth

Neither of these are insurmountable; for the vast majority of driving, the track is nice, smooth, and follows the roads accurately (often well enough to tell which specific lane you’re traveling in). Overall, I still feel like this provides better tracks than I got from my Garmin navigation devices (which had their own filters and assumptions), but just understand that there are edge cases.


Overall, the Bad Elf GPS Pro+ works remarkably well for logging driving. By configuring it to record only while moving, it becomes a datalogger that you can set-and-forget daily, which will work in any car. As with any GPS receiver, it has some limitations, but overall it’s a great choice if you want a standalone logging device.

  1. Technically GNSS location data, since the GPS Pro+ uses both GPS and GLONASS. ↩︎

  2. If making a heatmap, remember to disable the Smart Filter under Datalogger Settings so that all points are recorded, even when not in motion. ↩︎