How to Merge TCX Files and Check That Nothing Was Lost
Anyone can join two files. The merged file will load, the map will draw, and it will look right. But “looks right” is not proof. Points can drop at the seam. A stream can thin out. Totals can be carried over from one input in place of being counted fresh. The ride looks whole while a piece of it is gone.
This guide is about the proof. We use TCX files for the walk-through — a form with deep roots in training tools, still common in old logs and course work — but the checks are the same for GPX and FIT. Merge first. Then run three checks: points in against points out, totals against a fresh count, and stream coverage against the inputs.
These checks take two minutes and they catch the faults that eyes miss. A dropped seam of thirty seconds will not show on a map of a four-hour ride. It shows at once in the point count. That is why pros who merge race files count first and admire the map second.
If your files are GPX, the merge steps live in how to merge two GPX files into one activity. Come back here for the checks — they close that guide's loop, and they close this one too.
Why TCX still shows up in training tools
TCX was the training world's swap form for years. It holds laps as first-class data, heart rate and cadence in its core, and course data for route work. Whole archives sit in TCX: a decade of club rides, old coaching plans, files from units long since retired. When those archives meet modern tools, merges and converts follow — and each one is a chance to lose data in silence.
TCX is text, so you can open it and read it. That helps the checks below: the track points are there to count, the lap records are there to read, and the totals a tool claims can be held against the points in the same file. Few forms make proof this easy to run by hand when you must.
Treat old TCX files with respect. They often hold the only copy of a ride. Work on copies, keep the raw set, and let the checks — not hope — say when a merge is done.
Old files carry one more trait: their clocks. A unit from ten years back may hold a clock that drifts, or a date set wrong at a battery change. You will see rides dated 2015 that you rode last spring. The merge does not mind — it sorts by the stamps it is given — but your checks must read the stamps as written, not as truth. Note the drift in your log when you spot it. A known drift is data. A hidden one is a trap.
Why do these checks lean on TCX at all, in a FIT world? Because text can be read by the rider, not just by tools. When a merged file is doubted in a FIT-only flow, your word rests on a tool's word. In TCX, you can open the file, count the points with a search, and read the lap lines with your own eyes. Proof you can run yourself is worth more than proof you must take on faith.
The check that matters: points in, points out
Every point is a second (or a few) of your ride. If points go in and fewer come out, time is gone. The rule for a back-to-back stitch is plain: points out should equal the sum of points in, less any points you know were dropped — a trimmed head, a half record at a cut, an overlapped span kept once. Each drop must have a name. A drop with no name is a fault.
For an overlap merge the count runs the other way: two files that ran at once hold two views of the same seconds, so the output should hold about as many points as one file's span — not the sum. Know which merge you ran before you judge the count. A stitch that yields one file's worth of points has eaten a file. An overlap merge that yields the sum has doubled the ride.
How to count points by hand, once, so the habit sticks: open the TCX in a text editor and search for the track point tag. The editor tells you the match count. That count is the file's point count — no trust in any tool required. For a FIT file you cannot do this by eye; you need a reader. But the reader's count and the tag count agree when both are honest, and now you know what the number means at the byte level.
One edge case in the count: a point can exist with no time stamp, in files made from routes or drawn by hand. Such points swell the count but cannot be sorted by time. If a count looks high and the span looks short, stray timeless points are a prime suspect. A ride file from a real device stamps every point. A count you trust starts there.
Step by step: merge TCX files
In FitMerge, upload the TCX files. The health check lists each file's points, span, laps, and streams. Write the counts down — on paper, in a note, anywhere outside the tool. Pick stitch in time order for parts of one ride. Run the merge, and read the totals block before you download: it is the tool's own claim, and your written counts are how you grade it.
Download the merged TCX, and keep the totals block with it — it is a JSON record of inputs, outputs, and coverage, made to be filed with the ride. If you plan to convert the result to FIT for a device or a platform, do the merge in TCX first, check it, then convert the checked file. One job at a time, each with its own proof.
If the two files are twins from two devices — not parts — the mode is overlap, stream by stream. That flow, with its source picks, is in how to combine FIT files from two devices. The checks below still apply; only the point-count rule changes, as the last section said.
Read the totals, line by line
A totals block holds four lines that matter. Read each one against the inputs you wrote down.
| Line | What it should show | Red flag |
|---|---|---|
| Points | Sum of inputs, less named drops | A gap no one can name |
| Time span | First input's start to last input's end | A span shorter than the ride you did |
| Distance | Close to the sum of both rides' miles | Exactly one input's miles — the other was skipped |
| Laps | All laps from both files, in order | Lap count cut in half at the seam |
Distance earns a word of care. Merged distance is counted fresh from the output points, so it can differ a touch from the sum of the inputs' claimed miles — GPS noise at the seam sees to that. A touch is fine. A mile is not. When in doubt, trust the point count first; it is the hardest number to fake and the easiest to re-count.
Laps get a second look from riders who train by sets. A merged file that keeps laps in order lets a coach read the day as it was ridden: warm-up, sets, cool-down. A merged file that flattens laps into one span keeps the miles and loses the shape. If your lap count comes back wrong, do not shrug — the shape of the day is half of what the file is for. Re-run the merge and watch the lap line before anything else.
Heart rate totals have their own trap: an average claimed by a file is an average over its own span. Two files' averages cannot be averaged to get the merged mean — the spans weigh in. A sound tool counts the merged mean from the merged points. If a merged file shows an average that matches one input's average to the digit, suspect a copied sum, not a counted one.
Stream coverage: the second check
Points prove time was kept. Coverage proves the data on those points was kept. Coverage is the share of points where a stream holds a real value: heart rate on 98% of points, power on 100%, and so on. The merged file's coverage for each stream should sit close to the best input's coverage for that stream — and never above the union of both.
A stream that falls off a cliff at the seam is the classic silent loss. The first file's heart rate rides through; the second file's heart rate is gone from the output, though its points are all there. Causes range from a form quirk — an extension block the writer skipped — to a source pick that named the wrong file. The fix flows from the cause, but the catch flows from the check. No coverage check, no catch.
Where a stream was thin at the source, say so in your notes and move on. A strap that died at hour two leaves a hole no merge can fill, and chasing it wastes the day. The check's job is to split losses into two piles: losses that were in the ride, and losses the merge made. Only the second pile is yours to fix. Repaired files need the same split — see how to fix a corrupt FIT file for how a repair report makes it.
Coverage has a shape, not just a rate. A stream can hold 90% of points and still be wrong — if the lost 10% is one block at the seam. Read the coverage by span when you can: first half, second half, each near its own input's rate. A healthy merge shows no cliff at the join. A cliff at the join is the merge's fault until proven otherwise, and it is the first place to dig.
Set a personal bar and keep it plain: a merge passes when each check is green or each miss is named in your notes. Named misses — a dead strap, a trimmed head — are part of the record. Unnamed misses are debt. They come due the day you build a season plan on the file and the numbers feel off in a way you cannot place.
If the numbers do not add up
Work the gap like a fault, not a mystery. Which check failed — points, totals, or coverage? A point gap at the seam points to the join: an overlap read as a stitch, or a trim you forgot. A totals gap with sound points points to carried-over sums: the tool copied one input's totals in place of counting fresh — a writer fault, cured by a rebuild. A coverage gap points to a stream path: the wrong source, or a form that dropped the block.
If a second tool gives a second answer, believe the points you can count yourself. TCX is text: count the track point tags. FIT needs a reader, but any strict reader's count will serve. And when the merged file must change form to be believed — when only a FIT read will settle it — the form guide is FIT vs GPX vs TCX: which format keeps your data. Proof first, pride later: a merge you have checked is a file you can build a season on.
The short version
Write the input counts down. Merge. Then grade the output: points, totals, coverage — each against the inputs, each gap named or fixed. Two minutes of counting is the whole split between a merge you hope is right and one you know is. Merge with a totals block — every FitMerge output ships with the numbers this guide teaches you to read.
Sources and further reading
- GPS Accuracy — GPS.gov — The U.S. government's own page on how exact GPS fixes are, and what makes them drift.
- Time and Frequency Division — NIST — The U.S. lab that keeps official time — the root of the clock in every file you merge.
- Exercise and Physical Fitness — MedlinePlus — The National Library of Medicine's plain guide to exercise types and their gains.