Import Strava Data to Google Sheets
In this guide, we’ll walk through how to pull Strava data data directly into Google Sheets, using the API Connector add-on for Sheets. Strava is, of course, a well-known fitness tracker website and app. The Strava API only supports authentication via OAuth2, so we’ll be connecting using API Connector’s built-in OAuth2 integration for Strava (this is a paid feature, please install API Connector for a free 7-day trial or upgrade to access).
For a real-life example, please also check out this awesome video made by an API Connector user!
CONTENTS
- Before You Begin
- Part 1: Connect to the Strava API
- Part 2: Create your Strava API Request URL
- Part 3: Pull Strava API Data into Sheets
- Part 4: More Example API URLs
- Part 5: Handle Pagination
BEFORE YOU BEGIN
Click here to install the API Connector add-on from the Google Marketplace.
PART 1: CONNECT TO THE STRAVA API
If you haven’t connected API Connector to Strava before, you’ll first need to initiate the connection as follows:
- Open up Google Sheets and click Add-ons > API Connector > Manage Connections.
- In the list of available connections, find Strava and click Connect.
- You will be directed to strava.com and asked to sign in, if you haven’t already. You’ll also be asked to authorize the connection.
- You’ll then be returned to your Google Sheet, and can verify that your Strava connection is active in the Connections screen.
PART 2: CREATE YOUR STRAVA API REQUEST URL
For our first request, we’ll get some basic information about your Strava account.
- API root: https://www.strava.com/api
- Endpoint: /v3/athlete
Putting it all together, we get the full API Request URL.
https://www.strava.com/api/v3/athlete
PART 3: PULL STRAVA API DATA INTO SHEETS
Now let’s enter our URL into API Connector and import Strava data into Google Sheets!
- In API Connector, click Create, and paste in the Request URL we created above.
- We don’t need any headers so just leave that section as is.
- Under Authentication, choose Strava from the dropdown menu.
- Create a new tab and click ‘Set current’ to use that tab as your data destination.
- Name your request and click Run. A moment later you’ll see some information about yourself populate your sheet.
PART 4: MORE EXAMPLE API URLS
To get more information about your Strava activities, try the following URLs (one at a time).
- Get your own starred segments
https://www.strava.com/api/v3/segments/starred
- Get a public list of running races
https://www.strava.com/api/v3/running_races
- Get your own activities
https://www.strava.com/api/v3/athlete/activities
To see more API endpoints and example responses, I suggest checking out out the Strava API playground located at https://developers.strava.com/playground/.
PART 5: HANDLE PAGINATION
Note Strava’s limits on the number of records returned on a response. By default, only 30 records will be returned unless you use pagination handling as described in their documentation.
This means that to get 200 records, you’d use the ‘per_page’ parameter, and to return more than 200 you’d then make subsequent requests using the ‘page’ parameter.
With API Connector you can loop through these automatically with pagination handling, like this:
- API URL: enter your request URL as usual, making sure to include ?per_page=200
- Pagination type:
page parameter
- Page parameter:
page
- Number of pages: enter the number of pages you’d like to fetch
Hi, I tried using this with the endpoint https://www.strava.com/api/v3/athlete/activities but it only returned 30 activities. The cutoff point seemed random, it only went back to May 2020.
Is this a problem with Strava’s OAuth? Should this API connection work in 2021 still?
Thanks
Good question, I just checked Strava’s API docs and by default they only send 30 records at a time. To get more, you can add
?per_page=200
to the end of your URL. If you have more than 200 records, you would paginate through using “page parameter” pagination. I’ll update the article to include this info.Hi Anna,
Do you think it’s possible to get activity date from strava. I don’t see it in Strava API documentation.
Or can we get data using API Connector, by filtering “Today Activities” Only (based on date range) ?
Hey Rudy, when you run the
https://www.strava.com/api/v3/athlete/activities
request, it returns a “start_date” field, is that what you’re looking for?Sorry forget to put “Club”, So I was looking for Start Date for Club Activities.
Gotcha. Based on what I see in their API docs, they only return the following for the
/clubs/{id}/activities
endpoint:[
{
"resource_state": 2,
"athlete": {
"resource_state": 2,
"firstname": "Peter",
"lastname": "S."
},
"name": "World Championship",
"distance": 2641.7,
"moving_time": 577,
"elapsed_time": 635,
"total_elevation_gain": 8.8,
"type": "Ride",
"workout_type": null
}
]
There’s no date in there so it doesn’t look like this is available. I checked and found quite a few people complaining about this (e.g. here, here, here). Sorry about that.
owh, ok. Thanks Ana for helping.
Regards,
Rudy
Hi,
would you mind making an example including activity stream? I can’t seem to make that working
That is, I can run: https://www.strava.com/api/v3/athlete/activities/{id]/streams
, but I can’t make it return anytthing but distance.
I think it only returns distance, at least that’s what the example in their docs shows. What are you trying to get?
I’m trying to make a heart rate based measure of training load. Currently I use the open software Golden Cheetah to do this and copy-paste the values over to Google Sheets.
I see. Their docs are pretty unclear on this point, and I don’t have my own data to test with, but could you please try this?
https://www.strava.com/api/v3/activities/{id}/streams?keys=distance,latlng,velocity_smooth,altitude,heartrate&key_by_type=true
Let me know if that gets you back what you’re looking for.
is there a means to use values from the sheet as parameters on the api. For example, the strava gear api requires the gearid which can be gotten from activities. I would like to pass the gearid to the api in a loop to get all the gear records.
Sure, please see this article about referencing cells in your requests: https://mixedanalytics.com/knowledge-base/api-connector-create-api-request-based-on-cell/
The section titled “Reference Multiple Cells” shows how you’d loop through a list of cells and plug the values into your request.