Garmin training analysis
A script downloads my Garmin activities, sorts them by sport and prepares them. Below: one year of training as charts – or your own Garmin files.
Sample data anonymised: date and totals only, no GPS data.
Data sheet
| Identification no. | JS-2026-03 |
|---|---|
| Period | 06/2026 |
| Role | Idea and implementation with AI assistance |
| Tools | Python · Garmin Connect API · JSON · TypeScript · SVG |
| Key result | One year of training: 133 sessions, 544 running km |
| Status | Interactive analysis |
1Result
Zone BSample: my training data, anonymised (date and totals only)
Your own data: drop or open the files written by download_activities.py (e.g. the data/activities folder). They are read in your browser only, never uploaded or stored.
- Activities
- 133
- Training hours
- 135
- Running km
- 544
- Period
- 10/2025 – 10/2026
Training time per week (hours)
Running Other sports
Pace per run (min/km, faster ↑)
Dots: single runs · line: mean of the last 5 runs
Average heart rate per run (bpm)
Dots: single runs · line: mean of the last 5 runs
Sports by training time
Show as table
| Sport | Sessions | Hours | km |
|---|---|---|---|
| Running | 60 | 58.3 | 543.7 |
| Strength | 32 | 34.4 | – |
| Indoor cycling | 26 | 22.4 | – |
| Hiking | 4 | 11.7 | 41.8 |
| Indoor rowing | 6 | 3.6 | – |
| Football | 1 | 1.5 | 2.0 |
| Walking | 1 | 1.5 | 7.0 |
| HIIT | 1 | 0.6 | – |
| Cycling | 2 | 0.6 | 13.5 |
2Problem and motivation
Zone CThe Garmin app shows single values, but no overview across weeks and months that can be analysed in a targeted way.
3Set-up
Zone D- 01Download: activities with detailed metricsMy part
- 02Storage: one folder per sportMy part
- 03Preparation: summary for the analysisMy part
- 04Analysis in the browser: weeks, pace, heart rateMy part
Your own files are read in the browser only, never uploaded or stored. The download itself stays a local script: Garmin does not allow logging in directly from a browser, and passwords should not pass through someone else's server.