FitBit activity is autodetected.  For example, a walk will be logged if the tracker detects it without the user manually initiating an activity.  This is also true for sleep.

At the time of writing, ALEAPP is able to parse Fitbit data and AXIOM parses some data, but not as much as ALEAPP. FitBit is also collecting location data in background when the app is not in use (see below). The data is stored in a several database, which are referenced below.

USERDATA/data/com.Fitbit.FitbitMobile/files/User/%ENCODED_USER_ID%/companion_data/platform.db

Table of Interest:

console_log 

NOTE: The column “message” contain various app messages.  Searching the column contents for the word “location” can retrieve URLs that were fetched for weather conditions at the phone’s location.  The URL contains the lat/long of the phone.  There are associated timestamps with the entries.   Josh located about 48 hours’ worth of log entries like this. 

USERDATA/data/com.Fitbit.FitbitMobile/databases/activity_db - contains a summary of logged activity

Table of Interest: 

ACTIVITY_LOG_ENTRY 

Query: 

SELECT 

datetime(ACTIVITY_LOG_ENTRY.LOG_DATE/1000,’unixepoch’) AS “Time of Activity (UTC)”, 

ACTIVITY_LOG_ENTRY.NAME AS “Activity Type”, 

ACTIVITY_LOG_ENTRY.LOG_TYPE AS “Method of Tracking”, 

ACTIVITY_LOG_ENTRY.SOURCE_NAME AS “Source of Tracking”, 

ACTIVITY_LOG_ENTRY.ACTIVE_DURATION AS “Activity Duration (Seconds)”, 

ACTIVITY_LOG_ENTRY.DISTANCE AS “Distance”, 

ACTIVITY_LOG_ENTRY.DISTANCE_UNIT AS “Distance Unit of Measurement”, 

ACTIVITY_LOG_ENTRY.STEPS AS “Steps”, 

ACTIVITY_LOG_ENTRY.SPEED AS “Speed (Measurement/hr)”, 

FROM 

ACTIVITY_LOG_ENTRY 

USERDATA/data/com.Fitbit.FitbitMobile/databases/device_database  - lists information about devices associated with account 

Table of Interest: 

core_device

Query: 

SELECT 

core_device.deviceName AS “Device Name”, 

core_device.bleMacAddress AS “Bluetooth MAC Address”, 

core_devce.deviceType AS “Device Type”, 

datetime(core_device.lasSyncTime/1000, ‘unixepoch’) AS “Device Last Sync (UTC)”, 

core_device.batteryPercent AS “Battery Percent At Last Sync” 

FROM 

core_device 

USERDATA/data/com.Fitbit.FitbitMobile/databases/exercise_db - stores information about exercises performed.  Also contains data that has been sync’d with Fitbit 

Tables of Interest:

EXERCISE_SESSION

EXERCISE_EVENT

Queries: 

SELECT 

datetime(EXERCISE_SESSION.START_TIME/1000,’unixepoch’) AS “Exercise Start Time (UTC)”, 

datetime(EXERCISE_SESSION.STOP_TIME/1000,’unixepoch’) AS “Exercise Stop Time (UTC)”, 

CASE 

WHEN EXERCISE_SESSION.ACTIVITY_TYPE=90009 THEN ‘Running’ 

WHEN EXERCISE_SESSION.ACTIVITY_TYPE=90013 THEN ‘Walking’ 

END AS “Activity Type” 

FROM 

EXERCISE_SESSION 

SELECT 

Datetime(EXERCISE_EVENT.TIME/1000,’unixepoch’) AS “Time (UTC)”, 

EXERCISE_EVENT.SESSION_ID AS “Session ID”, 

CASE 

WHEN EXERCISE_SESSION.ACTIVITY_TYPE=90009 THEN ‘Running’ 

WHEN EXERCISE_SESSION.ACTIVITY_TYPE=90013 THEN ‘Walking’ 

END AS “Activity Type”, 

EXERCISE_EVENT.LATITUDE, 

EXERCISE_EVENT.LONGITUDE, 

EXERCISE_EVENT.ALTITUDE AS “Altitude (meters)”, 

EXERCISE_EVENT.SPEED AS “Speed (km/hr)”, 

EXERCISE_EVENT.ACCURACY 

FROM 

EXERCISE_EVENT 

JOIN EXERCISE.SESSION ON EXERCISE_SESSION.UUID=EXERCISE_EVENT.SESSION_ID 

(NOTE:  This query gives all exercise events, along with their location at any given point in time along with the activity type)