skills$openclaw/strava
bohdanpodvirnyi769

by bohdanpodvirnyi

strava – OpenClaw Skill

strava is an OpenClaw Skills integration for coding workflows. Load and analyze Strava activities, stats, and workouts using the Strava API

769 stars9.3k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026coding

Skill Snapshot

namestrava
descriptionLoad and analyze Strava activities, stats, and workouts using the Strava API OpenClaw Skills integration.
ownerbohdanpodvirnyi
repositorybohdanpodvirnyi/strava
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @bohdanpodvirnyi/strava
last updatedFeb 7, 2026

Maintainer

bohdanpodvirnyi

bohdanpodvirnyi

Maintains strava in the OpenClaw Skills directory.

View GitHub profile
File Explorer
5 files
.
scripts
refresh_token.sh
1.3 KB
_meta.json
273 B
README.md
2.4 KB
SKILL.md
6.0 KB
SKILL.md

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

README.md

Strava Skill for Clawdbot

🏃 Load and analyze your Strava activities, stats, and workouts using the Strava API.

Features

  • ✅ List recent activities with pagination
  • ✅ Filter activities by date ranges
  • ✅ Get detailed activity stats (distance, pace, heart rate, elevation)
  • ✅ Access athlete profile and cumulative statistics
  • ✅ Auto token refresh helper script
  • ✅ Rate limit aware (200/15min, 2000/day)
  • ✅ Works with curl only (no additional dependencies)

Quick Start

1. Create Strava API Application

Visit https://www.strava.com/settings/api and create an app.

2. Get OAuth Tokens

Follow the setup instructions in SKILL.md to obtain your access token and refresh token.

3. Configure

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"
        }
      }
    }
  }
}

Usage Examples

Ask your agent:

  • "Show me my last 10 Strava activities"
  • "What activities did I do last week?"
  • "Get details for my most recent run"
  • "What's my total distance this month?"
  • "Show my Strava profile and stats"

What You Can Do

  • List Activities: Recent workouts with customizable page size
  • Filter by Date: Query specific date ranges using Unix timestamps
  • Activity Details: Full metrics including pace, heart rate, elevation
  • Athlete Stats: Profile info and cumulative statistics
  • Token Management: Auto-refresh expired tokens (expire every 6 hours)

API Coverage

  • GET /athlete/activities - List activities
  • GET /activities/{id} - Activity details
  • GET /athlete - Athlete profile
  • GET /athletes/{id}/stats - Athlete statistics
  • POST /oauth/token - Token refresh

Documentation

See SKILL.md for complete setup instructions, API reference, and advanced usage.

Requirements

  • curl (bundled with macOS/Linux)
  • Strava API application credentials
  • OAuth access token

Links

License

MIT

Author

Created for Clawdbot AI Assistant


🦞 Part of the Clawdbot skill ecosystem

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

  • OpenClaw CLI installed and configured.
  • Language: Markdown
  • License: MIT
  • Topics:

FAQ

How do I install strava?

Run openclaw add @bohdanpodvirnyi/strava in your terminal. This installs strava into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/bohdanpodvirnyi/strava. Review commits and README documentation before installing.