BeatLedger FIT Importer
BeatLedger FIT Importer is an optional local terminal tool for bringing Garmin Connect running activities into BeatLedger. BeatLedger and this importer are currently beta software.
The importer supports Garmin running activities only. It does not support other providers or direct integrations yet. You can continue to use manual FIT upload in BeatLedger instead.
Source code, issues, and release history are public at github.com/frankstevens1/beatledger-fit-import.
Before you start
You need:
- An active BeatLedger beta account.
- A Garmin Connect account with running activities.
- uv, which installs and manages the required Python runtime.
Install and import
-
Install the importer and confirm that it can reach BeatLedger:
uv tool install beatledger-fit-import beatledger-fit doctor
-
Start an interactive import:
beatledger-fit import -
When prompted, approve the short code in your browser. Sign in to BeatLedger there, not in the terminal.
-
Enter Garmin credentials locally when prompted, then choose one import mode:
- Date range imports running activities between two inclusive dates.
- Individual runs lets you choose from a list of recent runs.
- Incremental imports Garmin activities BeatLedger has not already recorded.
-
Review the selected runs and confirm before any FIT file is uploaded.
The command finishes with a summary such as:
Imported: 3 Duplicates: 1 Failed: 0
Imported means BeatLedger accepted the selected FIT file for processing. Duplicates are activities BeatLedger already has, and Failed entries are reported with their activity name so you can retry them.
Useful commands
Check your installation and API connection:
beatledger-fit doctor
Preview the runs that would be selected without downloading or uploading FIT files:
beatledger-fit import --dry-run
Keep downloaded FIT files in beatledger-fit-files/ in the current directory. Those files can contain sensitive route and health information; they are deleted by default and this directory is ignored by Git:
beatledger-fit import --keep-files
Remove local Garmin and BeatLedger importer access:
beatledger-fit logout
Update or uninstall the importer:
uv tool upgrade beatledger-fit-import
uv tool uninstall beatledger-fit-import
Privacy and security
- Garmin credentials are entered on your computer and are not sent to BeatLedger. The importer uses them to connect to Garmin.
- Garmin refresh credentials remain on your computer. Your Garmin password is not stored by this tool.
- BeatLedger approval happens in your browser at
beatledger.app. The CLI receives a separate, revocable importer authorization, never your browser cookies or email one-time code. - The importer stores BeatLedger authorization in the system keyring when available; otherwise it uses a restricted local fallback file and tells you when that fallback is used.
- Only FIT files you explicitly select and confirm are uploaded to BeatLedger. They are held in memory and removed locally after upload unless you use
--keep-files. - This application does not include analytics or telemetry.
You can revoke BeatLedger importer access from your BeatLedger Account page, or run beatledger-fit logout to remove local access.
Limitations and troubleshooting
- This is an unofficial, read-only Garmin Connect integration. It is not made by or affiliated with Garmin and may stop working if Garmin changes its service.
- The importer handles Garmin running activities only. Manual FIT upload is the fallback for other sources or unavailable Garmin downloads.
- If browser approval expires, run
beatledger-fit importagain and approve a new code. - If Garmin login or download fails, verify your Garmin account and MFA code, then retry the selected activity.
- Run
beatledger-fit doctorto check your Python version and BeatLedger API connection.
For setup instructions within BeatLedger, see the BeatLedger importer guide. Report security concerns under the process in SECURITY.md; report bugs at the GitHub issue tracker.
Local development
To test against a local BeatLedger API instead of the default production API:
BEATLEDGER_API_URL=http://127.0.0.1:8000 uv run beatledger-fit doctor
BEATLEDGER_API_URL=http://127.0.0.1:8000 uv run beatledger-fit import --dry-run
Use the local HTTP override only for trusted local development. See local testing for the required Supabase, API, and browser-approval setup, and releasing for publication steps.
Development checks
uv sync --all-groups --locked
uv run ruff check .
uv run pytest -q
uv build
Do not use a personal Garmin account in automated tests. Live testing should use a dedicated account and must never record credentials, tokens, activity responses, or FIT files.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file beatledger_fit_import-0.1.0.tar.gz.
File metadata
- Download URL: beatledger_fit_import-0.1.0.tar.gz
- Upload date:
- Size: 47.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0e49c750b7a35391ff56111b68ae53830a2022f47c8d0f7925a610773bc1170
|
|
| MD5 |
2cd8356b8ddde76981fedc12aaca98c7
|
|
| BLAKE2b-256 |
ed4f7a21a8fe6887b944556e91127a3a37321fc64e2e13bd5f2ca9619be77334
|
Provenance
The following attestation bundles were made for beatledger_fit_import-0.1.0.tar.gz:
Publisher:
release.yml on frankstevens1/beatledger-fit-import
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beatledger_fit_import-0.1.0.tar.gz -
Subject digest:
f0e49c750b7a35391ff56111b68ae53830a2022f47c8d0f7925a610773bc1170 - Sigstore transparency entry: 2565409113
- Sigstore integration time:
-
Permalink:
frankstevens1/beatledger-fit-import@eb9dc65815c3ebc81735de374f0bbf5349708c08 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/frankstevens1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@eb9dc65815c3ebc81735de374f0bbf5349708c08 -
Trigger Event:
push
-
Statement type:
File details
Details for the file beatledger_fit_import-0.1.0-py3-none-any.whl.
File metadata
- Download URL: beatledger_fit_import-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84bb4073b9d74c04f59e6f4d823fbce2b6d14c806956e836b8647c14da49d551
|
|
| MD5 |
d646d001b219c2464ca636fc79e9a3c5
|
|
| BLAKE2b-256 |
a46a1dc548c89875baec3bc6201d8dd4cb7cd18116ce42b01d39c9b643d84f81
|
Provenance
The following attestation bundles were made for beatledger_fit_import-0.1.0-py3-none-any.whl:
Publisher:
release.yml on frankstevens1/beatledger-fit-import
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beatledger_fit_import-0.1.0-py3-none-any.whl -
Subject digest:
84bb4073b9d74c04f59e6f4d823fbce2b6d14c806956e836b8647c14da49d551 - Sigstore transparency entry: 2565409257
- Sigstore integration time:
-
Permalink:
frankstevens1/beatledger-fit-import@eb9dc65815c3ebc81735de374f0bbf5349708c08 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/frankstevens1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@eb9dc65815c3ebc81735de374f0bbf5349708c08 -
Trigger Event:
push
-
Statement type: