Strava API Changes: The Death of the Free Developer Tier
My experience integrating the Strava API in my Threads Watermark app, and how Strava's 2026 subscription mandate broke free-tier API access.
Earlier this year, I started a side project called Daily Threads Watermark, which is a static web application designed to help runners and fitness enthusiasts generate watermarked workout summaries and text drafts for Threads.
One of the application's most popular features was its seamless Strava integration. However, due to recent policy shifts in the Strava Developer Program, this integration is now completely broken for free-tier users. Here is what happened, how the integration worked, and the workaround for developer-athletes.
The History: Asynchronous Static Sync
Because the application is hosted as a serverless static site on GitHub Pages, we could not query the Strava API directly from the client side without leaking private credentials (Client Secret).
To solve this securely, the app was designed around an asynchronous build pipeline:
GitHub Actions Workflow: A cron job triggered every 30 minutes.
Strava API Query: The workflow read repository secrets (
STRAVA_CLIENT_ID,STRAVA_CLIENT_SECRET, andSTRAVA_REFRESH_TOKEN), fetched my latest run and walk distances directly from Strava's endpoints, and compiled the data.Static Summary File: The workflow wrote the fetched metrics into a public JSON summary at
public/data/strava-summary.json.Local Consumption: When the static frontend loaded in a browser, it requested the local JSON file to pre-fill the day's distance, avoiding direct API requests from client code.
This architecture allowed for a lightweight, zero-cost, and completely secure sync cycle.
The Policy Shift: Pay-to-Play API Access
In June 2026, Strava overhauled its Developer Program. The most significant change directly affects "single-player" developers who write scripts or small tools for their personal use:
Subscription Mandate: Access to the Standard Tier API (up to 10 athletes) now requires an active, paid Strava subscription.
Effective Date: The policy went into effect immediately for new applications, with a grace period for existing active developer accounts ending on June 30, 2026.
Without an active Strava subscription connected to the developer account, API requests are rejected, immediately halting the GitHub Actions automated sync workflow. You can check your application status and subscription eligibility directly on your Strava API Settings Dashboard.
Figure 1: The Strava API Application dashboard displaying the banner warning that API access is updating to be subscriber-only.
The Fallback: Manual CSV Imports
Fortunately, when designing the application, I built in a fallback mechanism in anticipation of potential API outages or sync errors.
Rather than relying on automated API hooks, users can manually export their activity history from their Strava account settings and upload the CSV file directly into the browser. The application processes the CSV locally in-memory, parses the activity distances by date, and updates the daily counter dashboard without sending any data to external servers.
While the automation era of Strava's free API tier is officially over, static tools can still survive by shifting data ownership back to local browser storage and manual exports.
Follow Me on Strava
If you want to look or follow my daily workouts, feel free to check out my Strava account here:
Figure 2: Feel free to check out or follow my athlete profile at strava.com/athletes/farrosfr.
Thanks for reading. See you in the next lab.




