From the calendar, select weeks and export them three ways — structured .zwo for the TrainingPeaks Workout Library (every sport), a text week pack, or .fit files for a Garmin/Wahoo/Polar device.
On the training calendar, tick one or more week checkboxes and a bulk bar appears with three export buttons. They serve three different destinations — pick by where the workouts need to end up.
Downloads a .zip of .zwo files — one per swim, bike and run
session in the selection — for TrainingPeaks → Workout Library → ⋮ →
Import Workout (bulk selection works). This is the route that carries
the structure: intervals, targets and step notes all survive.
Every file is named SPORT · DATE · TITLE, so a folder full of them
still tells you what each one is and which day it was for.
Runs and swims need two switches in TrainingPeaks. Every .zwo
arrives as a Bike workout, because power-based cycling is the only
kind TrainingPeaks accepts in this format. The structure is fine — it
just needs relabelling:
Do not pick % Max Heart Rate: TrainingPeaks re-reads the same
numbers as heart-rate percentages and every step shows 0 bpm.
Bike files need neither step — they import ready to ride in % FTP, and each one notes the Grepiac FTP it was built around so you can check it against the athlete's TrainingPeaks FTP.
Strength sessions are not included: an exercise circuit has no interval
structure to put in a .zwo.
Downloads the selected weeks as a .txt description per session plus a
summary CSV. TrainingPeaks' CSV import puts these on the calendar as
plain text — the intervals do not come through. Treat it as a
readable week pack or a paper backup; for workouts an athlete can
actually execute, use All .zwo above.
Downloads a .zip of structured-workout .fit files — one per
bike / run / swim session in the selection — for loading directly onto
a device, no TrainingPeaks in the loop. This is the batch version of the
.fit button on a single workout.
Load them on:
.fit files into the
GARMIN/NEWFILES folder while the device is plugged in. They show up
under Training → Workouts after it syncs..fit files
through the app's workout import, then push to the device.Power targets are encoded in watts at the athlete's Grepiac FTP on each session's date — check the device/app FTP matches, or the target watts won't line up. Where no FTP is on file, the steps are timed with no power target (open). Run and swim files carry the same %-of-threshold structure as watts, so they're most useful with a power meter (e.g. Stryd).
| You want… | Use |
|---|---|
| Structured workouts in the TP Workout Library (any sport) | All .zwo |
| A readable week pack / text on the TP calendar | Export to TP (text) |
| Workouts on the watch/head-unit now | Device .fit |
All three use the same week selection.
The same .zwo is on every swim, bike and run workout page —
Export .zwo, next to Export plan .fit → device. Useful when an
athlete wants one session rather than a week, and it carries the same
setup notes in its description.
If the athlete's swim goggles or watch pull structured workouts from TrainingPeaks (FORM goggles work this way), the chain is:
Grepiac → .zwo → TP Workout Library → switch to Swim + % Threshold
Pace → the device pulls it from TrainingPeaks.
The two switches matter here more than anywhere: a swim left labelled "Bike" in % FTP is not something a swim device will take sensibly.
A swim written in distance — 8×100, 4×50 drill — shows up in the
TrainingPeaks Workout Library with every step as a time, not a
distance. That is a limit of the file, not a mistake in the workout:
.zwo is the only planned-workout file the Library accepts, and a .zwo
step can only be a duration in seconds. (A .fit workout file does
carry real distance steps, but the Library refuses it.)
So every exported swim carries its set list in the description:
SET (% of CSS): 200 easy swim @ 78% on 20s / 100 kick @ 70% on 20s /
6×50 drill down, swim back @ 75% on 15s / … / Total 2k
Swim the set, not the step times. The metres are the instruction; the times are only our estimate of how long each one takes at that fraction of CSS, and they are what TrainingPeaks had room to store.
On a watch this does not apply. Device .fit — and a Bridge sync — writes true distance steps with the pool length, so an 8×100 counts lengths on the device exactly as written. Check in the goggles' own app that the workout arrived before relying on it poolside.
The route dropdown is grouped by where each course came from — Grepiac library (the shared race-course library), From coach … (routes your own coach uploaded), and Mine (your uploads). Only routes you may use are listed: the library, your active coaches' uploads, and your own. Names carry the edition year where known, e.g. Ironman 70.3 Tallinn (2026); a race course changes between years, and the year is which one.
When a course is updated (the organiser changed the route), the new edition replaces the old one in this dropdown and everywhere else — the old row is kept so plans that used it still work, but you will not be offered it again. Coaches upload a new edition with the year and a "Replaces…" pick; the same is true on the route manager.
Once a route is chosen and saved with a race, the same choice drives Courses for my device (/my-courses/): the race appears under Your upcoming races with its course ready to send to your Garmin, and a race-rehearsal session can be built from this plan's power targets.
Still stuck? Ask us a question and we'll write up an answer.
Ask a question