Export an Apple Watch workout to GPX, one file per leg
The Fitness app shows your route on a map and offers no way to take it with you. Apple Health can export everything at once, as an archive of your entire history to dig through, but there's no button to export one workout as a GPX file. For most runs it doesn't matter, because Strava or another app picks the workout up on its own. Until it doesn't.
When you need the GPX
Mine was a triathlon. I raced the Ventouxman sprint with my Apple Watch in multisport mode, and Strava received it as a single generic workout of 1:22:44, with 0 km of distance, a speed of zero and a heart rate curve: no swim, no ride, no run. To get them, I ended up splitting the race by hand with an online tool. The same need comes up whenever a workout has to go somewhere the watch doesn't sync to: a coach's platform, a race organiser, a mapping tool.
Asking for it instead
The watch did record everything a GPX needs: the GPS route, the altitude and the heart rate, each with its time. HealthSync syncs it from Apple Health and lets Claude or ChatGPT read it leg by leg. So the GPX is one question away. I asked Claude Code, which writes files directly; Claude and ChatGPT can hand you files to download too.
Make me one GPX file per leg of Saturday's triathlon, with my heart rate, so I can upload them to Strava.
healthsync · get_workout_series location · altitude · heartRate · 5 legs
Here are five files, one per leg, each with GPS, altitude, heart rate and the real time of day. Swim: 400 points, 09:06 to 09:23. T1: 163 points. Bike: 751 points, 20.10 km, against 20.11 km on the watch. T2: 77 points. Run: 712 points, 4.71 km. One thing before you upload: the swim's GPS track measures 769 m, much closer to the 750 m course than the 984 m the watch reported. Upload the swim, the bike and the run as three activities; the transitions are there if you want them too.
The swim is the surprise. The watch's own distance for it was 984 m, for a 750 m course. The GPS points it recorded, joined up, give 769 m. The distance the watch shows is not the length of its track, and in open water the track turns out to be the better of the two.
What's in the file
Each point carries its position, altitude and time, and the heart rate in the Garmin extension that Strava and most training platforms read. Here's one point of the run, as the file holds it:
<trkpt lat="44.015106" lon="4.964750">
<ele>31.3</ele>
<time>2026-09-19T08:05:26Z</time>
<extensions><gpxtpx:TrackPointExtension>
<gpxtpx:hr>147</gpxtpx:hr>
</gpxtpx:TrackPointExtension></extensions>
</trkpt>The times are the real ones, so a platform places the activity at the right moment of the day, and the heart rate shows up on its chart.
Uploading to Strava
- On strava.com, open the upload page, choose File, and select the GPX.
- Check the sport Strava picks for it, and change it to swim, ride or run if it guessed wrong.
- Repeat for each leg you want as its own activity.
Limits worth knowing
- One point every few seconds. The tool returns at most 1,000 points per leg: a 37-minute bike leg gets one every 3 seconds, a four-hour ride one every 15. Plenty for a map and a heart rate chart; not a second-by-second record.
- Heart rate is sparser than position. The watch samples heart rate every few seconds, and under water much less often; a point without a sample simply has no heart rate.
- No route, no GPX. A treadmill run or a pool swim has no GPS track to export.
For what the Strava connector can and can't read once the files are there, see Strava or Apple Health.
Try it on your own workouts
HealthSync is on TestFlight now and on the App Store soon. Leave an address and we'll send the link.