How to Bulk Upload Workouts to TrainingPeaks (The Only Method That Works)
TrainingPeaks has no bulk upload feature for athletes. Manual entry takes hours. Here's every method we tested — and the one tool that actually works.
You've built your training plan. Maybe in a spreadsheet, maybe from ChatGPT, maybe from a coaching book. Now you need 60-100 workouts on your TrainingPeaks calendar. And you've discovered the frustrating truth: TrainingPeaks has no bulk upload feature for athletes.
You can enter workouts one at a time. Click "Add Workout," select the sport, type the title, set duration, write the description, pick the date, save. Repeat 60-100 times. That's 3-5 hours of data entry for a typical training plan. It's the reason most plans end up as forgotten PDFs instead of actionable calendars.
This guide explains every option for getting workouts into TrainingPeaks in bulk — including the one method that actually works for individual athletes.
Why TrainingPeaks Doesn't Have Bulk Upload
TrainingPeaks is built as a coach-athlete platform. The intended workflow is:
- Coach creates a plan using the coach interface
- Coach assigns the plan to an athlete
- Workouts appear on the athlete's calendar
Coaches have tools for this: workout libraries, plan templates, drag-and-drop scheduling. Individual athletes don't get these tools. The athlete interface is designed for viewing and completing workouts — not creating them in bulk.
This creates a gap for self-coached athletes, which is the majority of TrainingPeaks users. You can analyze your training data beautifully, but getting your planned workouts onto the calendar is a manual nightmare.
Methods That Don't Work (And Why)
Copy-Paste from a Spreadsheet
TrainingPeaks doesn't accept pasted data. There's no "Import from CSV" or "Paste from clipboard" feature in the athlete interface. The data fields are individual form inputs — you have to fill each one manually.
TrainingPeaks API (For Individual Athletes)
The TrainingPeaks API exists and supports creating workouts programmatically. However, it requires a bearer token and athlete ID, and there's no official documentation for individual athlete use. The API is primarily designed for partner platforms (TrainerRoad, Zwift, etc.) and certified coaches.
Building your own integration means understanding the API endpoints, authentication, workout schema, sport type IDs, and rate limits. It's technically possible but requires significant development effort.
Zapier / Make / Automation Tools
TrainingPeaks isn't available as a standard integration on automation platforms. No Zapier trigger, no Make module, no n8n node. You can't automate workout creation through these tools.
TrainingPeaks Plan Store
You can buy pre-built plans from the TrainingPeaks Plan Store, and they land directly on your calendar. But you can't upload your own custom plans this way. The Plan Store is for purchasing, not importing.
Third-Party Training Apps
Apps like TrainerRoad, Zwift, and Today's Plan can sync their own workouts to TrainingPeaks. But they only push workouts created within their platforms. You can't use them to import arbitrary plans from external sources.
The Method That Works: TrainingDojo
TrainingDojo is the only tool that lets individual athletes bulk-upload workouts to TrainingPeaks from any source. It uses the TrainingPeaks API to create workouts programmatically, handling all the complexity — authentication, sport type mapping, rate limiting, date calculation — so you don't have to.
How It Works
- Prepare your plan as CSV — either generate it with AI or convert from your existing format
- Enter your TrainingPeaks credentials — bearer token and athlete ID
- Upload and preview — see every workout with calculated dates before importing
- Import — TrainingDojo creates each workout via the API, rate-limited to avoid throttling
What Gets Imported
Each workout is created in TrainingPeaks with:
- Sport type: Correctly mapped to TrainingPeaks sport IDs (Cycling, Running, Swimming, etc.)
- Workout subtype: Endurance, Intervals, Tempo, Recovery, Race, etc.
- Title: Descriptive workout name
- Date: Calculated from your start date and day numbers
- Duration: Total workout time in minutes
- TSS: Training Stress Score (if provided)
- Description: Full workout details, intervals, power targets, pace prescriptions
Speed and Reliability
TrainingDojo rate-limits API calls to 1.5 requests per second to respect TrainingPeaks' API limits. A 12-week plan with 60 workouts imports in about 40 seconds. An 18-week plan with 90 workouts takes about a minute. Real-time progress shows you each workout as it's created.
Step-by-Step: Bulk Upload Your Training Plan
Step 1: Format Your Plan as CSV
Your plan needs to be in this CSV format:
day,sport,subtype,title,duration_minutes,tss,description,phase
1,Running,Easy,Easy Run,45,35,Easy pace at 9:30-10:00/mi. Stay conversational.,Base
2,Cycling,Intervals,Sweet Spot,75,80,3x12min at 88-93% FTP with 5min recovery.,Base
3,Rest,,Rest Day,0,0,Complete rest.,BaseDon't have a CSV yet? Use AI to convert your plan. Paste your plan into ChatGPT or Claude and ask it to convert to this format. Or use TrainingDojo's AI generator to create a plan already in the right format.
Step 2: Get Your TrainingPeaks Bearer Token
Log into TrainingPeaks in your browser. Open Developer Tools (F12 → Network tab). Navigate to any page in TrainingPeaks. Find a request to the TrainingPeaks API and copy the Authorization header value (starts with "Bearer"). Our detailed tutorial has screenshots of this process.
Step 3: Find Your Athlete ID
Your athlete ID is in the TrainingPeaks URL when you view your calendar:app.trainingpeaks.com/athlete/YOUR_ID/calendar. It's a numeric ID.
Step 4: Upload to TrainingDojo
- Go to trainingdojo.app/import
- Enter your bearer token and athlete ID
- Upload your CSV file (or paste the content)
- Select your plan start date
- Review the workout preview — check dates, sport types, and descriptions
- Click "Import to TrainingPeaks"
Step 5: Verify in TrainingPeaks
Refresh your TrainingPeaks calendar. Every workout appears on the correct date with full details. They show up as planned workouts — complete with sport type icon, title, duration, and description.
Tips for Large Plan Uploads
Bearer Token Expiration
TrainingPeaks bearer tokens expire. If your upload fails partway through, your token may have expired. Get a fresh token and retry. TrainingDojo shows exactly which workouts succeeded and which failed, so you won't create duplicates.
Sport Type Matching
Use standard sport names in your CSV: Cycling, Running, Swimming, Strength, Walking, Rowing. TrainingDojo maps these to the correct TrainingPeaks sport type IDs. Non-standard sport names will default to "Other."
Handling Rest Days
You can include rest days in your CSV (duration: 0, description: "Rest") or simply skip those day numbers. TrainingDojo only creates workouts — empty days remain empty on your TrainingPeaks calendar.
Large Plans (20+ Weeks)
Plans with 100+ workouts work fine. The upload takes a couple of minutes due to rate limiting, but TrainingDojo handles it reliably. You'll see real-time progress as each workout is created.
The Faster Alternative: Generate + Import in One Step
If you don't already have a plan, skip the CSV step entirely. TrainingDojo's AI generates personalized training plans for cycling, running, triathlon, and multisport — and imports them directly to TrainingPeaks. No CSV, no formatting, no conversion. Describe your goals and the AI handles everything.
For a comparison of AI plan generators, see our 2026 AI training plan generator comparison.
Ready to stop entering workouts one by one? Bulk upload your entire training plan to TrainingPeaks in minutes. Import any plan at trainingdojo.app/import or generate a new one at trainingdojo.app/generate.