{"adoption": {"forks": 291, "observed_at": "2026-08-28T04:07:53.496537+00:00", "stars": 3277}, "canonical_url": "https://ross.abutalabs.com/products/garmindb", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Download and parse data from Garmin Connect or a Garmin watch, FitBit CSV, and MS Health CSV files into and analyze data in Sqlite serverless databases with Jupyter notebooks.", "domain": ["healthcare", "data-science", "analytics", "developer-tools"], "enriched": true, "function": ["etl", "parser", "cli", "data-science", "analytics"], "health_score": 99, "homepage": null, "language": "Python", "license": "GPL-2.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["tcgoetz/GarminDB"], "name": "tcgoetz/GarminDB", "platform": ["python", "cli", "cross-platform", "windows"], "pushed_at": "2026-08-23T18:11:36+00:00", "repo": "tcgoetz/GarminDB", "stars": 3277, "tags": ["garmin", "garmin-connect", "fitbit", "sqlite", "jupyter-notebooks", "health-data", "wearables", "quantified-self", "fit-files", "tcx-export", "sleep-tracking", "heart-rate", "linux", "macos"], "topics": ["garmin", "python", "health", "database", "sqlite", "jupyter-notebooks"], "urls": [], "use_cases": ["download my Garmin Connect data into a local database", "import Garmin watch health and sleep data into sqlite", "parse FIT files from my fitness tracker", "analyze resting heart rate and stress trends over time", "visualize my activity history with jupyter notebooks", "back up my garmin activity data offline", "export garmin activities as tcx files"], "what_it_is": "A Python package and CLI that downloads and parses health and activity data from Garmin Connect, Garmin watches, FitBit CSV, and MS Health CSV files into serverless SQLite databases. It generates daily/weekly/monthly/yearly summary tables and supports graphing and analysis via Jupyter notebooks or SQL browsers.", "when_to_avoid": ["You use tracker platforms other than Garmin, FitBit, or Microsoft Health such as Polar or Suunto", "You need a polished GUI app or hosted dashboard rather than CLI scripts and notebooks", "You want real-time streaming of sensor data instead of periodic downloads and imports"], "when_to_choose": ["You want your Garmin (or FitBit / MS Health) data in a local, queryable SQLite database without running a server", "You need automated incremental syncing from Garmin Connect with JSON and FIT files retained so the database can be rebuilt offline", "You prefer exploring health trends in Jupyter notebooks, SQL views, or tools like DB Browser for SQLite"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/garmindb", "repo": "tcgoetz/GarminDB", "role": "main", "score": 95}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:53.496537+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:43:21.821019+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "344d9029516ac0fb5fa7aad15a6f49a129d69f65dd135677508c630ec25a3957", "fetched_at": "2026-08-28T04:07:53.496537+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tcgoetz/GarminDB"}, {"content_hash": "05d5bd2d5375ef65a6e7d7a76a1cbdd3a71b2ea77eedecf02dd564b1884506ea", "fetched_at": "2026-08-29T09:36:14.616620+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/garmindb/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 87}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3184, "days_push": 10, "days_rel": 10, "gap_med": 87, "n_releases_24m": 10}, "score": 95, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}