Skip to content

What's in the GPX file

A WorkoutGPX export is a plain GPX 1.1 file: one track per workout, with one segment for each piece Health recorded the route in. Every app that reads GPX opens it; the extras below are in the extensions that Strava, Garmin Connect and Komoot already understand.

Each track point has its latitude and longitude, its time, and its elevation whenever the GPS reported a valid height. Points are written exactly as Health stored them: nothing is filtered, smoothed or snapped to a road. Hide Start and End drops the points at the ends and leaves the rest untouched.

Heart rate, cadence, power, speed and course

Section titled “Heart rate, cadence, power, speed and course”

With Include Sensor Data on in Settings (the default), WorkoutGPX reads the sensor data Health holds for the workout and writes it onto each point:

In the file What it is Comes from
gpxtpx:hr heart rate, beats per minute Health’s heart rate
gpxtpx:cad cadence, revolutions per minute cycling cadence (iOS 17 and later)
<power> and gpxpx:PowerInWatts power, watts running power, and cycling power (iOS 17 and later)
gpxtpx:speed speed, meters per second the GPS
gpxtpx:course heading, degrees the GPS

A reading goes on a point when it was taken within 15 seconds of it. Speed and course are written with the sensor data, so a file made with Include Sensor Data off, or of a workout with no heart rate, power or cadence in Health, has positions, heights and times only.

Power is written twice on purpose: the plain <power> element that Strava, Zwift and RideWithGPS exchange, and Garmin’s PowerExtension, which strict GPX validators accept. A validator may flag the plain one; the apps read it.

An example point from a run, shortened:

<trkpt lat="38.927473" lon="-77.020161">
<ele>25.6</ele>
<time>2012-10-24T23:29:40Z</time>
<extensions>
<gpxtpx:TrackPointExtension>
<gpxtpx:hr>130</gpxtpx:hr>
<gpxtpx:speed>2.85</gpxtpx:speed>
<gpxtpx:course>87.4</gpxtpx:course>
</gpxtpx:TrackPointExtension>
</extensions>
</trkpt>

The file and its track are named after the kind of workout and its day, “Running - Oct 24, 2012”. The track’s type is a plain word other apps match (running, walking, hiking, cycling, swimming, rowing, paddling, alpine_skiing, cross_country_skiing…), and its source names the device and the app that recorded it, such as “Apple Watch (Watch7,4) via Workout”.

The description sums the workout up as Health has it: distance, duration, active energy, elevation gain, average and maximum heart rate, average power and cadence, and the temperature when the workout recorded the weather, then “Exported from Apple Health by WorkoutGPX.” and what recorded it. The file also links to objectgraph.com/workoutgpx and names WorkoutGPX as its creator.

Positions and heights in a GPX file are always in degrees and meters, whatever your units. Use Metric System (km) changes only the description’s distance and gain (kilometers and meters, or miles and feet) and the end of the file’s name:

Running_2012-10-24_19-29-40_mi.gpx

The name is the kind of workout, its start date and time, the units, and _2segments (or more) for a workout recorded in several pieces.