Skip to content
Command-line scripts to do things with Strava
Python Shell R
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.flake8
.gitignore
.travis.yml
README.md
download_fit_as_gpx.py
fits2gpxs.sh
gpx_heatmap.sh
rename_activities.py
splitter.py
stravaviz.R

README.md

strava-tools

Build Status Python: 3.6+ Code style: black

Command-line scripts to do things with Strava.

Exported data

Pre-GPDR, you could bulk export all your activities as GPX files which were named like 20170921-074112-Ride.gpx.

Post-GDPR, you can export an archive of your account which includes much more data, however your activities are now in their original file format (eg. GPX or FIT format, some gzipped, some not) and named like 971607640.gpx, 83514080.gpx.gz and 1243401459.fit.gz. (The Strava support page talks of deleting accounts when exporting, but you don't need to delete anything!)

Here are some tools and notes to have them in a similar format.

First request an archive from your account following this guide and wait for the email. Unzip export_xxxxxxx.zip and move the activities directory and activities.csv to the current dir.

Rename and unzip files

# Rename files from 1836025202.gpx to 20180912-064451-Ride.gpx
# First a test run without changing files
python3 rename_activities.py --dry-run

# Then do it
python3 rename_activities.py

# Unzip files, deletes GZ files
gunzip activities/*.gz

Convert FIT files

Here's some different methods to convert from FIT to GPX.

GPSBabel

If you have any FIT files, you can use GPSBabel to convert them:

# Install on Mac
brew install gpsbabel

# Convert activities/*.fit to activities/*.gpx, keeps FIT files
bash fits2gpxs.sh

# Optionally delete the FIT files
# rm activities/*.fit

The Wahoo Elemnt Bolt creates files in FIT version 2. Use GPSBabel 1.6.0 or later, or you may get fit: Unsupported protocol version 2.0 with older versions such as GPSBabel 1.5.4.

FIT-to-GPX

Alternatively, try Jeffrey Friedl's FIT-to-GPX.

  1. Download the Java FitCSVTool included with the free FIT SDK (direct download link).
wget https://raw.githubusercontent.com/jeffrey-friedl/FIT-to-GPX/master/fit2gpx
edit fit2gpx fits2gpx.sh

Update JAVA_FITCSV_CMD in fit2gpx to point to the file in the downloaded SDK and edit fits2gpxs to use fit2gpx instead of gpsbabel.

# Convert activities/*.fit to activities/*.gpx, keeps FIT files
bash fits2gpxs.sh

Export as GPX from Strava

Follow the Strava guide to export each file.

Alternatively, use download_fit_as_gpx.py to get several. See instructions at the top of the file.

Make stuff

dérive

Generate heatmaps by dragging and dropping files into https://erik.github.io/derive/

marcusvolz/strava

You can make some great visualisations with marcusvolz/strava. See that repo and stravaviz.R for examples.

Troubleshooting

If you get an error with the marcusvolz/strava visualisation tools when plotting elevations:

> p3 <- plot_elevations(data)
> ggsave("plots/elevations-all.png", p3, width = 20, height = 20, units = "cm")
Error in FUN(X[[i]], ...) : object 'ele' not found

It means not all the coordinate trackpoints in your GPX files have elevation values.

Some options:

  • Export those tracks from Strava. Strava makes altitude corrections, which is why their exports have points with elevation values when original files do not.

  • Skip plotting elevations.

heatmap.py

Generate heatmaps using gpx_heatmap.py. See instructions at the top of the file and update the HEATMAPPY path for the file downloaded from https://sethoscope.net/heatmap/

You can’t perform that action at this time.