It's a binary format, not text
Open a .fit file in a text editor and you'll see garbage — a handful of readable strings (device names, maybe a sport name) surrounded by binary noise. That's by design. FIT (Flexible and Interoperable Data Transfer) is a compact binary protocol Garmin designed specifically for GPS devices with limited storage and battery, and it's the format your watch or bike computer actually writes while you're training — everything else (GPX, TCX, the activity page on Garmin Connect) is generated from the FIT file afterward, not the other way around.
Messages, not rows
A FIT file is a sequence of messages, each with a numeric type and a set of fields. The message types you'll see most in an activity file are things like record (one per sample — GPS position, heart rate, cadence, power, elevation, all timestamped), lap and session (summaries at different levels), and event (start/stop/pause markers, alerts). But the FIT specification defines dozens more message types beyond activity data — device settings, workout definitions, training history, even things like HRV status and sleep messages on newer devices. Whatever your specific device actually recorded is whatever's in the file; there's no fixed list every watch fills in the same way.
Why it's the richest source
Every export format downstream of FIT throws something away. GPX, the most portable option, is built around a track of GPS points — it can carry heart rate and cadence as extensions, but running dynamics, power, temperature, and most device-level detail don't fit its schema at all. TCX carries more (see our GPX vs TCX vs FIT comparison), but it's still a curated subset. The FIT file is the one place all of it — including whatever your specific device recorded that no export schema anticipated — actually lives.
Why that matters for an AI chat
If you want to ask an AI chatbot something genuinely specific about a workout — cadence drift over a long run, power curve on a climb, how heart rate recovered between intervals — that detail either exists in the FIT file or it doesn't exist in any export at all. A curated summary (Strava's activities.csv, or a dashboard's headline stats) is fine for a quick recap, but it's a dead end for anything more probing, because the underlying samples were never included.
Turning it into something an AI can actually read
None of this is readable by a chatbot as-is — it's binary, and even decoded, a single run's worth of per-second samples is far too much to paste directly. This tool decodes the full FIT structure — every message, every field, nothing dropped or summarized — into JSON, then lets you pick exactly the date range you want combined into one Markdown file sized to actually paste into a chat. Nothing is uploaded anywhere; the decoding happens entirely in your browser.