GPX to CSV Converter

Turn a GPX track, route or set of waypoints into a clean CSV table — one row per point with latitude, longitude, elevation, timestamp, optional derived speed, and any heart-rate / cadence / power / temperature sensor columns. Runs entirely in your browser: nothing is uploaded.

Try:
CSV

About this tool

GPX to CSV turns a GPX file — the XML format that GPS watches, bike computers, phone apps and mapping tools export — into a clean CSV table you can open in a spreadsheet or import anywhere. Paste the file contents and you get one row per point with these columns:

point_type, name, latitude, longitude, elevation_m, time

plus a speed_kmh column when you enable it, and heart_rate_bpm, cadence_rpm, power_w and temperature_c columns whenever the file carries those Garmin-style sensor extensions. Coordinates and elevations are copied through verbatim, so nothing is rounded or reformatted, and every field is RFC-4180 escaped so names containing commas or quotes stay intact.

Everything runs locally in your browser — the GPX never leaves your device.

Worked example

Input (a two-point track):

<gpx><trk><trkseg>
  <trkpt lat="40.000000" lon="-105.000000"><ele>1600</ele><time>2024-03-09T08:00:00Z</time></trkpt>
  <trkpt lat="40.001000" lon="-105.000000"><ele>1610</ele><time>2024-03-09T08:01:00Z</time></trkpt>
</trkseg></trk></gpx>

Output (defaults — comma delimiter, header on, ISO time):

point_type,name,latitude,longitude,elevation_m,time
track,,40.000000,-105.000000,1600,2024-03-09T08:00:00Z
track,,40.001000,-105.000000,1610,2024-03-09T08:01:00Z

Tick Add derived speed and a speed_kmh column is appended — the two points are ~111 m apart over 60 s, so the second row reads about 6.68 km/h (the first row is blank because speed needs a previous point).

Options

Limits & edge cases

FAQ

What columns does the CSV have?

Always point_type, name, latitude, longitude, elevation_m, and time (unless you set the time format to none). A speed_kmh column is added when you enable derived speed, and heart_rate_bpm, cadence_rpm, power_w and temperature_c are added automatically whenever the file contains those sensor extensions. Empty cells mean that point didn't record that value.

Can it read heart rate, cadence, power and temperature?

Yes. It reads the common Garmin TrackPointExtension channels — heart rate (hr), cadence (cad/cadence), power (power/watts) and temperature (atemp/temp/wtemp) — by their local element names, so files from Garmin, Wahoo, Polar and similar devices work even with different XML namespace prefixes.

Why is the first speed value blank?

Speed is derived from the distance and time between a point and the previous point in the same track segment or route, so the very first point of each segment has nothing to compare against and its speed_kmh cell is left empty. Waypoints are independent locations, so they never get a derived speed either.

Is my GPX file uploaded anywhere?

No. The conversion runs entirely in your browser using WebAssembly — the GPX text you paste is processed on your own device and is never sent to a server.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool gpx-to-csv "<gpx><trk><trkseg><trkpt lat="40.0" lon="-105.0"><ele>1600</ele><time>2024-03-09T08:00:00Z</time></trkpt></trkseg></trk></gpx>"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/gpx-to-csv/?gpx=%3Cgpx%3E%3Ctrk%3E%3Ctrkseg%3E%3Ctrkpt%20lat%3D%2240.0%22%20lon%3D%22-105.0%22%3E%3Cele%3E1600%3C%2Fele%3E%3Ctime%3E2024-03-09T08%3A00%3A00Z%3C%2Ftime%3E%3C%2Ftrkpt%3E%3C%2Ftrkseg%3E%3C%2Ftrk%3E%3C%2Fgpx%3E&points=all&delimiter=comma&header=true&time_format=iso&speed=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.