Your watch records an activity and writes a file. Which file it writes, and what happens when you convert it into something else, determines how much of your session survives the trip to whatever platform you use next.
The short version: FIT holds the most, GPX holds the least, and converting downward discards data permanently. The longer version is worth knowing, because the differences explain several things that otherwise look like bugs.
The three formats
FIT — Flexible and Interoperable Data Transfer, developed by Garmin through the ANT+ alliance. It is a binary format built from typed messages rather than a text document. A file contains a stream of record messages, each holding whatever fields the device captured at that instant, plus separate message types for laps, sessions, device information, settings and events. Being binary makes it compact — typically several times smaller than the equivalent XML — and it is the native output of most modern sports watches and bike computers.
TCX — Training Center XML, also from Garmin, designed for the now-retired Garmin Training Center desktop software. It is XML, human-readable if you open it in a text editor, and considerably more verbose than FIT. It carries heart rate, cadence, distance, calories and lap structure natively, and it can describe structured workouts as well as completed activities.
GPX — GPS Exchange Format. This one is not a fitness format at all. It was designed for exchanging GPS data between mapping applications, and its core schema describes waypoints, routes and tracks: latitude, longitude, elevation and time. That is essentially the whole vocabulary.
What GPX does not natively hold
This is the single most consequential fact in the whole subject. Base GPX has no concept of heart rate, cadence, power or temperature. None of it.
Those fields do appear in GPX files in the wild, carried in an extension namespace — most commonly Garmin's TrackPointExtension, which bolts heart rate, cadence, temperature and a few other fields onto each track point. This works, and it is widely supported, but it is an extension rather than part of the format. Software that reads only base GPX will parse the file successfully and silently ignore everything in the extension.
That is why "I converted to GPX and my heart rate disappeared" is such a common complaint. Depending on which converter you used and which application you opened the result in, the data may have been dropped at conversion, or preserved in an extension and ignored on import. Both look identical from the outside.
What survives each conversion
Converting between these formats is not symmetrical. Going from a richer format to a poorer one is possible and lossy; going the other way cannot invent what was never recorded.
FIT to TCX is the gentlest conversion. Position, time, heart rate, cadence and lap structure all have a natural home in TCX. What tends to be lost is the long tail: device and sensor metadata, developer fields written by third-party apps, some event messages, and any field TCX has no element for.
FIT to GPX is the lossiest common conversion. Position, elevation and timestamps survive. Heart rate and cadence survive only into an extension. Running power, left-right balance, vertical oscillation, ground contact time, temperature and similar fields have nowhere to go. Lap boundaries are usually flattened, so a structured interval session arrives as one undifferentiated track.
FIT to CSV trades structure for accessibility. You get one row per record with every field as a column, which is ideal for loading into a spreadsheet or a notebook and doing your own analysis. What you lose is the hierarchy — the separation of records, laps and sessions collapses, and you have to reconstruct it yourself.
Anything to FIT is the direction to be sceptical about. A converter can produce a technically valid FIT file from a GPX, but every field the GPX never had will still be missing. The output is a FIT file containing GPX-grade data, not a recovered original.
The practical rule: keep the original file. Convert copies. Whatever your watch wrote is the most complete version that will ever exist, and once you have deleted it in favour of a GPX, the rest is gone.
Why the same run shows different elevation everywhere
Upload one activity to three platforms and you will often get three different elevation gain figures, sometimes differing by tens of percent. Several separate things cause this, and it is worth separating them.
Barometric versus GPS altitude. Watches with a barometric altimeter infer altitude from air pressure, which is far more precise for detecting small changes than satellite positioning. Watches without one derive elevation from GPS, which is noticeably noisier in the vertical axis than the horizontal. A FIT file from a barometric device carries good altitude data; a GPX exported from a GPS-only device carries something much rougher.
Barometric drift. Air pressure also changes with weather. A passing front during a long activity can add or remove apparent altitude that you did not actually climb.
Elevation correction. Several platforms discard the recorded altitude entirely and re-derive it by looking each coordinate up in a digital elevation model. This fixes bad GPS altitude and can equally overwrite good barometric data — and different platforms use different terrain models at different resolutions.
Smoothing thresholds. Raw altitude data is noisy, so every platform filters it before summing the climbs, usually by ignoring changes below some threshold. That threshold is an arbitrary choice, it differs between platforms, and on rolling terrain it changes the total substantially.
None of these figures is straightforwardly "correct". If you care about comparing efforts, compare them within one platform and do not read much into the absolute number.
Reading a FIT file yourself
Because FIT is binary, you cannot inspect it in a text editor, which makes it feel more opaque than it is. It is a well-documented format with open parsers available, and a file usually contains more than the platform you uploaded it to chose to display — per-record temperature, sensor battery states, the exact device and firmware, developer fields written by apps installed on the watch.
Converting to CSV is usually the fastest route to seeing what is actually in there. Every field becomes a column, and fields you did not know were being recorded become obvious immediately.
Picking a format for the job
- Archiving your own activities — keep the original FIT. It is the most complete and the smallest.
- Uploading to another training platform — FIT if it is accepted, TCX if not. Both preserve laps and heart rate.
- Sharing a route for someone else to follow — GPX. This is what it was designed for, and the missing sensor data is irrelevant.
- Your own analysis in a spreadsheet or notebook — CSV.
- Importing into mapping or GIS software — GPX, for the same reason.
Every conversion here runs in your browser. The file is read from your device, transformed locally and handed back, which for activity files matters more than it might first appear: a FIT file is a precise record of where you were, at what time, on which days, for months at a stretch. That is not a thing to hand to an unfamiliar server in exchange for a format change.