Chrome extension that syncs your badge and challenge data from Garmin Connect to Garmin Badge Database.
- Install the extension — see Installation below.
- Sign in to garminbadges.com, go to your Dashboard and copy your API key.
- Click the extension icon → Settings and paste your API key.
- Browse to Garmin Connect and make sure you are logged in.
- Click the extension icon → Sync now.
Progress is shown in real time. When finished, the popup displays added, updated, and unchanged counts, plus links to your Profile and Challenges pages.
- All earned badges (including repeat counts for repeatable badges)
- Active (joined, not yet completed) challenges with current progress
- Ongoing repeatable badge progress
The extension is not yet on the Chrome Web Store. Install it manually:
- Download garminbadges-updater.zip from the Garmin Badge Database sync page and unzip it.
- In Chrome go to
chrome://extensions. - Enable Developer mode (toggle in the top right).
- Click Load unpacked and select the unzipped folder.
- Pin the extension to your toolbar for easy access.
Open the extension and click Settings:
| Setting | Description |
|---|---|
| API key | Your personal key from the Dashboard. Required. |
| API URL | Backend URL. Default: https://api.garminbadges.com/api. Change to http://localhost:8000/api for local development. |
- In Chrome go to Settings → Extensions → Manage Extensions.
- Enable Developer mode (top right).
- Click Load unpacked and select this repo folder.
- Disable the production extension so only the local version is active.
- Open the extension Settings and set the API URL to
http://localhost:8000/api. - Set your API key from
http://localhost:4200/dashboard.
Releases are automated. Pushing to main triggers the Release Extension GitHub Actions workflow, which reads the version from manifest.json, auto-increments the patch, commits the updated manifest back, and publishes a GitHub release with the packaged zip. The next garminbadges frontend build will automatically fetch the new zip and serve it at /tools/garminbadges-updater.zip.
To release a new version:
- Test locally.
- Update
update.htmlwith the new version number and release notes. - Push to
main— the CI handles versioning, packaging, and the GitHub release automatically.
To release a specific version (e.g. a minor or major bump) instead of a patch increment, trigger the workflow manually from Actions → Release Extension → Run workflow and enter the version number.
To submit to the Chrome Web Store:
- Download the zip from the latest GitHub release.
- Go to the Chrome Developer Dashboard.
- Click the extension → Package → Upload new package → select the zip.
The extension injects sync.js into the active Garmin Connect tab when the user clicks Sync now. Running inside connect.garmin.com, the script can call Garmin's internal API endpoints directly using the user's existing browser session.
All calls to the garminbadges.com API are routed through the background service worker (background.js) to avoid mixed-content and CORS restrictions that apply to injected content scripts. The background worker only forwards requests to an allowlisted set of domains (garminbadges.com, localhost).
Authentication uses the api_key field from the user's Dashboard — not a Sanctum session token. The extension calls GET /api/sync/whoami to resolve the username and POST /api/sync to upload badge data.
The authoritative repeat count comes from the badgeEarnedNumber field in Garmin's badge/earned endpoint response (not earnedNumber, which is often 1 and unreliable). The sync script reads badgeEarnedNumber and falls back to earnedNumber only if the former is absent.