HomeBrowseUpload
← Back to registry
// Skill profile

Strava Skill

name: strava

by bohdanpodvirnyi · published 2026-03-22

开发工具数据处理加密货币
Total installs
0
Stars
★ 0
Last updated
2026-03
// Install command
$ claw add gh:bohdanpodvirnyi/bohdanpodvirnyi-strava
View on GitHub
// Full documentation

---

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_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`.

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

Common Data Fields

Activity objects include:

  • `name` — Activity title
  • `distance` — Distance in meters
  • `moving_time` — Moving time in seconds
  • `elapsed_time` — Total time in seconds
  • `total_elevation_gain` — Elevation gain in meters
  • `type` — Activity type (Run, Ride, Swim, etc.)
  • `sport_type` — Specific sport type
  • `start_date` — Start time (ISO 8601)
  • `average_speed` — Average speed in m/s
  • `max_speed` — Max speed in m/s
  • `average_heartrate` — Average heart rate (if available)
  • `max_heartrate` — Max heart rate (if available)
  • `kudos_count` — Number of kudos received
  • Rate Limits

  • **200 requests** per 15 minutes
  • **2,000 requests** per day
  • If you hit rate limits, responses will include `X-RateLimit-*` headers.

    Tips

  • Convert Unix timestamps: `date -d @TIMESTAMP` (Linux) or `date -r TIMESTAMP` (macOS)
  • Convert meters to km: divide by 1000
  • Convert meters to miles: divide by 1609.34
  • Convert m/s to km/h: multiply by 3.6
  • Convert m/s to mph: multiply by 2.237
  • Convert seconds to hours: divide by 3600
  • Parse JSON with `jq` if available, or use `grep`/`sed` for basic extraction
  • 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).

    // Comments
    Sign in with GitHub to leave a comment.
    // Related skills

    More tools from the same signal band