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 Intervals.icu. Others may be calculated by Intervals.icu 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 Intervals.icu
  • average_heartrate Average HR calculated by Intervals.icu
  • 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 Intervals.icu in ISO-8601 format
  • timezone Strava timezone
6 Likes

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 intervals.icu? 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 Intervals.icu 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.

icu_pm_ftp
icu_pm_cp
icu_pm_w_prime
icu_pm_p_max
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 Intervals.icu

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 intervalls.icu 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 intervals.icu 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.

2 Likes

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.

2 Likes

Is it possible to add the “Description” field into the CSV export?

Hi, would appreciate it if gear could be added to the CSV export as well. it is available through the API in individual activities but not in the entire CSV GET.

I have added gear.

I added description.

The CSV now also includes all custom activity fields.

1 Like

@david you’ve changed something.
My linked csv file used to look like this
image
where Column C is just me extrapolating the date from your date field, but since your update (or something else, as it only started today) its looking like this


It looks like its bringing in the comments field from Strava.

Is there a way I can tell it not to ? If its going to brake something else I might be able to find a work around.

What are you importing the CSV into? I just downloaded yours and it imported fine into Numbers and another tool on my Mac so I think the CSV is well formed.

I added gear and description columns as well as custom activity fields.

I’m using the API to import into Excel.
I’ve just disabled winsock.com in Strava (I dont really use the info anyway), I’ll try during the day to force some updates and see if it doesnt fix the import.

I found the problem. Your descriptions contained carriage returns and that was breaking the Excel import. I have removed those from the CSV. It should work now. Tx for the report.