How to merge Zwift and Garmin FIT files into one ride
If you ride Zwift while a Garmin watch or Edge records the same session, you end up with two activities, each holding half the story. Here's how to combine them into one complete ride — keeping both devices' statistics rather than picking a winner — for free, in your browser, without installing anything.
Why you end up with two files
Zwift records power, cadence, speed, distance, elevation and the in-game route. Your Garmin records heart rate, temperature and the metrics only a watch can produce — Body Battery, Stamina, respiration, Training Effect — because those come from its own sensors and firmware during the recording. Dual recording gets you everything, split across two files that upload as duplicate activities.
Worth knowing what Zwift's own upload gives you: when Zwift uploads a ride to Garmin Connect, the route and elevation come from the virtual course, not from any GPS, and the activity arrives as a file Connect received rather than one the watch recorded. That distinction is the whole reason people dual record — see what you actually gain and lose.
Step 1 — Export both original files
-
Garmin: on the Garmin Connect website, open the activity, use the gear
icon and choose Export File (called Export Original in older
versions). You'll get a
.zipwith the.fitinside — full walkthrough here. - Zwift: the quickest route is zwift.com/feed → JUST ME → the activity → cog → DOWNLOAD FIT FILE. The local copy works too, though Zwift changed where it saves files on PC in February 2026.
Step 2 — Merge them in your browser
- Open bikesync.ninja. No account, no upload — the merge runs locally in your browser.
- Drop the Garmin file into slot A. File A is the master: it keeps heart rate, temperature, Body Battery, Stamina, laps, calories and the device identity. You can drop Garmin's zip in as it downloaded; it gets unpacked for you.
- Drop the Zwift file into slot B. File B fills the gaps: power, cadence, speed, distance, elevation and the virtual route.
- Leave Auto-align on. The offset between the two recordings is found by cross-correlating a signal both devices saw — cadence, heart rate or power.
- Keep Randomize file ID on so the merged file uploads beside the originals instead of being rejected as a duplicate.
- Merge, and download the combined
.fit.
Step 3 — Upload it and clear up
The output is a standard FIT activity that uploads to Garmin Connect, Strava and TrainingPeaks. Upload it wherever you train, then delete the two partial activities so your feed and training load aren't counted twice.
Does merging keep your statistics?
This is the usual worry, and the answer has two halves.
Device-computed values are preserved, not recalculated. Training Effect, Body Battery impact, Stamina, respiration, calories, laps and Cycling Dynamics come from the master file untouched — nobody can reconstruct them from records, so they're carried across verbatim. Connect still lists the merged activity as recorded by your watch.
Summary figures backed by changed data are rebuilt. If power now comes from Zwift, then average power, normalized power, total work and the rest are recomputed from the merged records, because the originals would no longer describe the activity. The same goes for distance, ascent and average speed.
It isn't only Garmin and Zwift
Any two FIT activity files of the same ride will do. BikeSync picks a profile automatically:
- One file is a virtual ride — Zwift, MyWhoosh, Rouvy, indieVelo and the like — and it supplies power, cadence, route and distance around the watch's heart rate and physiology.
- Both files are real recording devices — a watch plus a head unit, two Garmins, a Garmin and an Apple Watch — and it switches to a dual-recorder profile: the master wins everywhere, and the second file only fills moments the master missed, such as a dropped-out power meter. Nothing gets rebuilt that doesn't need to be.
If your power meter is paired to the wrong side — the classic case being pedals on the bike computer while the trainer feeds Zwift — open Field sources before merging and set power to whichever file you trust.
If the result looks wrong
- Traces don't line up. Switch timing to Manual, nudge the offset in seconds, and merge again. The result panel shows the offset and confidence the automatic alignment used.
- Strava says duplicate. Expected — the merged ride covers the same period as the originals. Delete those first, or rely on Randomize file ID. See the duplicates guide.
- The files don't overlap at all. Then they're consecutive rides, not two recordings of one — switch the mode to One after the other and they'll be joined end to end instead.
Merge your ride now
Two FIT files in, one clean ride out. Free, no account, and your files never leave your browser.
Open BikeSync →