Strava Skill
name: strava
by bohdanpodvirnyi · published 2026-03-22
$ claw add gh:bohdanpodvirnyi/bohdanpodvirnyi-strava---
name: strava
description: Load and analyze Strava activities, stats, and workouts using the Strava API
homepage: https://developers.strava.com/
metadata: {"clawdbot":{"emoji":"🏃","requires":{"bins":["curl"],"env":["STRAVA_ACCESS_TOKEN"]},"primaryEnv":"STRAVA_ACCESS_TOKEN"}}
---
# Strava Skill
Interact with Strava to load activities, analyze workouts, and track fitness data.
Setup
1. Create a Strava API Application
1. Go to https://www.strava.com/settings/api
2. Create an app (use `http://localhost` as callback for testing)
3. Note your **Client ID** and **Client Secret**
2. Get Initial OAuth Tokens
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_allAfter 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_codeThis returns `access_token` and `refresh_token`.
3. Configure Credentials
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"Usage
List Recent Activities
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"Filter Activities by Date
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 Activity Details
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 Athlete Profile
Get the authenticated athlete's profile:
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
"https://www.strava.com/api/v3/athlete"Get Athlete Stats
Get athlete statistics (replace ATHLETE_ID):
curl -s -H "Authorization: Bearer ${STRAVA_ACCESS_TOKEN}" \
"https://www.strava.com/api/v3/athletes/ATHLETE_ID/stats"Pagination
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"Token Refresh
Access tokens expire every 6 hours. Refresh using the helper script:
bash {baseDir}/scripts/refresh_token.shOr 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.
Common Data Fields
Activity objects include:
Rate Limits
If you hit rate limits, responses will include `X-RateLimit-*` headers.
Tips
Examples
Get 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"}'Error Handling
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).
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...