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.7

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.7
File Size Uploaded
activy_checker-0.2.7.tar.gz 36.6 kB Details

Built distribution (wheel)

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

Total release size: 55.2 kB

Release files / activy_checker-0.2.7.tar.gz

Download URL activy_checker-0.2.7.tar.gz
Size 36.6 kB
Tags Source
SHA-256 checksum
How to use checksums
de97e14f964a85cfb76cec8dfb4eaca1e1a96bd95ac75f993bd5bf718835e48f
BLAKE2b-256 checksum
How to use checksums
6cdcd1dd257466b304f8f4beda3aff64bcc34ef530a671790e280c38d667e2e6
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 Oct 15, 2026.

Transparency log

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

Download URL activy_checker-0.2.7-py3-none-any.whl
Size 18.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
07d6490902f2edab5b8e59eeef61a4278f65c6feae4ba5ba9dc439544bd5d945
BLAKE2b-256 checksum
How to use checksums
dcdd82b0d68cbadc2877f7d2869be9af7ae3fa530f8863b0603fb2152cd9c18e
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 Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.7 This release

2 release files

0.2.6

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