Collecting and analyzing stats about the ActivityWatch project.
Some of the data can be viewed at: https://activitywatch.net/stats/
There's also a related project for generating contributor stats in: https://github.com/ActivityWatch/contributor-stats/
All data is stored in the data folder.
These data are updated automatically in CI:
stats.csv- Downloads & GitHub starsreleases.csv- Release dates of past releases (GitHub tags — when a version was cut, not when it reached users)android-tracks.csv- Play release-track state: which versionCode each track serves, and staged-rollout progressstats-assets.csv- Per-asset download counts (source for per-platform / per-version breakdowns)android/installed.csv- Android install base (Active Device Installs, Play Console bulk reports)android-crash-rate.csv/android-anr-rate.csv- Android vitals (Play Developer Reporting API)android-ratings.csv- Android Play Store rating over time (Total Average Rating, bulk reports)
The following is manually updated:
chrome-weekly-users.csv- Chrome extension weekly active usersfirefox-daily-users.csv- Firefox extension daily active usersnotes.csv- Manual entries of major/interesting events
vitals.py pulls Android vitals (crash rate, ANR rate) from the Google Play
Developer Reporting API. It works both as an ad-hoc CLI (run with your own
service-account key) and as a CSV collector for the data folder:
uv run vitals.py summary # latest crash + ANR rate
uv run vitals.py crash-rate --days 60 # timeline to stdout
uv run vitals.py crash-rate --update data/android-crash-rate.csv # upsert daily series (collector)
uv run vitals.py errors --limit 10 --stacktraces # top crash clusters + sample stacktraces
uv run vitals.py crash-rate --dry-run # inspect the API request, no authNeeds a Google Cloud service account granted "view app quality / Android
vitals" access in the Play Console; point at the key with --credentials or
GOOGLE_APPLICATION_CREDENTIALS. See the module docstring for setup.
releases.csv records when a version was tagged, which is not when it
reached users — v0.14.0b2 was tagged 2026-07-22 and promoted to production a
month later. play_tracks.py records the other half: which release each Play
track currently serves, and how far a staged rollout has progressed.
uv run play_tracks.py # human summary per track
uv run play_tracks.py --update data/android-tracks.csv # daily snapshot (idempotent)
uv run play_tracks.py --csv # rows to stdoutThis uses the Android Publisher API (not the Reporting API vitals.py uses),
so the service account needs an app permission that allows opening an edit —
at least "Release to testing tracks". "View app quality information" alone is
not enough; the tool exits 3 with that advice rather than a stack trace.
Pair it with vitals.py by-version to attribute a crash rate to a release:
the app-wide rate is dominated by whatever the install base still runs, so a
partial rollout of a genuinely fixed build barely moves it.
android_installs.py automates android/installed.csv (the install base
currently exported by hand) from the Play Console bulk "installs" reports in
Cloud Storage:
uv run android_installs.py --bucket pubsite_prod_rev_XXXX list # what's available
uv run android_installs.py --bucket pubsite_prod_rev_XXXX update # write installed.csvNeeds a service account with the Play Console "Download bulk reports" permission; get the bucket from Play Console -> Download reports -> Statistics ("Copy Cloud Storage URI").
- Twitter followers
- AlternativeTo votes
Events - releases, posts to reddit, published on ProductHunt, etc.Per version/platform download stats(seestats-assets.csv)- Website analytics (collected with Google Analytics, might be analyzed here)
- Android vitals collection in CI (once a service-account secret is provisioned)