Skip to main content

activy-checker

tests

Audit Activy's activity sync: detect activities that never arrived and activities recorded with incorrect distances — and get a clean summary of your training. It currently compares Activy with Garmin Connect; other sources can be requested.

Activy imports workouts from Garmin, but the import is not always complete: a ride can silently never appear, or show up with the wrong distance. If Activy powers a company or charity challenge, those gaps cost you points. activy-checker logs into your two accounts, pulls your activities for a date range and tells you exactly what is different.

Matched: 5 | Missing in Activy: 1 | Missing in Garmin: 0 | Distance mismatches: 1

-- Missing in Activy (present in Garmin, not imported) [1] --
  2026-05-10  road_biking          98.40 km  3:12:00

Why I built this

Activy's import from Garmin is not 100% reliable. I found out by pure chance: one day I noticed that an activity recorded on my Garmin had never appeared in Activy. Nothing warned me — not the app, not Activy.

When I contacted Activy support, I was not told about any errors on their side, and they were not willing to look at the history of my earlier activities to check whether anything else was missing. I found that strange: if one activity can silently go missing, others can too, and I had no way to check.

That is why I wrote activy-checker — so that anyone can verify their own Activy history against Garmin instead of relying on luck.

Features

  • Missing in Activy — activities recorded on Garmin that never reached Activy.
  • Missing in Garmin — activities that exist only in Activy (e.g. manual entries).
  • Distance mismatches — the same activity stored with a different distance.
  • Summaries — count, distance and time per activity kind, for each source.
  • JSON export of everything above, for your own scripts or a support ticket.
  • Passwords are prompted with getpass and never stored; the Garmin session can optionally be cached so MFA is needed only once.

Disclaimer

This is an unofficial tool, not affiliated with or endorsed by Activy or Garmin. Activy has no public API, so activy-checker talks to the same mobile endpoints the Activy app uses, signing in with your own credentials. Use it only with your own account and your own data, at your own risk. The Activy API can change without notice and break the tool.

Quick start

Requires Python 3.12+. The easiest way is pipx, which installs the command in its own environment:

pipx install activy-checker
activy-checker --garmin-tokenstore ~/.garminconnect

or with pip: pip install activy-checker. To work on the code, see Contributing.

You will be asked for your Activy email and password, then your Garmin email and password and — if your Garmin account uses two-step verification — the code Garmin emails you.

Common commands

activy-checker                                   # from 2026-09-01 (default)
activy-checker --since 2026-09-01 --until 2026-09-30
activy-checker --activy-only                     # just summarize Activy
activy-checker --garmin-tokenstore ~/.garminconnect   # cache Garmin session
activy-checker --since 2026-09-01 --json result.json  # machine-readable output

All options are described in docs/usage.md.

Example output

== Activy ==

Kind       Count     Distance       Time
----------------------------------------
Bike           2     103.5 km    3:31:00
Run            2       9.3 km    1:27:00
Exercise       1       0.0 km    0:25:00
----------------------------------------
TOTAL          5     112.8 km    5:23:00

== Garmin ==

Kind       Count     Distance       Time
----------------------------------------
Bike           3     201.9 km    6:43:01
Run            1       5.2 km    0:32:01
Walk           1       9.9 km    0:55:01
Exercise       1       0.0 km    0:25:00
----------------------------------------
TOTAL          6     217.0 km    8:35:03

== Comparison: Activy vs Garmin ==

Matched: 5 | Missing in Activy: 1 | Missing in Garmin: 0 | Distance mismatches: 1

-- Missing in Activy (present in Garmin, not imported) [1] --
  2026-05-10  road_biking          98.40 km  3:12:00

-- Missing in Garmin (present in Activy only) [0] --
  (none)

-- Distance mismatches (same activity, different distance) [1] --
  2026-05-05  Activy    4.10 km  vs Garmin    9.87 km  (Δ -5.77 km)

(Sample data.) Note that the two summaries use each service's own categories: Activy files Garmin walks and hikes under Run, so kinds are not expected to line up one-to-one — the comparison matches individual activities, not kinds.

Documentation

  • Usage — every option, exit codes, JSON format, using it as a library
  • How it works — the Activy API, fetching, matching rules, type mapping
  • Troubleshooting — login problems, Garmin rate limits, reading the results
  • Contributing — development setup, tests and releases
  • Changelog

Other integrations

activy-checker currently compares Activy with Garmin Connect only. If you use Activy with Strava, Polar, Suunto or another service and would like it supported, please open a feature request and tell us which service you use.

Found a bug? Report it here.

License

MIT — see LICENSE.

Metadata

Release files for activy-checker 0.2.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for activy-checker 0.2.6
File Size Uploaded
activy_checker-0.2.6.tar.gz 35.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for activy-checker 0.2.6
File Interpreter ABI Platform
activy_checker-0.2.6-py3-none-any.whl Python 3 none any Details

Total release size: 53.0 kB

Release files / activy_checker-0.2.6.tar.gz

Download URL activy_checker-0.2.6.tar.gz
Size 35.1 kB
Tags Source
SHA-256 checksum
How to use checksums
e02a8f237609b12135499b4a3027c2357bf32079d43e722529c65b342c611fcb
BLAKE2b-256 checksum
How to use checksums
380bbb499a7e24a24c2c15a63ed504363dae6ce13cd1b7f4e782a0a3c10e2675
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / activy_checker-0.2.6-py3-none-any.whl

Download URL activy_checker-0.2.6-py3-none-any.whl
Size 17.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3ab53f7a25933da45573ecb898d80aed71f7e19eb670323c886fd3eb8d7df94e
BLAKE2b-256 checksum
How to use checksums
eeee00852628327f8d99c28e14d443924e3b8327d59e795badab18c2f2662f48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.6 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page