A native Android client for Garmin Badge Database that syncs your earned badges, challenges, and progress from Garmin Connect to the site.
This is the Android equivalent of the garminbadges-updater Chrome extension — same sync logic, no browser required.
- Full badge sync — earned badges, repeatable badge history, in-progress challenges, virtual challenges, and available badges with progress targets
- MFA support — works with both standard and two-factor Garmin accounts
- Persistent session — signs in once and remembers your credentials between launches
- Real-time progress log — see exactly what's happening during each sync
- Android 8.0 or later (API 26+)
- A Garmin Badge Database account with an API key
- A Garmin Connect account
- Install the APK on your device.
- Sign in to garminbadges.com, go to your Dashboard, and copy your API key.
- Open the app and paste your API key into the API Key field.
- Tap Sign In and enter your Garmin Connect credentials. If your account uses two-factor authentication you will be prompted for a verification code.
- Tap Sync Now. Progress is shown in real time and a confirmation appears when the sync is complete.
Your API key and Garmin session are saved locally so you only need to set them up once.
| Data | Description |
|---|---|
| Earned badges | All badges you have earned, including full repeat history for repeatable badges |
| Active challenges | Badge challenges currently in progress with current progress value |
| Virtual challenges | In-progress virtual distance/activity challenges |
| Available badges | Badges not yet earned that have a progress target |
Requires Android Studio or the Android command-line tools.
# Debug APK
./gradlew assembleDebug
# Release AAB for Play Store (requires signing config — see PUBLISHING.md)
./gradlew bundleRelease
# Run unit tests
./gradlew test
# Lint
./gradlew lintThe debug APK is output to app/build/outputs/apk/debug/app-debug.apk.
Minimum requirements: JDK 11, Android SDK with API 36 build tools.
| Component | Technology |
|---|---|
| Language | Java 11 |
| Min SDK | 26 (Android 8.0) |
| Target SDK | 36 |
| HTTP client | OkHttp 4.12.0 |
| JSON | org.json (Android built-in) |
| UI | Material3 |
| Auth | Garmin SSO OAuth2 via diauth.garmin.com |
Authentication uses Garmin's SSO widget flow (sso.garmin.com) to obtain an OAuth2 Bearer token from diauth.garmin.com — the same approach used by Garmin's own mobile apps. No WebView or browser session is required.
The sync logic is a Java port of sync.js from the Chrome extension, calling Garmin's internal connectapi.garmin.com endpoints to collect badge and challenge data, then uploading it to api.garminbadges.com.
See PUBLISHING.md for a step-by-step guide to signing and releasing to the Google Play Store.
This project is not affiliated with or endorsed by Garmin Ltd. It uses Garmin's internal APIs in the same way as third-party clients and the official Garmin Connect mobile app. Use at your own risk.