Download all activities in CSV format

You can now download all activities in CSV format from the activity calendar. The CSV includes most things including training load, fitness, efficiency etc… So you can calculate your own things, figure out interesting plots and so on.

All fields starting with icu_ are calculated by Others may be calculated by or come from Strava, indicated on each field.

  • id Strava activity ID
  • start_date_local Date in local timezone in ISO-8601 format e.g. 2020-04-04T08:30:34
  • name Name or title
  • type Strava type: Ride, Run etc.
  • moving_time Strava moving time in seconds
  • distance Strava distance in meters
  • elapsed_time Strava elapsed time in seconds
  • total_elevation_gain Strava total climbing in meters
  • max_speed Strava max speed in meters/second
  • average_speed Strava average speed in meters/second
  • has_heartrate Does the activity have HR data (true/false)
  • max_heartrate Max HR calculated by
  • average_heartrate Average HR calculated by
  • calories Strava colories (Strava gets it from whatever created the actvity)
  • device_watts Does the activity have real (i.e. not virtual) power data (true/false)?
  • icu_average_watts Average power (icu_joules / icu_recording_time)
  • icu_normalized_watts Normalized watts (NP)
  • icu_joules Total energy expended
  • icu_intensity icu_normalized_watts * 100 / icu_ftp
  • icu_training_load Actual TSS or estimated from HR if no power is available
  • icu_training_load_edited Has icu_training_load been manually edited?
  • icu_fatigue ATL
  • icu_fitness CTL
  • icu_eftp Estimated FTP
  • icu_variability Variability index (icu_normalized_watts / icu_average_watts)
  • icu_efficiency Efficiency factor (icu_normalized_watts / average_heartrate)
  • trainer Flagged as trainer in Strava
  • commute Flagged as commute in Strava
  • workout_type 11 = race, From Strava, not sure of other values
  • icu_ftp User captured FTP
  • icu_w_prime User captured W’
  • icu_swim_ftp User captured swim FTP in secs/100m
  • hr_z1 Top of HR Z1
  • hr_z2 Top of HR Z2
  • hr_z3 Top of HR Z3
  • hr_z4 Top of HR Z4
  • hr_z5 Top of HR Z5
  • hr_z6 Top of HR Z6
  • hr_max Top of HR Z7
  • icu_resting_hr Resting HR
  • hr_z1_secs Secs in HR Z1
  • hr_z2_secs Secs in HR Z2
  • hr_z3_secs Secs in HR Z3
  • hr_z4_secs Secs in HR Z4
  • hr_z5_secs Secs in HR Z5
  • hr_z6_secs Secs in HR Z6
  • hr_z7_secs Secs in HR Z7
  • z1_secs Secs in power Z1
  • z2_secs Secs in power Z2
  • z3_secs Secs in power Z3
  • z4_secs Secs in power Z4
  • z5_secs Secs in power Z5
  • z6_secs Secs in power Z6
  • z7_secs Secs in power Z7
  • sweet_spot_secs Secs in power sweet spot zone
  • icu_weight In kg
  • icu_ignore_power Ignore power data from this activity
  • icu_ignore_hr Ignore HR data from this activity
  • icu_ignore_time Ignore time from this activity (dont count towards weekly totals)
  • icu_recording_time Elapsed time with time gaps of more than 30s excluded
  • icu_warmup_time Secs of the start of the activity excluded from decoupling calculations
  • icu_cooldown_time Secs of the end of the activity excluded from decoupling calculations
  • icu_hrrc Highest drop in HR over 1 minute from threshold HR or higher in the activity
  • icu_hrrc_start_bpm Starting HR of the icu_hrrc value
  • icu_hrrc_avg_watts Average power during the minute
  • icu_power_spike_threshold Percentage for power spike detection
  • icu_pm_ftp FTP derived from best max effort on this ride
  • icu_pm_cp CP modelled from best max effort on this ride
  • icu_pm_w_prime W’ modelled from best max effort on this ride
  • icu_pm_p_max pMax modelled from best max effort on this ride
  • start_date Start date in UTC timezone in ISO-8601 format e.g. 2020-04-05T05:56:41Z
  • icu_sync_date When last downloaded from Strava and analysed by in ISO-8601 format
  • timezone Strava timezone

Hi David,

This is great! I can see the API request is linked to athlete ID so this could be called elsewhere - but is there any chance you could provide an authentication endpoint with Combining the CSV export with requests to /api/activity/<activity_id>/streams and other endpoints would allow integration into tools such as GoldenCheetah.

Will do. Thats easy enough and on the list. I just need to be very careful to not look like a proxy for the Strava API (thats not allowed). Nearly everything in the CSV is calculated by so I think thats ok.

1 Like

I should note that all the times are in seconds and distances etc. are metric.

Could you add the estimated FTP for each activity in the csv file? Not only the maximum estimated FTP.

1 Like

Hi David,

Thanks for the quick response - yeah that makes a lot of sense!

I just added those fields after power_spike_threshold. These are for the power model for the ride. Note that this is looked up from the best max effort on the ride and not derived from the whole ride power curve.

1 Like

A fantastic option. Progress can be seen and this motivates me to continue training :slight_smile: Chart from the last five months.

1 Like

Thats neat though you should probably swap things around so the trend line goes up! :slight_smile:

There is now an API with the CSV download the sole endpoint (so far!).

API access to

1 Like

Hi David, great functionality. Thank you for that.
I use the CSV download as one of the rare functionalities of Garmin Connect which gives the user ability to check the data in more details - tailor made reporting. I would like to use download CSV more often, but need more core data e.g. Power, TSS, NP etc. Is there a chance to provide each user a selection of data to select for the download (tick-boxes)?
However, the first look to the data of download raised a lot of questions.

  • Moving time in seconds is fine, but should be part of a structured field naming convention
  • Max and Average speed is incorrect or with another measurement apart from kmph or mph
  • Pleae provide every single field into the selection - users will more than happy to analyze the data on their own (I would pay for it and would sell my Edge 830 to move to Wahoo ROAM)

Could you let me know, whether we can expect changes?
Thank you so much in advance. Take care, stay healthy and waxed chain right side! Cheers Ralf

The fields you are looking for are there, I can’t use the usual names as they are trademarked.

  • icu_training_load = TSS
  • icu_normalized_watts = NP

I am busy brewing a batch of beer but will publish a glossary on this thread later today.


I have added a field glossary to the post at the top of this thread. I will add a field selector soon.

That should be just about everything. If something is missing please let me know and I will add it if possible.