Yes, you can switch. And no, you don’t start over at zero.
AthleteOS takes your exported .FIT files, replays the math from your earliest activity, and your fitness score (CTL) lands exactly where TrainingPeaks left off. No manual seeding. No guessing. No fake fitness number while the algorithm warms up.
Here’s everything you need to know to move your full training history — and why doing this the right way matters more than you might think.
What Is CTL (and Why Your Training History Is the Formula)
CTL stands for Chronic Training Load. It’s the platform’s best estimate of your current fitness. Every workout feeds into it. Every rest day draws it down a little. TrainingPeaks calls it CTL. AthleteOS calls it your fitness score. Same number, same math.
The fitness score is an exponentially weighted moving average of your daily TSS (Training Stress Score) over a 42-day window. A one-hour ride at your threshold power produces exactly 100 TSS. An easy recovery ride produces 20–40 TSS. A long Zone 2 ride lasting three hours lands around 150–210 TSS.
Each new day, the formula runs:
Fitness score today = Fitness score yesterday + (TSS today − Fitness score yesterday) / 42
That’s it. The number pulls toward your recent TSS and decays away from old training. A single day’s workout has a half-life of about 29 days inside this formula. After 29 days, that session contributes half as much to your fitness score as it did on the day you did it.
The formula also tracks fatigue (ATL) — the same calculation but using a 7-day window instead of 42. Fatigue responds fast. Fitness responds slow. The gap between them is your form score (TSB), calculated as yesterday’s fitness score minus yesterday’s fatigue score.
That gap tells you whether you’re race-ready or digging a hole.
Why Starting at CTL=0 Breaks Your Ramp Rate and Peaking Plan
This is the part most articles skip. Starting at zero isn’t just annoying. It actively gives you wrong advice.
The fitness score needs roughly 84 days — two full 42-day time constants — to converge on your real fitness level when starting from zero. During those 84 days, every metric that depends on it is off.
Ramp rate is the first casualty. Safe ramp rate for most athletes is 5–8 fitness score points per week during a build block. Runners should stay closer to 3–5. Going above 10 points per week for more than one week raises injury and illness risk sharply, according to Joe Friel’s ramp rate research.
When your fitness score starts at zero, even a modest training week looks like a ramp-rate violation. Your first week of 50-TSS-per-day training reads as a +50 jump from zero. The algorithm flags it as dangerous. It isn’t. You’re fit. The number just doesn’t know that yet.
The detraining research makes this concrete. A 2023 systematic review of 41 studies published in Frontiers in Physiology found that VO2max drops roughly 7% within 12 days of full training cessation. That’s real detraining. An athlete who switches platforms and trains straight through has lost zero fitness. But a CTL=0 start treats them as if they just came off a two-month break.
Your form score (TSB) breaks too. Form is calculated from yesterday’s fitness and fatigue scores. With a false-zero fitness score, your form score reads artificially positive. The platform might tell you you’re fresh and ready to race when you’re actually three weeks into a heavy build block. That’s a dangerous signal.
TrainingPeaks actually acknowledges this in their own help documentation: a manually seeded CTL should be treated cautiously for the first 4–6 weeks after account creation.
Four to six weeks of unreliable guidance is a long time to be flying blind.
The Math Behind CTL, ATL, and TSB: Aerobic Decoupling Explained
The formula comes from a 1976 paper by Calvert, Banister, Savage, and Bach — the Impulse-Response model — published in IEEE Transactions on Systems, Man, and Cybernetics. Their original fitness decay constant was 49–50 days. Coggan simplified it to 42 days for practical use in TrainingPeaks.
Here are the full update equations:
Fitness score (CTL):
CTL_today = CTL_yesterday + (TSS_today - CTL_yesterday) / 42
Fatigue score (ATL):
ATL_today = ATL_yesterday + (TSS_today - ATL_yesterday) / 7
Form score (TSB):
TSB = CTL_yesterday - ATL_yesterday
TSS for cycling (power meter):
TSS = (duration_seconds x NP x IF) / (FTP x 3600) x 100
where NP = normalized power, IF = NP / FTP
The math is deterministic. Given a complete list of daily TSS values — from day one of training to today — any platform can replay this recurrence and arrive at the exact same fitness score. The number isn’t proprietary. It’s arithmetic.
Think of it like a bank ledger. Every workout is a deposit. Rest days are small withdrawals. A new platform that inherits the full ledger history can calculate your exact balance. A platform that starts a new ledger from zero doesn’t know what was in the old account.
Your training history is the formula.
What TrainingPeaks Lets You Export (and Its Limits)
TrainingPeaks doesn’t make this easy, but it’s doable.
Go to Settings → Export Data and select a date range. The maximum window per export batch is 12 months. If you have three years of history, you need three separate exports. Files come out as .FIT and .TCX in a ZIP archive. PWX is not available as an export format — despite being an upload format — so don’t go looking for it.
The TrainingPeaks API closed in December 2016. There’s no programmatic route to pull your own data. Manual export is your only option.
If you trained across multiple years, Garmin Connect and Strava are often faster routes to your full history:
- Garmin Connect: Go to garmin.com/account/datamanagement. Request a full history export. Garmin delivers a ZIP of every .FIT file within 24–48 hours. No year cap. One request covers everything.
- Strava: Settings → My Account → Download or Delete Your Account → Request Your Archive. You get one folder with every activity as a .FIT, .GPX, or .TCX file, plus an activities.csv summary. Also no year cap.
If you used Garmin or Strava to upload your workouts to TrainingPeaks, Garmin Connect is the cleanest source for full history. All your recorded data is already there.
CTL Ranges by Athlete Level
Before migrating, it helps to know where your fitness score should land. These ranges give you a reality check after the import.
Ironman athletes should expect their fitness score to drop 8–10% during taper. That’s not detraining. That’s the plan working. The form score (TSB) climbs as the fitness score dips, and you want to hit race day with a form score between +15 and +25.
For more on building this kind of load structure, see how Zone 2 training builds your aerobic base and the aerobic decoupling guide for tracking whether your fitness score gains are translating to real endurance.
Step-by-Step: Moving Your History to AthleteOS
Here’s the full process.
Step 1: Export from TrainingPeaks. Log in, go to Settings → Export Data, select a 12-month window, and download the ZIP. Repeat for each year of history. Label the ZIPs by year so you don’t lose track.
Step 2: Check Garmin Connect or Strava. If your activities are synced there, request a full bulk export from either platform. This often gets you more history in fewer steps than the year-by-year TrainingPeaks export.
Step 3: Upload to AthleteOS. Use the workout import tool to drag your ZIP files or individual .FIT and .TCX files. AthleteOS accepts all three formats.
Step 4: Let the EWMA replay. AthleteOS runs the CTL recurrence forward from your earliest activity. Your Performance Management Chart rebuilds automatically. No seed estimate. No manual CTL entry. The math resolves to the correct number.
Your ramp-rate advisor and race-day peaking planner are accurate from day one.
A Real Migration: What the Numbers Look Like
Consider a rider I’ll call David — 44, targeting his third Ironman, 10–12 hours per week. David had four years of TrainingPeaks history. His fitness score sat at 94 in late May, heading into a six-week peak block.
He exported three year-by-year ZIPs from TrainingPeaks and one full-history ZIP from Garmin Connect (which covered the overlapping period more cleanly). After uploading to AthleteOS, his Performance Management Chart rebuilt with a fitness score of 93 — one point off from TrainingPeaks due to a single duplicate activity that the deduplication filter caught and excluded. His fatigue score matched exactly. His form score read -18, consistent with being three weeks into hard training.
His ramp-rate advisor flagged a clean build trajectory from week one. No false alarms. No 4–6 week calibration window to sit through.
David’s situation is typical. The math is the math. Move the data, and the chart moves with it.
How AthleteOS Keeps Your PMC Accurate Going Forward
Once your history is loaded, AthleteOS updates your fitness score, fatigue score, and form score automatically after every synced workout. The Performance Management Chart shows the full curve — past and projected — so you can see exactly when your form score will hit the +15 to +25 window before your A-race.
The AI coach reads the same numbers. If your ramp rate exceeds 8 points per week, AthleteOS flags it and suggests a recovery day or a reduced-load week before the load becomes a liability. If your form score on race week hasn’t climbed into positive territory, the taper structure adjusts.
For a deeper look at how ramp rate connects to injury risk, see the ACWR safe zone guide and how to use TSS to prepare for an Ironman.
TrainingPeaks charges $134.99 per year for access to this chart. AthleteOS gives you the same model — rebuilt from the same math — as part of the core product. The formula hasn’t changed since Andrew Coggan published it. Neither has the argument for using it.
Your history is yours. Take it with you.