Automatically upload workout activities from Wahoo, MyWhoosh, and TrainerDay to Garmin Connect.
Version 1.0.7 | Windows Desktop Application (Nuitka onefile + folder build)
This app automatically syncs your workout files to Garmin Connect so your activities appear in your Garmin dashboard without manual uploads.
- Wahoo via Dropbox (.FIT files)
- MyWhoosh from its local cache (.FIT files)
- TrainerDay via Dropbox (.TCX / .FIT files)
Key Features:
- β Automatic background syncing
- β Starts with Windows (optional)
- β Secure password encryption
- β Two-Factor Authentication (MFA/2FA) support
- β Manual credential testing with "Test Connection" button
- β Detailed activity logging
- β System tray support
The app handles the two platforms differently based on how they store files:
- Wahoo (Persistent): If you connect a Dropbox account that has a history of Wahoo rides, the app will detect those files and upload your history to Garmin Connect automatically.
- MyWhoosh (Volatile): MyWhoosh only stores the most recent activity in its local cache and overwrites it when you start a new session.
- The Catch: Your PC doesn't always have to be on for the sync to work eventually, but if you record multiple MyWhoosh activities while the app is closed (or the PC is off), the uploader will only "see" and sync the very last one when it finally boots up.
- Recommendation: Use the "Start with Windows" option so the app is always ready to catch MyWhoosh files before they are lost.
I built this originally as a personal Python script to solve my own manual upload frustrations. Because this app handles Garmin credentials, transparency is a priority:
- Local Only: Your credentials are never sent to any server except Garminβs official Garmin Connect endpoint.
- Windows Credential Manager: Your Garmin password is stored primarily in Windows Credential Manager via the
keyringlibrary. You can remove it at any time via the Windows Credential Manager control panel. - Config-file fallback (for early boot only): A simple Base64-encoded copy of your password is kept in
uploader_config.jsonas a fallback if Credential Manager is not available at boot. This is not meant as strong encryption, just enough to avoid plain text in the config file. - No custom crypto: There is no XOR or βhomeβgrownβ encryption in the current versions; standard libraries are used instead.
- No registry writes: Auto-start is handled only via a Startup-folder shortcut (
GarminUploader.lnk), never theHKCU\...\Runregistry key. - Open Source: The full source code is available here on GitHub for anyone to audit or rebuild.
Good news! The app automatically detects and updates Windows auto-start shortcuts when you first run a new version. Simply:
- Download the new
GarminUploader-v1.0.x.exe - Place it in the same folder as your old version
- Run it once - if you had "Start with Windows" enabled, the app will detect the old shortcut and offer to update it
- Your existing settings and logs are preserved automatically (no reconfiguration needed!)
For folder builds: If you keep your configuration and log files in a parent folder (for example C:\GarminUploader\) and extract each new GarminUploader-v1.0.x-folder.zip into a subfolder under that parent (for example C:\GarminUploader\GarminUploader-v1.0.6-folder\), the new version will automatically reuse uploader_config.json, garmin_uploader.log, and garmin_uploads.log from the parent folder. You do not need to copy these files into each new version folder.
Two download options are available:
| Option | File | Best for |
|---|---|---|
| Folder build (recommended) | GarminUploader-v1.0.7-folder.zip |
Most users β less likely to trigger Windows Defender |
| Single-file build | GarminUploader-v1.0.7.exe |
Advanced users who prefer a single executable |
- Download
GarminUploader-v1.0.7-folder.zipfrom Releases - Extract the ZIP to a folder (e.g.,
C:\GarminUploader\or your Desktop) - Run
GarminUploader.exefrom the extracted folder
- Download
GarminUploader-v1.0.7.exefrom Releases - Place it anywhere you like (Desktop, Documents, etc.)
- Double-click to run
Note: The single-file build is a packed Nuitka executable which may trigger Windows Defender ML heuristics. If Defender blocks or quarantines it, use the folder build instead. See Windows Defender / Antivirus Blocks the App for details.
- Enter your Garmin Connect email
- Enter your Garmin Connect password
- Click "Test Connection" to verify your credentials (optional but recommended)
- Click "Save Settings" button
Two-Factor Authentication (MFA/2FA):
- If you have two-step verification enabled on your Garmin account, a dialog will pop up asking for your 6-digit verification code when you test the connection or first sync
- Enter the code from your authenticator app or the code Garmin texts/emails you
- Your authentication tokens are securely saved and automatically reused for approximately one year
- You'll only need to enter the MFA code once per year (or when you change your password)
Important: Your password is encrypted and stored in Windows Credential Manager. The app only validates credentials when they change, not every time you save settings.
You need at least one folder configured (Wahoo, MyWhoosh, or TrainerDay):
-
Click "π Help" button next to Wahoo Folder
-
Follow the instructions to:
- Create free Dropbox account
- Connect Wahoo ELEMNT to Dropbox
- Install Dropbox on PC
-
Click "Browse" and select your Dropbox Wahoo folder:
C:\Users\YourName\Dropbox\Apps\WahooFitness
-
Click "π Help" button next to MyWhoosh Folder
-
Follow the instructions to find your MyWhoosh cache folder
-
Click "Browse" and navigate to:
C:\Users\YourName\AppData\Local\MyWhoosh\MyWhoosh\Cache\Cache_Data
Tip: Press Win + R, paste %LOCALAPPDATA%\MyWhoosh\MyWhoosh\Cache\Cache_Data, press Enter
-
Click "π Help" button next to TrainerDay Folder
-
Follow the instructions to:
- Open https://app.trainerday.com and log in
- Click your user icon β Connections and connect TrainerDay to Dropbox / enable activity sync
-
After the first sync, Dropbox will contain a TrainerDay folder, for example:
C:\Users\YourName\Dropbox\TrainerDay C:\Users\YourName\Dropbox\Apps\TrainerDay -
Click "Browse" and select that TrainerDay folder.
Default is 5 minutes. Adjust if you want faster/slower checking.
Click "Save Settings" - this will:
- β Validate your Garmin credentials
- β Encrypt your password
- β Save all settings
- Click "Sync Now" button
- App will upload any new .FIT files immediately
- Check status at bottom of window
For set-and-forget automation:
- β Check "Start with Windows"
- β Check "Start Auto-Sync" checkbox
- Click "Start Auto-Sync" button
What happens:
- App checks for new files every 5 minutes (or your interval)
- Shows status updates at bottom
- Can minimize to system tray (bottom-right corner)
To minimize to tray:
- Click the [X] close button
- If auto-sync is running, you'll be asked if you want to minimize to tray
- Click YES to keep it running in background
- Look for Garmin icon in system tray
To restore from tray:
- Click the Garmin icon in system tray
- Select "Show"
Make it fully automatic:
- β Check "Start with Windows"
- β Ensure "Start Auto-Sync" is also checked (optional but recommended)
- Click "Save Settings"
- Restart your computer to test
What happens on boot:
- App starts automatically (minimized to tray)
- Begins auto-sync if you have credentials and folders configured
- Runs silently in background
- Check system tray for Garmin icon
To disable auto-start:
- Uncheck "Start with Windows"
- Click "Save Settings"
The app stores its configuration and log files alongside the app, usually in a shared parent folder so that new versions can reuse them:
uploader_config.jsonβ Your settings (password is encrypted)garmin_uploader.logβ Main activity log with timestamps (auto-rotates at 10MB, keeps 3 backups)garmin_uploads.logβ Dedicated uploads-only log that records successful uploads with daily separators (easier to review your upload history).
Recommended layout for folder builds (for easy upgrades):
C:\\GarminUploader\\
uploader_config.json
garmin_uploader.log
garmin_uploads.log
GarminUploader-v1.0.7-folder\\
GarminUploader.exe
If these files exist in the parent folder (for example C:\\GarminUploader\\), any new version you place in a subfolder under that parent will automatically reuse them. You do not need to copy the files into each new version folder.
View the logs:
- Click "βΉοΈ About" button
- Click "π View Log" for the main log
- Click "π View Uploads Log" for the uploads-only log (read-only viewer)
What's logged (main log):
- App startup/shutdown
- Garmin login attempts (success/failure)
- File uploads (filename, timestamp)
- Errors and warnings with visual icons (β
success, β error,
β οΈ warning) - Auto-sync start/stop
- Settings changes
Log retention:
garmin_uploader.logautomatically rotates when it reaches 10MB- Keeps 3 backup files (~3 months of history)
garmin_uploads.logis a single running file with date markers so you can see what was uploaded each day
- Double-check email/password at garmin.com
- Click "Save Settings" again to re-test
- Check log file for detailed error
- You must configure at least ONE folder (Wahoo, MyWhoosh, or TrainerDay)
- Click Browse to select folder
- Click Help button for setup instructions
- Press
Win + R, type:shell:startup, press Enter - Look for
GarminUploader.lnkshortcut - If missing: Re-enable "Start with Windows" in app
- If present: Check log file for startup errors
- Make sure EXE location hasn't moved
- Click "Sync Now" to test immediately
- Check if .FIT files exist in your folders
- View log file for upload attempts
- Verify Garmin credentials are valid
- Check folder paths are correct
- This is normal - means Garmin already has this activity
- File is moved to "uploaded" subfolder anyway
- No action needed
- Look in bottom-right corner of Windows taskbar
- Click small ^ arrow to show hidden icons
- Garmin logo should appear there
Because this app is a small, niche tool that logs in to a website, stores credentials, and can auto-start with Windows, some antivirus programs (especially Windows Defender's ML-based heuristics) may incorrectly flag it as suspicious.
Why this happens:
- The app is not code-signed (requires an expensive certificate)
- It combines network activity + credential storage + auto-start β patterns that malware also uses
- Packed single-file executables trip more heuristics than normal installers
What you can do:
-
Try the folder build: Download
GarminUploader-v1.0.5-folder.zipinstead of the single.exe. Unpacked builds are less likely to trigger false positives. -
Add an exception: If you trust the source, add the app folder to Windows Defender's exclusion list:
- Open Windows Security β Virus & threat protection β Manage settings
- Scroll to Exclusions β Add or remove exclusions
- Add the folder containing
GarminUploader.exe
-
Report the false positive to Microsoft:
- Go to: https://www.microsoft.com/en-us/wdsi/filesubmission
- Select Home user β Incorrectly detected as malware
- Upload the
.exefile and submit
-
Build from source: If you prefer not to trust pre-built binaries:
git clone https://github.com/Inc21/Wahoo-and-MyWhoos-to-Garmin-Conect-Auto-Uploader.git cd Wahoo-and-MyWhoos-to-Garmin-Conect-Auto-Uploader pip install -r requirements.txt python uploader_gui.py
Verify authenticity: Compare the SHA-256 hash of your download against CHECKSUMS.txt in the release.
- Uncheck "Start with Windows" in app
- Click "Save Settings"
- Close the app
- Delete
GarminUploader.exe - Delete
uploader_config.jsonandgarmin_uploader.log(optional)
Developer: inc21
Buy me a coffee: β Support
MIT License