When ROOK extracts health data, the information often comes in raw form and without a clear structure. This phenomenon is known as unstructured data, and it represents one of the biggest challenges (and opportunities) for ROOK.
What is unstructured data?
Unstructured data is any information that does not follow a fixed or predictable format. It is not organized in rows or columns, and often appears as free text or custom fields where each manufacturer decides how to report it.
ROOK simplifies the chaos
ROOK takes this unstructured data, interprets it, and transforms it into a standardized, ready-to-use structure. Essential data, such as sleep duration, heart rate, or glucose levels, is converted into clean, consistent fields.
This way, ROOK allows developers and companies to connect multiple data sources without worrying about odd formats or inconsistencies. It enables more effective work with health data without having to interpret each source individually.
Access to unstructured data
ROOK makes both structured and unstructured data available to users, depending on the client’s needs. To enable unstructured data in event and summary JSONs, please check your plan or contact ROOK Support.
JSON with unstructured data
Unstructured data will be delivered by ROOK via the respective JSONs, depending on the event or summary it comes from. In this case, we’ll use an example of unstructured data from a Physical Summary extracted from Garmin.
{
"non_structured_data_array": [
{
"userId": "",
"summaryId": "",
"startTimeInSeconds": 1746486000,
"startTimeOffsetInSeconds": 3600,
"durationInSeconds": 120,
"calendarDate": "2025-05-06",
"timeOffsetStressLevelValues": {
"0": 19
},
"timeOffsetBodyBatteryValues": {
"0": 26
}
},
{
"userId": "a27b4eb2-7722-445a-84ca-de65c1977316",
"summaryId": "x3aaeee0-681942f0-78-0",
"calendarDate": "2025-05-06",
"activityType": "GENERIC",
"activeKilocalories": 0,
"bmrKilocalories": 2,
"steps": 0,
"distanceInMeters": 0,
"durationInSeconds": 120,
"activeTimeInSeconds": 0,
"startTimeInSeconds": 1746486000,
"startTimeOffsetInSeconds": 3600,
"moderateIntensityDurationInSeconds": 0,
"vigorousIntensityDurationInSeconds": 0,
"floorsClimbed": 0,
"minHeartRateInBeatsPerMinute": 52,
"maxHeartRateInBeatsPerMinute": 52,
"averageHeartRateInBeatsPerMinute": 52,
"restingHeartRateInBeatsPerMinute": 49,
"stepsGoal": 10000,
"intensityDurationGoalInSeconds": 9000,
"floorsClimbedGoal": 200,
"averageStressLevel": 19,
"maxStressLevel": 21,
"restStressDurationInSeconds": 120,
"stressQualifier": "unknown"
}
],
"sources_of_data": [
"Garmin"
]
}