Strava
Load and analyze Strava activities, stats, and workouts using the Strava API
Load and analyze Strava activities, stats, and workouts using the Strava API
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Interact with Strava to load activities, analyze workouts, and track fitness data.
http://localhost as callback for testing)Visit this URL in your browser (replace CLIENT_ID):
https://www.strava.com/oauth/authorize?client_id=CLIENT_ID&response_type=code&redirect_uri=http://localhost&approval_prompt=force&scope=activity:read_all
After authorizing, you'll be redirected to
http://localhost/?code=AUTHORIZATION_CODE
Exchange the code for tokens:
curl -X POST https://www.strava.com/oauth/token \ -d client_id=YOUR_CLIENT_ID \ -d client_secret=YOUR_CLIENT_SECRET \ -d code=AUTHORIZATION_CODE \ -d grant_type=authorization_code
This returns
access_token and refresh_token.
Add to
~/.clawdbot/clawdbot.json:
{ "skills": { "entries": { "strava": { "enabled": true, "env": { "STRAVA_ACCESS_TOKEN": "your-access-token", "STRAVA_REFRESH_TOKEN": "your-refresh-token", "STRAVA_CLIENT_ID": "your-client-id", "STRAVA_CLIENT_SECRET": "your-client-secret" } } } } }
Or use environment variables:
export STRAVA_ACCESS_TOKEN="your-access-token" export STRAVA_REFRESH_TOKEN="your-refresh-token" export STRAVA_CLIENT_ID="your-client-id" export STRAVA_CLIENT_SECRET="your-client-secret"
Get the last 30 activities:
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athlete/activities?per_page=30"
Get the last 10 activities:
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athlete/activities?per_page=10"
Get activities after a specific date (Unix timestamp):
# Activities after Jan 1, 2024 curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athlete/activities?after=1704067200"
Get activities in a date range:
# Activities between Jan 1 - Jan 31, 2024 curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athlete/activities?after=1704067200&before=1706745600"
Get full details for a specific activity (replace ACTIVITY_ID):
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/activities/ACTIVITY_ID"
Get the authenticated athlete's profile:
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athlete"
Get athlete statistics (replace ATHLETE_ID):
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athletes/ATHLETE_ID/stats"
Navigate through pages:
# Page 1 (default) curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athlete/activities?page=1&per_page=30"Page 2
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}"
"https://www.strava.com/api/v3/athlete/activities?page=2&per_page=30"
Access tokens expire every 6 hours. Refresh using the helper script:
bash {baseDir}/scripts/refresh_token.sh
Or manually:
curl -s -X POST https://www.strava.com/oauth/token \ -d client_id="${STRAVA_CLIENT_ID}" \ -d client_secret="${STRAVA_CLIENT_SECRET}" \ -d grant_type=refresh_token \ -d refresh_token="${STRAVA_REFRESH_TOKEN}"
The response includes a new
access_token and refresh_token. Update your configuration with both tokens.
Activity objects include:
name — Activity titledistance — Distance in metersmoving_time — Moving time in secondselapsed_time — Total time in secondstotal_elevation_gain — Elevation gain in meterstype — Activity type (Run, Ride, Swim, etc.)sport_type — Specific sport typestart_date — Start time (ISO 8601)average_speed — Average speed in m/smax_speed — Max speed in m/saverage_heartrate — Average heart rate (if available)max_heartrate — Max heart rate (if available)kudos_count — Number of kudos receivedIf you hit rate limits, responses will include
X-RateLimit-* headers.
date -d @TIMESTAMP (Linux) or date -r TIMESTAMP (macOS)jq if available, or use grep/sed for basic extractionGet running activities from last week with distances:
LAST_WEEK=$(date -d '7 days ago' +%s 2>/dev/null || date -v-7d +%s) curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athlete/activities?after=${LAST_WEEK}&per_page=50" \ | grep -E '"name"|"distance"|"type"'
Get total distance from recent activities:
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \ "https://www.strava.com/api/v3/athlete/activities?per_page=10" \ | grep -o '"distance":[0-9.]*' | cut -d: -f2 | awk '{sum+=$1} END {print sum/1000 " km"}'
If you get a 401 Unauthorized error, your access token has expired. Run the token refresh command.
If you get rate limit errors, wait until the limit window resets (check
X-RateLimit-Usage header).No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.