Merge GPX Files
Your watch died 40km into a ride and you finished the last hour on your phone. Now you have two files for one ride. Drop them both in, put them in the right order, and download a single GPX.
Your file never leaves your device.
Parsing, trimming, merging, and exporting all happen locally in your browser with JavaScript. GPXFIT never uploads your GPS coordinates to a server.
Drop 2+ GPX, TCX or FIT files here, or click to browse
Add files one batch at a time — they'll be appended to the list below
What the merger actually does to your files
Each file you add contributes at least one track segment (a <trkseg>) to one GPX document, written in the order shown in the list. If a file already contains several segments because you paused mid-ride, those boundaries come through too, so a file with two segments contributes two.
Each point carries four values through unchanged: latitude, longitude, elevation and timestamp, as they were parsed from your file. No smoothing, no snapping to roads, no resampling, and no invented points stitching one file to the next.
Those four are also all you get. The merged file is rebuilt rather than spliced, so waypoints, routes, source metadata and extension fields (the place heart rate and cadence live in a GPX) are not carried over.
The segment boundaries are the point. Flatten everything into one continuous list and you get a track that appears to teleport, with the 8km you drove between stopping one recording and starting the other counted as distance you covered. Here the stats add each segment separately, and map viewers draw a break rather than a straight line.
Getting the order right
Two ordering modes, and the difference matters more than it looks.
Manual (as listed) keeps the order you added the files in, with arrows to move any file up or down. Use it when the files have no timestamps, or when you know the sequence and the clocks disagree.
By start time sorts each file by its first timestamp. Files with no timestamps at all sort to the end, because there's nothing to compare them on.
Get the order wrong and the merged file describes a ride that runs backwards through the day. Nothing warns you: the segments are valid, they're just in the wrong sequence. The map preview above the download button is there so you can catch that before you export.
Mixing formats, and what gets left behind
The merger takes .gpx, .tcx and .fit, and you can mix all three in the same merge. The output is always GPX 1.1.
That conversion costs you something, so it's worth being blunt about it. Heart rate, cadence, power and lap markers live in TCX and in Garmin's FIT format, and none of them survive the trip into a merged GPX here.
GPX itself can carry sensor data in extension fields, which is how a Strava or Garmin export ends up with heart rate in it. GPXFIT's exporter doesn't write those fields, so the merged file has position, elevation and time and nothing else.
If those streams matter more than having one continuous file, keep the originals and upload them as two activities. If a single clean track matters more, merge and accept the loss.
Merging FIT files
Drop them straight in. FIT files are decoded with Garmin's official SDK, so a recording off a Garmin, Wahoo or Coros head unit joins the list next to your GPX and TCX files. There's no need to convert anything first, and merging FIT files has its own page covering what a FIT carries that a GPX can't.
The output is still GPX. Reading a FIT file and writing one are different jobs: writing means binary message definitions, a header whose declared length has to match the data, and a CRC over the whole file. A file whose declared sizes or CRC don't line up can be rejected without much explanation. FIT file repair tracks where that work stands.
One FIT-specific detail is worth knowing, because it decides whether your pauses survive. GPX marks a pause by opening a second track segment. FIT doesn't: the device stops writing points and writes a timer event instead, so the pause exists only in the event stream and a parser reading points alone can't see it. GPXFIT reads those events and breaks the track where the recording resumed, which is why the hour you spent in a cafe comes through as a gap rather than a line drawn through the building.
A FIT file with no GPS in it, from an indoor trainer or a strength session, gives you an explicit error naming the file rather than an empty segment in the merge. If you want to look inside a FIT file before merging it, the File Inspector shows its track-point count and the start and end times it could read.
If the merged file won't upload
Check the timestamps first. Strava rejects a GPX with no timestamps, because without them it can't work out when the activity happened or how fast you were going. If one of your sources recorded no time data, its points come through without any, and a merged file where only part of the track is timed can be rejected too. The File Inspector reports the start and end times it could read, which tells you whether there are timestamps at all, not what share of the points carry one.
Watch for overlap. If both devices were recording for the same 10 minutes, you keep both copies of that overlap in two segments, and your total distance climbs accordingly. Trim one of the files before merging.
Check the size. Concatenating several long rides makes a large XML file, and upload limits are per platform. The point count for each file is shown in the list above, so you can see what you're about to produce.
Frequently asked questions
- When would I need to merge GPX files?
- The classic case: your GPS watch battery died mid-activity, so you switched to recording on your phone. You end up with two files for one ride or run and want a single track to upload.
- What order are the files merged in?
- By default, files are merged in the order you add them. Use the up and down arrows to reorder. You can also switch to "by start time," which sorts automatically using each file's first timestamp.
- Will there be a straight line connecting the two files?
- No. Each file's segments stay separate from the next file's in the merged output, so segment-aware map and analysis tools can show a break between them instead of a false connecting line. Segment boundaries inside a single file, from pausing mid-ride, are kept as well.
- Does merging change my GPS points or timestamps?
- No. Every point keeps its original latitude, longitude, elevation and timestamp. Nothing is smoothed, snapped to roads, resampled, or invented to bridge the gap between two files. Those four values are also all that's written, so anything else the source file carried is not in the output.
- What happens to heart rate, cadence, power and laps?
- They're dropped. GPX can carry sensor data in extension fields, which is how a Strava export ends up with heart rate in it, but GPXFIT's exporter doesn't write those fields. The merged file has position, elevation and time. If those streams matter more than having one continuous track, keep the originals and upload them as separate activities.
- Can I merge FIT files?
- Yes. Drop .fit files in alongside GPX and TCX, in any mix. They're decoded with Garmin's official FIT SDK. The merged file comes out as GPX, because GPXFIT reads FIT but doesn't write it, and the sensor streams are dropped on the way.
- My FIT file has a pause in it. Does the break survive the merge?
- Yes. FIT doesn't mark a pause in the recorded points the way GPX does with a second track segment: the device stops writing points and writes a timer event instead. GPXFIT reads those events and starts a new segment where the recording resumed, so the gap stays a gap. 9 of the 38 GPS-bearing files in the test corpus were stopped and restarted at least once.
- What if a FIT file has no GPS in it?
- You get an explicit error naming the file. An indoor trainer session, a strength workout or a sensor-only recording has no position data to merge, and there's no useful way to guess where it happened.
- How many files can I combine at once?
- There's no fixed limit. Add them one batch at a time and they're appended to the list. Everything runs in your browser tab, so the real ceiling is your device's memory rather than a server quota.
- Can I join two rides recorded on different days?
- Yes. They stay as separate segments and the distance is summed per segment, so the space between them is never counted as distance covered. Whether Strava treats the result as one sensible activity is a different question.
- Do my files get uploaded anywhere?
- No. Parsing, merging and export all happen in your browser. Open your browser's Network tab before you drop a file in and you'll see there's no request carrying it.