{"id":27793,"library":"garmindb","title":"GarminDB","description":"Download and analyze Garmin Connect data, including activities, health data (HR, sleep, steps), and more. Version 3.7.0 released March 2025; active development with frequent releases.","status":"active","version":"3.7.0","language":"python","source_language":"en","source_url":"https://github.com/tcgoetz/GarminDB","tags":["garmin","fitness","health-data","activity-tracking","workout","data-analysis"],"install":[{"cmd":"pip install garmindb","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Handles Garmin Connect authentication","package":"garth","optional":false},{"reason":"Used for data analysis and export","package":"pandas","optional":false},{"reason":"Database ORM for storing data","package":"sqlalchemy","optional":false}],"imports":[{"note":"Capitalization: lowercase 'b' in 'Db'","wrong":"from garmindb import GarminDB","symbol":"GarminDb","correct":"from garmindb import GarminDb"},{"note":"","wrong":"","symbol":"GarminConnect","correct":"from garmindb import GarminConnect"},{"note":"garmindb_cli is a module inside garmindb package, not a top-level script","wrong":"import garmindb_cli","symbol":"garmindb_cli","correct":"from garmindb import garmindb_cli"}],"quickstart":{"code":"import os\nfrom garmindb import GarminConnect, GarminDb\n\n# Set credentials as environment variables or directly\nemail = os.environ.get('GARMIN_EMAIL', '')\npassword = os.environ.get('GARMIN_PASSWORD', '')\n\n# Initialize GarminConnect client\nclient = GarminConnect(email=email, password=password)\n\n# Download recent activities\nactivities = client.get_activities(start=0, limit=10)\nprint(f\"Downloaded {len(activities)} activities\")\n\n# Initialize database (creates local SQLite)\ndb = GarminDb()\ndb.create_tables()\n\n# Save activities to database\nfor activity in activities:\n    db.save_activity(activity)\nprint(\"Data saved to GarminDB database.\")","lang":"python","description":"Initialize GarminConnect, download activities, create local database and store data."},"warnings":[{"fix":"Run 'garmindb_cli.py --rebuild_db' (or the equivalent Python call) once after upgrading.","message":"Version 3.7.0 requires a database rebuild. Run 'garmindb_cli.py --rebuild_db' after upgrade or you'll get schema errors.","severity":"breaking","affected_versions":">=3.7.0"},{"fix":"Re-authenticate via OAuth. The library now uses browser-based login; headless may require token refreshes.","message":"Starting with version 3.6.0, authentication uses the 'garth' library. Old 'garminconnect' credentials may fail.","severity":"breaking","affected_versions":">=3.6.0"},{"fix":"Use 'garmindb_cli.py' as the command, e.g. 'garmindb_cli.py --rebuild_db'.","message":"The CLI script is installed as 'garmindb_cli.py' (not 'garmindb_cli'). Running 'garmindb_cli --help' will fail.","severity":"gotcha","affected_versions":">=2.0"},{"fix":"Set 'database_dir' in your config file or use default.","message":"The 'GarminDb' class constructor no longer supports the 'db_directory' parameter. It's now auto-detected from config.","severity":"deprecated","affected_versions":">=3.4.0"}],"env_vars":null,"last_verified":"2026-05-09T00:00:00.000Z","next_check":"2026-08-07T00:00:00.000Z","problems":[{"fix":"Use 'from garmindb import garmindb_cli' or run the CLI as 'garmindb_cli.py' (script installed to PATH).","cause":"Trying to import garmindb_cli as a top-level module.","error":"ModuleNotFoundError: No module named 'garmindb_cli'"},{"fix":"Ensure you're using the latest version (3.6.0+). The library now uses OAuth via garth. Clear any old tokens and re-authenticate with email/password.","cause":"Outdated authentication method or invalid credentials.","error":"garminconnect.exceptions.GarminConnectAuthenticationError: Unable to authenticate with provided credentials"},{"fix":"Use 'garmindb_cli.py --rebuild_db' to drop and recreate all tables, or call db.rebuild_tables() instead.","cause":"Running create_tables() without first checking if tables exist, or not doing a rebuild after upgrade.","error":"sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table 'activity' already exists"},{"fix":"Upgrade to latest version: 'pip install --upgrade garmindb'. Check docs for current API: use client.get_activities(start=0, limit=10).","cause":"Using an older version (pre-3.6) where the API method names differ.","error":"AttributeError: 'GarminConnect' object has no attribute 'get_activities'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}