Route and terrain research
Use Strava endpoints to turn route and terrain research into repeatable API requests with documented inputs and JSON responses.
Turn public Strava pages into structured fitness-activity data — a route index by sport, country, and region, one route's full detail (distance, elevation, map), a club's public profile, and the current public challenge gallery, all as normalized JSON. Credential-free.
Get Strava's public route index and route detail, club profiles, and the public challenge gallery as structured JSON.
Endpoint families
3
Documented params
10
Examples
4
Live catalog snapshot
Active endpoints
4
Methods
GET
Required params
9
Schema refs
4
{
"platform": "Strava",
"endpoint": "strava-routes",
"method": "GET",
"path": "/strava/routes",
"auth": "apiKey"
}Use cases
Get Strava's public route index and route detail, club profiles, and the public challenge gallery as structured JSON.
Use Strava endpoints to turn route and terrain research into repeatable API requests with documented inputs and JSON responses.
Use Strava endpoints to turn club and community tracking into repeatable API requests with documented inputs and JSON responses.
Use Strava endpoints to turn fitness-challenge and campaign monitoring into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Strava endpoint catalog — 4 endpoints, 10 documented request parameters, and 4 published response schemas — the same catalog Docs and Playground run against.
4 documented Strava endpoints, grouped into 3 request families — Routes, Challenges and Clubs.
10 request parameters are documented across those Strava endpoints, 9 of them required — the full input contract is public before you write any integration code.
4 of the 4 Strava endpoints ship a recorded example response, and 4 carry a documented response schema — you can code against the real JSON before the first request.
Strava endpoints document their error responses (400, 404, 429, 500 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
4 hosted MCP tools back the Strava endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
/strava/routes
/strava/challenges
/strava/clubs/{id}
Endpoint catalog
/strava/routesReturns a page of Strava's public route recommendations for a sport, country, and region (state, or state/city). `sport` values: `hiking`, `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking`. Public data, sourced from Strava's own server-rendered route pages.
Response notes
- Each result's `path` is usable directly as the `path` query parameter to [`/strava/routes/detail`](strava-route-detail.md). - An unsupported `sport` returns `400` before any upstream request is made. - A page number past the last valid page, or an unlisted region, returns `404` rather than an empty `200` list.
MCP tool strava_routes
/strava/routes/detailReturns a single Strava route's detail: type, difficulty, distance, elevation gain, estimated time, and summary. `path` is the relative route path returned by `/strava/routes` results (e.g. `hiking/usa/colorado/boulder/mallory-cave_5171952737974445730`). Public data, sourced from Strava's own server-rendered route pages.
Response notes
- `path` must start with a supported sport segment (`hiking`, `road-biking`, `mountain-biking`, `trail-running`, `gravel-biking`) and contain no path-traversal segments; otherwise `400` is returned before any upstream request is made. - A route that no longer exists returns `404`.
MCP tool strava_route_detail
/strava/clubs/{id}Returns a Strava club's public profile: name, verified/private flags, location, description, member count, and cover/avatar images. Only the base public profile is returned -- discussion, leaderboard, member list, and recent-activity data require a logged-in Strava session and are not available. Public data, sourced from Strava's own server-rendered club page.
Response notes
- A club that doesn't exist, or `id` that isn't purely numeric, returns `400`/`404` respectively before or after the upstream request. - `private` reflects whether the club requires a join request to see full content; this endpoint still returns the public profile fields for private clubs.
MCP tool strava_club
/strava/challengesReturns Strava's public challenge gallery: the currently promoted challenge plus every gallery section (partner challenges, and one section per sport such as run/ride), each with its challenges' goal, duration, and cover art. Public data, sourced from Strava's own challenge gallery.
Response notes
- `sections` is ordered with `partner` first, then the remaining sport categories alphabetically. - A challenge's `goal` is `null` for challenges measured by elapsed time rather than a fixed distance/duration target (e.g. "fastest mile ever").
MCP tool strava_challenges
Related APIs
Social & Creator Platforms
Build creator intelligence, video research, transcript, and audience-comment workflows without maintaining YouTube scrapers.
Social & Creator Platforms
Turn Twitch's public channel, stream, clip, and team data into structured JSON — live status and viewer counts, top games, clips, VODs, and team rosters — as normalized JSON. Credential-free.
Social & Creator Platforms
Track creator and video activity, discover sounds and LIVE streams, and study public ad creatives through documented TikTok API routes.
How to scrape Strava
Crawlora's Strava endpoints return route indexes, route detail, club profiles, and the challenge gallery as normalized JSON with one API key — no Strava account or auth token required.
/strava/routes requires sport, country and region, all three. sport must be one of hiking, road-biking, mountain-biking, trail-running or gravel-biking — note that plain "running" and "cycling" are not values, and an unsupported one returns a 400 naming the accepted list.
country and region are the slugs from Strava's own route-index URL path, and not every plausible pair exists — verified live, hiking in switzerland/bern returns a populated index while united-states/california returns a 404. Treat a 404 here as "Strava publishes no index for this combination" rather than an error in your call, and page through results with the page parameter.
Pass a route's path — the identifier from the index, not a bare numeric id — to /strava/routes/detail for distance, elevation and map data.
Pass a club id to /strava/clubs/{id} for that club's public profile.
/strava/challenges takes no parameters and returns Strava's current public challenge gallery, including the promoted challenge it is featuring.
FAQ
Call /strava/routes with all three of sport, country and region. sport must be one of hiking, road-biking, mountain-biking, trail-running or gravel-biking, and country and region are the slugs from Strava's own route-index URLs. You get a normalized route index back as structured JSON with no Strava account required.
Because Strava does not publish a route index for that country and region pair. The slugs must match pages Strava actually serves — verified live, hiking in switzerland/bern works while united-states/california 404s despite looking equally reasonable. A 404 is the honest signal that the combination does not exist upstream, not a fault in the request.
No Strava login or auth token is required from the caller — only your Crawlora API key.
Yes — /strava/clubs/{id} returns a club's public profile as structured JSON.