Convert TCX to CSV (spreadsheet)

Your file never leaves your device — conversion happens here in your browser.

Opening a TCX file directly in a spreadsheet is not really possible — it's nested XML, laps inside an activity inside a course, and no row-per-point layout to import. This tool flattens that structure: one row per trackpoint, with a header naming every column your file actually has data for. Unlike the TCX-to-GPX or TCX-to-KML conversions on this site, lap information isn't discarded here — TCX's lap boundaries survive as a lap_index column, incrementing by one each time a new lap starts in the source file. That's not the same as CSV having true lap objects with their own summary stats (CSV doesn't have that structure, so it's a lossy translation), but it means the lap boundary itself — which point started which lap — is fully recoverable from the data, which is often all a spreadsheet analysis actually needs; you can filter or pivot on that column the same as any other. Heart rate, cadence, and power carry over exactly since CSV has a column for anything TCX can produce. Temperature is the one channel that never makes the trip, but that's a TCX limitation, not something the CSV format drops — TCX has no temperature element to source it from in the first place. Timestamps gain millisecond precision in the CSV output, matched with an elapsed-seconds column for anyone who'd rather work in relative time than wall-clock time. Everything runs client-side in a background worker in your browser, so a multi-hour activity with a large point count converts without freezing the page, and the file itself is never sent anywhere to do it.

Questions

What happens to my lap data in the CSV?

It survives as a lap_index column that increments each time a new lap starts in the source TCX file — not full lap summary stats, but the lap boundaries themselves are fully recoverable.

What columns will the CSV have?

timestamp, elapsed_s, lat, lon, elevation_m, lap_index, and any of hr_bpm, cadence_rpm, power_w your TCX file actually contains. Temperature never appears, since TCX has no temperature element to source it from.

Is any sensor data lost converting TCX to CSV?

No — heart rate, cadence, and power all survive exactly. Only temperature is absent, and that's because TCX itself has no temperature field, not a limitation of the CSV output.

Can I open the result directly in Excel or Google Sheets?

Yes, it's a standard comma-separated file with a header row — no extra import steps needed.