The missing intervals.icu sync tool for iGPSPORT and Bryton users.
Enter your credentials once, press Sync, and your latest rides from iGPSPORT or Bryton Active land on intervals.icu. You can also push planned workouts from intervals.icu back to iGPSPORT or Bryton Active. Free and open source, for Windows, macOS, and Android.
Download · CLI & agents · Contributing
- Syncs recent rides from iGPSPORT or Bryton Active to intervals.icu (original
.fitfiles) - Optional Dropbox upload — mirror activities to a Dropbox folder from the GUI (iGPSPORT or Bryton sync)
- Upload and refresh workouts — create planned cycling workouts from intervals.icu on iGPSPORT or Bryton Active; iGPSPORT uploads keep a durable identity, update changed plans in place, and recreate a manually deleted workout while it is still in the configured calendar window
- Skips activities already uploaded so re-running is safe — with an optional force re-sync
- Lets you choose how many recent activities to process
- Workout upload window in Settings — how many calendar days to upload (default: today only)
- Add
[skip-igp]to an Intervals workout name or description to suppress its iGPSPORT create, update, and recreation while the marker remains. Removing it resumes sync. The old text[ignore-igp]has no special behavior. - Sets the intervals.icu sport type after upload (e.g. Mountain Bike Ride / Gravel Ride) — iGPSPORT exports everything as a generic "Ride"
- Optionally deletes the local
.fitfiles after a successful upload - Stores your credentials in the OS secure vault (Windows Credential Manager / macOS Keychain / Android Keystore), never in a file
- Lets you know when a newer version is available
- Sync zones to iGPSPORT — push FTP, LTHR, max HR, weight, and power/HR zones from intervals.icu into your iGPSPORT profile (Settings → iGPSPORT profile, or
intervalssync sync-zones; the app prompts on launch when thresholds differ) - Verified rider-settings sync — use
intervalssync sync-rider-settingsto treat intervals.icu as the source of truth for cycling FTP, HR/power zones, max/resting/threshold HR, weight, height, birth date, and sex. Select individual fields or sync all, preview safely with--dry-run, and verify every write by reading iGPSPORT back. - Headless CLI — activity sync, workout upload, and iGPSPORT zone/threshold sync from the terminal, with JSON output and exit codes for automation and AI agents (see CLI & automation)
- China iGPSPORT region — accounts on app.igpsport.cn use a separate API; choose China in Settings (or
INTERVALSSYNC_IGPSPORT_REGION=chinain the CLI)
Prefer the terminal, or want to help out? It's open source (Python + Flet, MIT) — see CONTRIBUTING.md.
- Go to the Releases page and download the latest
.zip. - Unzip it anywhere and double-click the app (e.g.
intervalssync.exe). - On first launch, open Settings and enter:
- your iGPSPORT email and password (or phone number for China — set region to China if you use app.igpsport.cn)
- your intervals.icu API key (intervals.icu → Settings → Developer)
- Click Save, then go back and press Sync (or Upload to iGPSPORT / Upload to Bryton for planned sessions on your intervals.icu calendar).
Your password and API key are stored in your operating system's secure credential store — Windows Credential Manager on Windows (the same vault Windows uses for its own logins) — never in a plain text file.
- Go to the Releases page and download the latest
macos.zip. - Unzip it and move the app to Applications if you want.
- Open the app, fill in Settings (same fields as above), then Sync or Upload to iGPSPORT / Upload to Bryton.
On macOS your credentials are stored in Keychain. Release builds are not notarized yet, so macOS may require right-clicking the app and choosing Open the first time.
- On the Releases page, download the latest
.apk. - Open it on your phone. Android will ask you to allow installing from this source — accept (Settings → "Install unknown apps" for your browser/files app).
- Open the app, fill in Settings (same fields as above), then Sync or Upload to iGPSPORT / Upload to Bryton.
On Android your credentials are stored in the Android Keystore. The app isn't on the Play Store, so the "unknown source" prompt is expected.
Headless intervalssync CLI — sync from iGPSPORT or Bryton, upload workouts to iGPSPORT or Bryton, and sync cycling rider settings from intervals.icu to iGPSPORT, with JSON on stdout. See Agent / headless sync.
With uv installed, run the latest stable release directly from PyPI—no clone or manual upgrade required:
uvx --python 3.13 intervalssync@latest --version
uvx --python 3.13 intervalssync@latest sync --jsonThe verified sync-rider-settings command is currently available in the
reviewed fork integration revision shown below; it is not part of the latest
upstream PyPI release (v0.9.3). Until an upstream release includes it, invoke
that immutable revision explicitly. See the public relay
Dockerfile
for its exact current pin:
uvx --python 3.13 \
--from "git+https://github.com/KirillSugonyakin/intervalssync.git@23f96ccbd051257bb0d377700ac150019ac4cad4" \
intervalssync sync-rider-settings --env-file .env --sport Ride --dry-run --jsonRequires uv.
uv sync
cp .env.example .env # optional: credentials for CLI; IGPSYNC_DROPBOX_APP_KEY for Dropbox
uv run --env-file .env intervalssync-guiuv run flet build windows
uv run flet build macosThe distributables land in build/windows/ and build/macos/. (Flet downloads
the Flutter toolchain on the first build; macOS builds require a macOS host.)
The app is built with Flet, so the same Python code targets
desktop and Android today, with iOS (flet build ipa) possible from the same
code.
Tips on Ko-fi help fund bug fixes, releases, and new features. Thank you!
This project builds on community work around iGPSPORT activity access and syncing:
- kamikadzem22/igpsport-unoffical-api for documenting and exploring the unofficial iGPSPORT API.
- simple4wan/ride-sync for prior work on syncing ride activities between services (including China-region iGPSPORT).
This app is an independent project and is not affiliated with iGPSPORT, intervals.icu, or the projects listed above.


