Garmin wearables have differing capabilities.  For example, not all wearables are capable of real-time heart rate monitoring. Garmin can passively detect activities by a user and log the activity without a user actively starting an exercise in the app or on the wearable.  This setting is OFF by default. If setting is on, it could log activity, unbeknownst to the user, that could be pertinent, which could include steps, heart rate, location, steps climbed.  The type of data logged would be dependent on the capabilities of the wearable.  Most of the relevant data available in the databases is stored in JSON. The query below is associated to device notifications.

SELECT 

datetime(notification_info.postTime/1000,'unixepoch') AS "Notification Time (UTC)", 

notification_info.packageName AS "App", 

notification_info.title AS "Notification Title", 

notification_info.message AS "Notification" 

FROM 

notification_info 

ORDER BY "Notification Time (UTC)" ASC 

There is a column "Status" in the database.  Observed values are NEW, UPDATED, DISMISSED.  I have not had time to test to see how accurate they are. 

USERDATA/data/com.garmin.android.apps.connectmobile/databases/gcm_cache.db

Tables of interest: 

  •  devices 

  •  ID Number 

  •  Product Number 

  •  Bluetooth MAC address 

  •  Display & Friendly Names (latter is likely what is seen by user via UI 

  •  Connection Type 

  •  Last connection time (UNIX Epoch - will be NULL if never paired with phone,  but associated with the Garmin account 

  •  Software Version 

  •  URL for stock photo (could help with identifying the actual device) 

  •  SKU 

  •  Part number 

  •  json 

  •  The data in this table is, as the name suggests, in json 

  •  Column "concept_name" provides insight into what the json data represents in the associated column ("cached_val") 

  •  Data is updated periodically (last updated timestamp in "saved_timestamp" column) 

  •  NOTE: The data in this table is based upon the capabilities of the wearable.  For example, if the wearable is not capable of collecting 24/7 heart rate data, the entry "REAL_TIME_HEART_RATE" may be empty or non-existent.

  •  USER_SETTINGS 

  •  Garmin Connect ID (useful for legal processes) 

  •  Provided date of birth 

  •  Gender 

  •  Handedness (indicates the setting for which hand the wearable is worn) 

  •  Heart rate format (bpm) 

  •  Height (in meters - provided by user) 

  •  Time format (12 or 24 hour) 

  •  Weight (in grams) 

  •  Sleep time (in seconds from midnight - wake time and bedtime) 

  •  json_activites 

  •  Data stored in this table is also in json 

  •  Tracks activities 

  •  Activity metrics within the JSON is stored in plain text 

  •  Includes the following if applicable to the activity AND if the associated wearable is able to capture: 

  •  Speed 

  •  Location 

  •  Elevation 

  •  Heart Rate 

  •  Cadence 

  •  Start/Stop location 

  •  Nearest Surface Weather Observation Station (searchable on the FAA website) 

  •  cache-database 

  •  This database appears to temporarily hold data.  I have multiple versions of this database, and some have lots of data, others not so much.  When it is populated here’s what's is available: 

  •  sleep_deta 

  •  Sleep Start/Stop 

  •  Total time in Seconds 

  •  Autosleep Start/Stop 

  •  Not sure how this differs from regular stop/start.  Garmin automatically detects sleep - a user doesn't need to initiate it 

  •  Time spent in sleep stages (in seconds) 

  •  Deep 

  •  Light 

  •  REM 

  •  Awake 

  •  SpO2 values during sleep 

  •  Respiration 

More info can be found in Josh Hickman’s blog:  https://thebinaryhick.blog/2021/05/22/the-state-of-android-health-data-part-1-garmin/ . A special thanks to Josh for all the research he did on Android Health artifacts.