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.
Type Name Latest commit message Commit time
Failed to load latest commit information.


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 (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 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 --dry-run

# Then do it

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

Convert FIT files

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


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

# 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.


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

  1. Download the Java FitCSVTool included with the free FIT SDK (direct download link).
edit fit2gpx

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

Export as GPX from Strava

Follow the Strava guide to export each file.

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

Make stuff


Generate heatmaps by dragging and dropping files into


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


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.

Generate heatmaps using See instructions at the top of the file and update the HEATMAPPY path for the file downloaded from

You can’t perform that action at this time.