n8n-nodes-strava
v1.0.0
Published
n8n community node for automating Strava API workflows, including athletes, activities, segments, routes, clubs, streams, uploads, and web-session actions.
Downloads
261
Maintainers
Readme
This is a n8n community node. It lets you use Strava in your n8n workflows.
Strava is the activity platform used by athletes to track running, cycling, swimming, routes, segments, clubs, uploads, and performance streams. This node exposes the official Strava API v3 operations, Strava webhook triggers, and a separate opt-in web-session resource for a few undocumented browser-only actions.
n8n is a fair-code licensed workflow automation platform.
- Installation
- Operations
- Official n8n Strava vs this package
- Credentials
- Compatibility
- Usage
- Web session notes
- Resources
Installation
Follow the installation guide in the n8n community nodes documentation.
- Go to Settings > Community Nodes.
- Select Install.
- Enter
n8n-nodes-stravain Enter npm package name. - Agree to the risks of using community nodes: select I understand the risks of installing unverified code from a public source.
- Select Install.
After installing the node, you can use it like any other node. n8n displays Strava and Strava Trigger in search results in the Nodes panel.
For local development:
npm install
npm run build
npm run devOfficial n8n Strava vs. this package
The official n8n Strava node is a good starting point for simple activity workflows. This package is built for people who want to go much further: more Strava API coverage, cleaner advanced workflows, route exports, uploads from binary data, streams, and guarded web-session actions that the official node does not expose.
As of the n8n documentation checked on 2026-04-26, the official Strava action node documents only the Activity resource operations: create, get, get all, comments, kudos, laps, zones, and update. The official Strava Trigger supports activity and athlete events. This package keeps those core workflows, then adds the missing power-user surface.
| Capability | This n8n Strava node | Official n8n Strava node | |------------------------------------------------------------------|------------------------------------------------------------------------|--------------------------| | OAuth2 credential | ✅ | ✅ | | Webhook trigger | ✅ | ✅ | | Activity CRUD and enrichment | ✅ | ✅ | | Activity comments, kudos, laps, zones | ✅ | ✅ | | Athlete profile, stats, zones, profile update | ✅ | ❌ | | Clubs, members, admins, club activities | ✅ | ❌ | | Segments, starred segments, segment explore, segment star/unstar | ✅ | ❌ | | Segment efforts | ✅ | ❌ | | Gear lookup | ✅ | ❌ | | Routes by athlete, route details | ✅ | ❌ | | GPX and TCX route export | ✅ | ❌ | | Streams for activities, routes, segments, segment efforts | ✅ | ❌ | | Uploads from n8n binary input | ✅ | ❌ | | Web-session-only Strava actions | ✅ | ❌ | | Session health check for cookie-based routes | ✅ | ❌ | | Built for full Strava API v3 coverage | ✅ | ❌ |
In practice, this package removes the need to keep dropping down into the generic HTTP Request node for normal Strava automation. If your workflow is only "create or read activities", the official node is fine. If your workflow touches routes, streams, clubs, segments, uploads, exports, athlete stats, or browser-session-only social actions, this package is the stronger tool.
Official reference pages:
- Official n8n Strava node documentation
- Official n8n Strava Trigger documentation
- Official n8n Strava credentials documentation
Operations
This package includes two nodes:
- Strava: regular actions against Strava API v3 and selected web-session routes.
- Strava Trigger: starts workflows from Strava push subscription events.
Official Strava API resources
| Resource | Operations | |----------------|------------------------------------------------------------------------------------------------------------------| | Activity | Create Activity, Get Activity, Update Activity, List Activities, List Comments, Get Kudoers, Get Laps, Get Zones | | Athlete | Get Authenticated Athlete, Update Athlete, Get Athlete Stats, Get Zones | | Club | Get Club, Get Club Activities, Get Club Admins, Get Club Members, List Authenticated Athlete Clubs | | Gear | Get Gear | | Route | Get Route, Get Routes By Athlete, Export GPX, Export TCX | | Segment | Explore Segments, Get Segment, List Starred Segments, Star Segment | | Segment Effort | Get Segment Effort, List Segment Efforts | | Stream | Get Activity Streams, Get Route Streams, Get Segment Effort Streams, Get Segment Streams | | Upload | Create Upload, Get Upload |
Implemented Strava operation IDs
| Operation ID | Resource | Notes |
|-------------------------------------|----------------|----------------------------------------|
| getStats | Athlete | Athlete activity stats |
| getLoggedInAthlete | Athlete | Current authenticated athlete |
| updateLoggedInAthlete | Athlete | Requires profile:write |
| getLoggedInAthleteZones | Athlete | Requires profile:read_all |
| getSegmentById | Segment | Segment details |
| getLoggedInAthleteStarredSegments | Segment | Authenticated athlete starred segments |
| starSegment | Segment | Star or unstar a segment |
| getEffortsBySegmentId | Segment Effort | Segment effort list |
| exploreSegments | Segment | Segment discovery by bounds |
| getSegmentEffortById | Segment Effort | Segment effort details |
| createActivity | Activity | Manual activity creation |
| getActivityById | Activity | Activity details |
| updateActivityById | Activity | JSON body update |
| getLoggedInAthleteActivities | Activity | Authenticated athlete activities |
| getLapsByActivityId | Activity | Activity laps |
| getZonesByActivityId | Activity | Activity zones |
| getCommentsByActivityId | Activity | Activity comments |
| getKudoersByActivityId | Activity | Athletes who kudoed an activity |
| getClubById | Club | Club details |
| getClubMembersById | Club | Club members |
| getClubAdminsById | Club | Club admins |
| getClubActivitiesById | Club | Club activities |
| getLoggedInAthleteClubs | Club | Authenticated athlete clubs |
| getGearById | Gear | Gear details |
| getRouteById | Route | Route details |
| getRoutesByAthleteId | Route | Athlete routes |
| getRouteAsGPX | Route | GPX export as binary or raw XML |
| getRouteAsTCX | Route | TCX export as binary or raw XML |
| createUpload | Upload | Supports n8n binary input |
| getUploadById | Upload | Upload status |
| getActivityStreams | Stream | Stream keys are sent as CSV |
| getSegmentEffortStreams | Stream | Stream keys are sent as CSV |
| getSegmentStreams | Stream | Stream keys are sent as CSV |
| getRouteStreams | Stream | Stream keys are sent as CSV |
Web session operations
These operations are intentionally separated under Web Session (Undocumented) because they use Strava browser routes, not the official API.
| Operation | Purpose | |-----------------------------|------------------------------------------------------------------------------| | Build Follow Request Data | Prepare/debug follow or unfollow request payloads without calling Strava | | Follow Athlete | Follow an athlete using a browser session cookie | | Unfollow Athlete | Unfollow an athlete using a browser session cookie | | Give Activity Kudo | Give a kudo through Strava web routes | | Get Activity Kudos Extended | Fetch extended kudos data with athlete profiles | | Get Activity Group Athletes | Fetch athletes from grouped activity data | | Test Session | Verify that the configured cookie still reaches an authenticated Strava page |
Trigger events
The Strava Trigger node supports Strava push subscriptions for:
- Objects: Activity, Athlete, or All
- Events: Created, Updated, Deleted, or All
- Optional data resolution for activity events
- Optional cleanup of an existing Strava push subscription when Strava reports that one already exists
Credentials
This node supports two credential types.
1. Strava OAuth2 API
Use this credential for all official Strava API v3 resources and for the Strava Trigger node.
To set it up:
- Create an API application in the Strava API settings.
- Copy the client ID and client secret into the n8n OAuth2 credential.
- Use the OAuth callback URL shown by n8n in your Strava application settings.
- Authorize the scopes required by your workflows.
Configured scopes:
read,read_all,profile:read_all,profile:write,activity:read,activity:read_all,activity:writeThe OAuth2 credential uses n8n's built-in OAuth2 handling, including token storage and refresh behavior.
2. Strava Web Session API
Use this credential only for Web Session (Undocumented) operations.
Required values:
- Strava Session Cookie: the full
Cookieheader copied from an authenticated browser request towww.strava.com. - CSRF Token: the token from the same browser session. Strava expects it in the
X-CSRF-Tokenheader for writing requests. - User-Agent: ideally the same browser user agent used when copying the cookie.
- Accept-Language: optional, but keeping it close to the browser request helps reproduce the same session behavior.
Important: the cookie grants access to your Strava account. Store it as a secret, rotate it often, and never paste it into logs, issues, screenshots, or shared workflows.
Compatibility
- n8n package format: community node API version 1 with strict mode enabled.
- Node.js:
>=20.19.0 - n8n workflow peer dependency:
^2.15.1 - Tested locally with:
npm run typecheck,npm run lint,npm run build, andnpm run pack:dry
Known compatibility notes:
- Strava allows only one push subscription per application. If trigger registration fails because a subscription already exists, enable the cleanup option only when you intentionally want to replace the existing subscription.
- Some Strava endpoints require specific OAuth scopes. A valid OAuth connection can still receive
403 Forbiddenif the authorized scopes are too narrow. - Web-session operations depend on undocumented Strava browser routes and may change or stop working without notice.
Usage
Common official API workflows
- Sync recent activities into a database or spreadsheet.
- Fetch detailed activity, lap, zone, comment, and kudo data.
- Export routes as GPX or TCX for downstream processing.
- Upload GPX, TCX, FIT, and compressed activity files from n8n binary data.
- Listen for Strava activity updates with Strava Trigger and enrich the event with activity details.
Binary upload
For upload workflows:
- Add a node that produces binary data, such as Read/Write Files from Disk, HTTP Request, or an incoming webhook.
- In Strava > Upload > Create Upload, select the binary property that contains the activity file.
- Choose the matching data type:
gpx,gpx.gz,tcx,tcx.gz,fit, orfit.gz.
Route exports
GPX and TCX exports can be returned as:
- n8n binary data, ready to write to disk or upload elsewhere.
- Raw XML text, useful for debugging or transformations.
Streams
Stream keys are sent in the CSV format expected by Strava. Select the stream keys in the node UI, and the node handles the required request formatting.
Web session notes
The Web Session (Undocumented) resource exists for Strava actions that are not available in the official API. It is intentionally more guarded than regular API operations.
Before using write operations:
- Log in to Strava in a browser.
- Open DevTools > Network.
- Copy the full
Cookieheader from a request tohttps://www.strava.com. - Copy the CSRF token from either the
X-CSRF-Tokenrequest header or the page source meta-tag namedcsrf-token. - Put both values in the Strava Web Session API credential.
- Run Web Session (Undocumented) > Test Session.
For write operations:
- The CSRF token is sent as
X-CSRF-Token. OriginandRefererheaders are sent to match browser-style requests.- Follow, unfollow, and kudo operations require explicit confirmation fields in the node UI.
- Bulk web write actions are guarded to reduce accidental account changes.
If Strava returns 403 Forbidden, refresh the session cookie and CSRF token from the same browser session. A cookie can
be valid enough to load some pages while still being rejected for protected write routes.
