strava-cli
// Interact with Strava via the strava-client-cli Python tool. Use for viewing activities, athlete profiles, stats, and exporting data. Covers setup (creating a Strava account, API app, and OAuth) and all CLI commands.
Strava CLI
Install
uvx --from strava-client-cli strava --help
# Or install persistently:
uv tool install strava-client-cli
Setup
1. Create a Strava Account (if needed)
Sign up at https://www.strava.com/register. Only name, email, and password required.
2. Create a Strava API Application
- Go to https://www.strava.com/settings/api
- Fill in:
- Application Name: any descriptive name
- Category: pick closest match (e.g. "Other")
- Website: any URL (e.g. your GitHub)
- Authorization Callback Domain:
localhost - Description: brief description
- Check the API Agreement checkbox
- Click Create
- Note your Client ID and Client Secret
Important: New Strava API apps allow only 1 connected athlete. To connect a different athlete, revoke the current one at Settings → My Apps → Revoke Access.
3. Authenticate
strava auth
Enter Client ID and Client Secret when prompted. Open the displayed URL in a browser, authorize, then copy the code parameter from the redirect URL (http://localhost/?code=XXXXX) and paste it back.
Tokens auto-refresh (every 6 hours). Config: ~/.config/strava-cli/config.json, tokens: ~/.config/strava-cli/tokens.json.
Manual Token Exchange (headless/automated)
If no browser is available, do the OAuth flow manually:
- Build the auth URL:
https://www.strava.com/oauth/authorize?client_id=CLIENT_ID&response_type=code&redirect_uri=http://localhost&approval_prompt=force&scope=activity:read_all,profile:read_all - Open in any browser, authorize, grab the
codefrom the redirect URL - Exchange:
curl -s -X POST https://www.strava.com/oauth/token \ -d client_id=CLIENT_ID \ -d client_secret=CLIENT_SECRET \ -d code=CODE \ -d grant_type=authorization_code - Save the response tokens to
~/.config/strava-cli/tokens.json:{ "access_token": "...", "refresh_token": "...", "expires_at": 1234567890, "token_type": "Bearer" }
Commands
strava profile # Athlete profile
strava stats # Run/ride/swim stats summary
strava activities --limit 10 # Recent activities
strava activities --type Run --after 2024-01-01 # Filter by type/date
strava activity 12345678 # Detailed activity view
strava export --output ./data --format json # Bulk export