How to import a workout into ROUVY: three doors and three formats
ROUVY accepts exactly three workout file formats, and its wording is blunt: you can only import .mrc, .erg, and .zwo files [ROUVY Workouts]. Three routes get a session in. You import a file, a connected app sends its Workout of the Day, or a partner service posts one through ROUVY's public API. The file route takes seconds. The harder problem is the one where the file imports cleanly and the targets still come out wrong, and that has four causes.
By Jim Camut · Former pro & ex-Bruyneel Academy racer
Updated Sep 17, 20264 chapters7 citations
Importing a file: three formats, two buttons
ROUVY states the list and does not extend it: you can only import .mrc, .erg, and .zwo files [ROUVY Workouts]. Two entry points exist. In the app, an 'Add your own workout' field sits at the bottom of the Workouts tab. The Riders Portal Workouts tab carries an 'Import from file' button [ROUVY Workouts].
Those three names are not three flavors of the same thing. A .zwo file is Zwift's workout format: XML, human-readable, one element per step, with each power target written as a fraction of your FTP. The .erg and .mrc formats are much older plain-text files from the CompuTrainer era, each a short header followed by a two-column table of elapsed minutes and a target. The difference between the two is the currency of that second column. An .mrc file holds percentages. An .erg file holds watts.
That distinction causes the most common import surprise. Percentages are relative, so a .zwo or an .mrc resolves against whatever FTP your ROUVY profile holds, and every target moves when that number moves. An .erg does not, because nothing in the file is left to scale: 250 W is 250 W. Ride an .erg a friend built at an FTP of 300 on your FTP of 240 and you get their session at their intensity, about 25% above where the shape was aimed. Given the choice, pick .zwo or .mrc.
Imported files land where everything else you own lands. The My Collections section of the Workouts tab holds your created workouts, the ones added as favorites, and workouts imported from other apps connected to ROUVY [ROUVY Workouts]. A workout tile's three-dot menu offers Duplicate and Edit, which drops a copy into ROUVY's own workout creator, so you can repair one step instead of re-exporting the file. If you need a .zwo to start from, we publish a free Zwift workout generator that emits one.
The connected-app route: one Workout of the Day
intervals.icu, Xert, Humango, CoachCat and TriDot all have official ROUVY integrations, and ROUVY describes them in near-identical words: it supports importing the Workout of the Day from the partner into ROUVY [ROUVY Intervals.icu]. Those sessions appear as a per-partner tile under My Collections, alongside your own imports.
Read that phrase literally, because it is the constraint rather than the marketing. This door is a daily feed, not a library sync. What arrives is the session your other platform scheduled for that date; ROUVY's intervals.icu article adds that importing outdoor activities into ROUVY for XP is not supported [ROUVY Intervals.icu]. Setup is identical across partners: log in on the Riders Portal, open Connected Apps and Devices, find the app, and authorize it.
TrainingPeaks is the oldest of these doors and carries the most specific constraints, all in ROUVY's own words. Only a workout classified by the DURATION and % FTP can be displayed. You must create or add it via the website, not in the App. Only workouts carrying the BIKE WORKOUTS specification appear. And only that day's session reaches you: the only workouts of the day are to be accessible in the ROUVY App [ROUVY TrainingPeaks]. A full week built in TrainingPeaks is not a full week visible in ROUVY.
One setting decides whether a daily feed lands on the right day. ROUVY asks you to set your time zone at the bottom of the Connected Apps page so imported data syncs correctly [ROUVY Intervals.icu]. A session that arrives a day early, or disappears at midnight, is usually this.
Why a file that imported still rides wrong
Four causes, and not one of them looks like an error. The targets resolve against ROUVY's FTP rather than your coach's. Heart-rate steps lose their target entirely. Ramps arrive as steps, or not at all. Distance-based steps are dropped before the file is even sent.
The percentage problem changes every number in the session. AI Endurance states it plainly: it exports targets as a percentage of your FTP or threshold rather than as absolute watts, and each receiving app applies its own FTP setting to turn those percentages into watts. Its worked example is a 220 W FTP on its side against 200 W in ROUVY, which leaves every target about 9% too easy [AI Endurance FAQ]. ROUVY flags the same risk from its own side: when you click on Workout of the Day, ROUVY will ask you to synchronize the FTP value [ROUVY TrainingPeaks]. Accept the prompt.
A 9% error sounds survivable, and on an endurance ride it is. On interval work it often is not, because the interval was aimed at a boundary rather than at a number. Critical power separates a domain where the physiological response settles into a steady state from one where oxygen uptake climbs to maximum and the effort ends in exhaustion [Poole et al. 2016]. Five by eight minutes written just under that boundary and ridden 9% over it is a different session with a different cost.
Heart-rate targets do not survive the crossing, and the reason is structural. Good Coach's integration documentation says ROUVY uses the ZWO format, which is power-based, so a heart-rate target is exported as a Free Ride step with no power target [Good Coach ROUVY Export]. The same page says steps defined by distance, and open steps, cannot be represented and are skipped, and that a workout whose steps are all distance-based is not sent to ROUVY at all [Good Coach ROUVY Export]. That is one exporter describing its own behavior, not a rule ROUVY publishes.
Ramps are the known weak point, and the evidence is user reports rather than documentation. A thread on the intervals.icu forum describes ROUVY workouts written with an FTP range importing as a ramp, and TrainerDay's forum FAQ says it converts ramps to steps on its other exports. Note which way that runs: a steady band arrived drawn as a climb, so stepping it into blocks cannot help, because every block still carries a band. The workaround riders report is to give the interval one target value rather than a range before exporting.
The API route, and what it is actually for
ROUVY publishes a REST API. A POST to /workouts/push takes a ZWO file plus a plannedAt date and returns a workout id [ROUVY API]. ROUVY does not publish which of the partner apps above use it. It is not a door a rider opens by hand: OAuth applications are provisioned by ROUVY rather than self-registered [ROUVY API].
The mechanics explain what a partner app can and cannot do on your behalf. The push is multipart form data carrying a ZWO file of up to 16 MB and an ISO-8601 plannedAt timestamp whose time of day is accepted and then ignored, so a workout lands on a calendar date. A separate DELETE call removes a workout by the id the push returned [ROUVY API]. What the interface does not offer is an update in place: a changed session has to be deleted and pushed again, and whether a partner does that is a property of the partner.
Our own position is narrow. AdaptCycling reads ROUVY and does not write to it. We ingest your completed ROUVY rides and use them to build and rebuild your plan, and no session of ours appears in your ROUVY library; the file route at the top of this page is how one gets there. That division is the same one our broader guide to training with ROUVY draws across the whole platform. ROUVY decides how the session feels. Something upstream still has to decide what the session is.
One last thing no file carries: the route. ROUVY has you pick the scenery separately and remembers the last route you chose [ROUVY Workouts]. What the terrain does to resistance inside a structured workout is a separate question, covered on our page about ERG mode on ROUVY routes.
Quick answers
What file types can ROUVY import?
Can ROUVY open a Zwift ZWO file?
Why are my imported ROUVY targets too hard or too easy?
Why did my ramp import as steps, or vanish?
Where do imported workouts show up in ROUVY?
Sources cited in this guide
- 01
- 02
- 03
- 04
- 05AI Endurance FAQ. Why are my workout targets wrong in Rouvy, TrainingPeaks or TrainerDay?. AI Endurance.
- 06
- 07Poole et al. 2016. Critical Power: An Important Fatigue Threshold in Exercise Physiology. Medicine & Science in Sports & Exercise.
More inside Training with ROUVY
Start here · Foundational guide
Training with ROUVY: a self-coached cyclist's guide
ROUVY runs structured workouts properly and decides almost nothing. What its plans cover, where they stop, and how to train around them.
Read the full guide
Other articles in this series
- 01
Are ROUVY's training plans any good?
Coach-written, four to six weeks, included in the subscription. What they do well, and the one thing they do not do after a bad week.
- 02
Training on ROUVY without a power meter
ROUVY scores training load best from power. How to train and progress on heart rate alone, and what the ledger loses when you do.
- 03
ROUVY ERG mode on routes: what the gradient does
Inside a structured workout with ERG off, ROUVY simulates a flat 1% and the filmed climb stops setting resistance. Why that surprises riders.
- 04
Zwift acquired ROUVY: what changes for riders
Zwift bought ROUVY and FulGaz in April 2026. What both companies committed to, what has actually changed since, and what has not.
- 05
Which ROUVY FTP test should you take?
Ramp or twenty minutes, what each one costs you, how often to repeat it, and what to do when the number comes back lower.
Free training analysis · No card · ~3 minutes
Try the adaptive coach yourself.
Connect your rides and the coach reads your last eight weeks — intensity balance, ramp rate, what's working, what's holding you back — then drafts your training plan around it.
Free 14-day trial, no card.