Open source · Self-hosted · Non-commercial
suunto2nextcloud syncs activities from your Suunto watch into your personal Nextcloud as open GPX and FIT files — maps, heart-rate and elevation charts included, on storage you control.
Training data is personal data. It should outlive any app, subscription or platform.
Every activity is stored as an untouched FIT file plus a standard GPX track in your Nextcloud folder — readable by any sports tool, forever, no export lock-in.
A small service polls the official Suunto Cloud API and picks up new workouts shortly after your watch syncs. Run it once, forget it.
Tracks render in the GpxPod app: route on a map, elevation profile, heart rate, pace and speed — plus a monthly Activities.md summary with totals per sport.
You authorise access to your own Suunto account via OAuth2. Data flows from Suunto straight to your server — no third party, no analytics, no resale.
GPX files carry heart rate, cadence, temperature, speed and power as standard TrackPoint extensions. Indoor workouts keep their FIT and summary too.
Nothing is installed server-side on Nextcloud: files arrive over WebDAV and viewing uses App Store apps, so it works even on managed instances like Hetzner Storage Share.
Log in with your Suunto account through the standard OAuth2 flow; tokens are stored locally and refreshed automatically.
The service lists new workouts, downloads each FIT file once, converts it to GPX and
uploads gpx + fit +
json per activity, organised by year.
Open the folder in GpxPod for maps and charts, or the generated
Activities.md for a month-by-month log with distance, time,
pace, ascent and heart rate.
Python 3.9+ or Docker. Full details in the README.
git clone https://github.com/eloi-ribeiro/suunto2nextcloud
cd suunto2nextcloud
cp config.example.yaml config.yaml # Suunto API keys + Nextcloud app password
pip install -r requirements.txt
python __main__.py test-nextcloud # verify credentials, create the folder
python __main__.py auth # one-off Suunto OAuth login
python __main__.py sync # pull workouts; run via cron/Docker for auto-sync
No Suunto API access yet? import-fit
ingests FIT files exported from the Suunto app through the same pipeline. Access to the Suunto
Cloud API is granted by Suunto through their partner programme at
apizone.suunto.com.