Upload files

How to Combine FIT Files From Two Devices Into One Activity

A lot of riders record each ride twice and do not plan to. The bike computer sits on the bars with the map, the GPS track, and the power meter paired to it. The watch sits on the wrist with the heart rate strap and the cadence count. At the end of the ride there are two FIT files — and each one holds only half of the ride's data.

Neither file is wrong. The computer's file has a great track and no pulse. The watch's file has a great pulse and a weak track, since a wrist is a poor place for GPS. What you want is one file with the best of both: position and power from the computer, heart rate and cadence from the watch.

That is what a stream-by-stream merge does. The two files are lined up on one time line. Then, for each kind of data — each stream — you pick which file it comes from. This guide covers how the lining-up works, how to pick sources with care, and the one fault that can wreck the result: two clocks that do not agree.

This is a different job from joining two parts of one ride end to end. If your files are parts, not twins, start with how to merge two GPX files into one activity. Twins are the subject here.

Two devices, one ride: why each file is half the story

Each device records what it can sense or what is paired to it. A head unit pairs with the power meter and the speed sensor and has a clear view of the sky. A watch pairs with the heart rate strap and reads pulse from the wrist all ride long. Sensors pair with one host at a time in most setups, so the streams split by where you paired them.

Platforms want one file per activity. Upload the computer's file and the ride has no heart rate. Upload the watch's file and the track wobbles through gardens and roofs, and the power is gone. Athletes used to pick their poison. A stream merge ends the choice: one file, all streams, each from the device that did it best.

The same need shows up in triathlon and in team sports. A runner wears a watch for pace and a pod for form data. A rower has one unit on the boat and one on the body. Wherever two devices watch the same effort, their files are halves of one whole.

Heart rate is the stream that drives most of these merges. It is the one coaches ask for, the one load models eat, and the one most often stuck in the wrong file. If that is your whole problem — a clean track here, the beats over there — you can go straight to the deep guide on how to add heart rate data to a GPX file. The method there is this same merge with one stream in focus.

Power runs a close second. A power meter pairs with one unit, and riders pair it with the head unit for the big screen — then ride with the watch as backup and find the watts locked in the file they meant to discard. Cadence, height, and heat split in the same way, by pairing. The pattern is the point: your streams live where your sensors were paired, and a twin-file merge is how they come home.

Stream by stream: what each device does best

There are six streams in a rich workout file. The right source for each one is the device that sensed it most directly.

StreamBest sourceWhy
PositionBike computer or handheldClear sky view, strong GPS fix
ElevationUnit with a barometerAir pressure beats GPS height for climbs
Heart rateWatch or strap hostThe strap is paired there
PowerUnit paired to the power meterDirect watts, no guess work
CadenceUnit paired to the crank or podCounts each turn at the source
TemperatureExposed head unitA wrist under a sleeve reads warm

These are starting points, not laws. If your watch has the barometer and the computer does not, take height from the watch. The health check tells you which streams each file holds and how full each one is. Pick from facts, not from habit.

How an overlap merge lines the two files up

Both files hold points stamped with time. The merge lays the two sets of points on one shared time line, second by second. Where both files have a point for the same second, the output takes each stream from the file you picked for that stream. Where only one file has a point, that point fills the line as it is.

Diagram: a watch file and a bike computer file feed one activity file, each stream taken from the device that recorded it best.WATCHheart rateCOMPUTERGPS · powerpick a source per streamOne activity filePosition · from computerPower · from computerHeart rate · from watchCadence · from watchall streamsin one file
One file out. Each stream comes from the device that sensed it best.

The output has one point per time step — not two. That is the key split from a stitch, which would lay the files end to end and count the ride twice. If you want to see the points-in, points-out proof for merges like this, read how to check a merged file's totals and coverage when you are done here.

A concrete case makes the lining-up plain. Your ride runs from 8:00 to 11:00. The computer's file holds points for the whole span. The watch's file holds points from 8:00 to 10:40, when its battery faded. The shared line runs 8:00 to 11:00. For each second the output has one point. Heart rate fills it until 10:40 and then stops — not because the merge failed, but because the beats end there. The last twenty minutes ride on the computer's streams alone. That is the honest shape of the day, and the totals block shows it as a coverage rate, not a surprise.

The reverse case matters too: the watch ran long, the computer died first. Then position fills the line until the computer's death and stops. A merged file with a partial track is still worth having — the effort data runs whole — but post it with eyes open, and keep the raw pair, since the track for the last span lives in the watch file at watch-grade accuracy if you ever want it.

Pick a source for each stream

In FitMerge, the health check lists each file's streams with their coverage — the share of the ride where the stream holds real values. In the merge step, you pick a source file for each stream from a plain list. The defaults follow the table above. Change only what your setup calls for. Then run the merge and read the totals block: it shows the coverage of each stream in the output, so you can see at once if a pick left a stream thin.

Thin coverage has honest causes. A heart rate strap that lost skin contact for ten minutes leaves a ten-minute hole, and no merge can invent the beats. What a merge can do is take the stream from the other file for that span if the other file has it. FitMerge fills each stream from your picked source first and shows the final coverage, so the holes you see are the holes that were truly there.

One choice needs care: position. Take it from one file only, whole ride. Mixing two tracks point by point makes a line that hops between two views of the road. The output will still load, but the map will look drunk. One track, one source — that rule has no real exceptions.

Save the pairing as a profile

If you record with the same two devices each week, you will make the same picks each week. On the Pro plan, FitMerge saves your picks as a stream profile: position and power from the computer, heart rate and cadence from the watch, height from the barometer unit. Next ride, the profile applies in one click and you just check the totals.

Profiles pay off most for coaches and for race day. Five athletes, five pairs of devices, one event: set each pairing once, then run each athlete's files through their profile. The plan details, if you want them, are on the pricing page. The free plan still does the full stream merge — you just make the picks by hand each time.

Name profiles by the pairing, not the person: “Edge plus Fenix” ages better than “race setup.” Devices change one at a time, and a clear name tells you which half of the pair the profile expects.

Profiles also guard against the worst twin-file error: the wrong pair. A profile expects files of a set shape — a long computer file with power, a watch file with heart rate. Drop a wrong file into the run and the coverage block shows it at once: a stream you set to come from the watch is absent, because the file you fed is not the watch's. Checks like this are dull until the day they save a race file. Then they are the whole game.

Keep one habit with profiles: review the picks when a device changes. A new watch with a barometer flips the right source for height. A power meter moved to the watch flips power. Profiles freeze yesterday's truth; your kit does not freeze. A ten-second glance at the pick list on the day new gear arrives keeps the profile honest.

A last case for the pick list: the device that holds a stream badly. A wrist unit's optical heart rate can lag and spike on rough roads, while a strap reads true. If both files hold heart rate but one holds it badly, pick the good one for the whole span, not file by file. Source picks are per stream, not per file — that is the whole point of them. The twin that wins the stream need not be the twin that wins the track.

And when the two files hold a stream in split spans — the strap heard by the watch for hour one, by the computer for hour two, after a mid-ride re-pair — coverage math still saves you: each span fills its own half of the line. The totals block shows the seam in that stream as a source switch. It is a sound file. Note it, post it, ride on.

When the two clocks do not agree

A stream merge trusts time stamps. If the watch clock ran 40 seconds fast, its heart rate lands 40 seconds late on the shared line: your pulse spikes show up after the hills that caused them. Small drifts of a second or two do not matter. Big ones bend the data in ways you can see on the graph — heart rate peaks that trail power peaks by a fixed lag.

Most modern units sync their clocks from GPS or from your phone, so big drift is rare. Old units, and units that sat dead for months, are the risk. If the health check shows the two files start far apart for a ride you started at the same tap, suspect the clock. Devices that record indoors make this worse, since they may lack a GPS time fix at all — a case we cover in how indoor workout files work, with no GPS track.

And if your pair of files is not two halves of a ride but legs of a whole race — swim, bike, run, each on its own file — the merge you want is in race order, leg by leg. That flow is in how to merge multisport files into one race record.

The short version

Two devices, two halves. Line the files up on one time line, take each stream from the device that did it best, keep position from one source, and check the coverage in the totals. Combine your two files — the health check shows each stream's coverage before you commit to a pick.

Sources and further reading

← All guides