Skip to content
AF

HKUnit Families by Quantity Type

120 quantity types across 22unit families · read from Apple’s documentation on 2026-08-28

116 of HealthKit's 120 quantity types resolve to a unit family, and 4 state none. Includes the compound units: count/time, volume/time, volume/mass/time.

Every HealthKit quantity sample stores a number and the unit that number is in, and the two are inseparable — a stored double without its unit is not a weight, a distance or an energy, it is just a double. This page lists the unit family each quantity type belongs to. 116 of the 120 quantity types in the dataset resolve to one. Four do not.

Apple's HKUnit documentation, read 2026-09-04, describes the raw material: "The unit class supports most standard SI units (meters, seconds, and grams), SI units with prefixes (centimeters, milliseconds and kilograms) and equivalent non-SI units (feet, minutes, and pounds)." Beyond that flat list it adds: "HealthKit also supports creating complex units by mathematically combining existing units." The combining is done by explicit methods — unitDivided(by:) "Creates a complex unit by dividing the receiving unit by another unit," and there is a matching multiply, a raise-to-power, and a reciprocal. There is also a string route in, init(from:), which "Returns the unit instance described by the provided string."

That is why the families in the table below are not all simple nouns. A heart rate is not a count and not a time; it is count/time, a count divided by a minute, and the same construction shape covers respiratoryRate, restingHeartRate and walkingHeartRateAverage. vo2Max is the deepest of them, volume/mass/time — a volume of oxygen per unit of body mass per unit of time, three units combined, which no single named unit can express. peakExpiratoryFlowRate is volume/time. The sport speeds (runningSpeed, cyclingSpeed, rowingSpeed, paddleSportsSpeed, crossCountrySkiingSpeed, walkingSpeed) are distance over time, and cyclingCadence is counts per minute.

The simple families carry most of the population. Mass carries the largest share of the population, because the dietary types all live there — every logged gram of protein, sodium or fat — alongside bodyMass and leanBodyMass. Length holds the distance types, from distanceWalkingRunning through distanceSwimming to the iOS 18.0 additions distanceRowing and distancePaddleSports. Energy holds activeEnergyBurned, basalEnergyBurned and dietaryEnergyConsumed. Count holds the things that are genuinely dimensionless — stepCount, flightsClimbed, pushCount, swimmingStrokeCount, and bodyMassIndex, which is an index rather than a measurement. Smaller families are more specific than you might expect: bloodGlucose is mass/volume, electrodermalActivity is conductance, insulinDelivery is international units, the audio types are sound pressure, and blood pressure is pressure.

The four quantity types with no unit family stated are appleSleepingBreathingDisturbances, estimatedWorkoutEffortScore, physicalEffort and workoutEffortScore. Three of those four also have no abstract and no stated aggregation style. physicalEffort is the exception: Apple describes it as "A quantity sample type that measures the estimated amount of energy being used to perform a task excluding other factors such as temperature, altitude, or heart rate" and states discrete aggregation, but does not name a unit.

One note on how these values were produced. The families were derived from Apple's documentation prose, read on 2026-08-28 for the HealthKit identifier dataset, and the first version of the parser excluded the "/" character — so every compound unit resolved to nothing and heart rate rendered with no unit at all. Widening it took the resolved count to 116 of 120. Where the source does not state a unit, the field is null rather than filled in.

For the other half of reading a quantity correctly, see sum or average. Per-metric detail lives on heart rate and VO2 max, and unit handling across providers is covered in normalizing wearable data.

Quantity types by unit family

Apple states a unit family in prose for 116 of the 120quantity types. The family is derived from that sentence, never guessed — where the wording does not state one the type is listed under “no unit family stated” rather than assigned a plausible family. The family names are Apple’s own words, which is why near-synonyms such as separate percentage and distance-per-time spellings appear as distinct groups.

mass 39 types

length 15 types

count 11 types

distance per time 6 types

time 6 types

count/time 4 types

percent 4 types

percentage 4 types

temperature 4 types

energy 3 types

power 3 types

sound pressure 3 types

volume 3 types

distance/time 2 types

pressure 2 types

conductance 1 type

counts per minute 1 type

distance 1 type

international 1 type

mass/volume 1 type

volume/mass/time 1 type

volume/time 1 type

No unit family stated 4 types

Apple’s prose for these types names no unit family. Read the type’s own documentation before choosing an HKUnit.

What will bite you

A family is not a unit. Knowing that bodyMass is in the mass family does not tell you whether the number you are holding is in kilograms, pounds or stones — you decide that when you ask the quantity for its value, and the same sample will answer in any compatible unit. Never store a bare double. Store the value and the unit string together, or normalize to one unit at the boundary and record which one you chose.

Four types have no unit at all. appleSleepingBreathingDisturbances, estimatedWorkoutEffortScore, physicalEffort and workoutEffortScore state no unit family. For three of them Apple also states no abstract and no aggregation style, so a chart of them has no documented axis and no documented rollup. physicalEffort at least tells you it is discrete. Display raw samples, or probe the behaviour yourself and write down what you found.

The family labels are prose-derived, so their wording varies. The same dimension can appear as "percent" in one row and "percentage" in another, or "length" in one and "distance" in another, because each value came from the sentence Apple wrote on that identifier's page rather than from a fixed vocabulary. Read the family as a hint for a human, not as a join key — if you need to branch on dimension in code, map identifiers to your own enum.

Compound units are where parsers break. They broke this one: excluding the "/" character from the unit pattern silently emptied every count/time, volume/time and volume/mass/time row, and the visible symptom was heart rate showing no unit rather than an error. If you are extracting units from documentation, test the compound cases first.

Questions

Which HealthKit quantity types have no unit?

Four: appleSleepingBreathingDisturbances, estimatedWorkoutEffortScore, physicalEffort and workoutEffortScore. Apple's pages for the first three also carry no abstract and no aggregation style. physicalEffort is described and stated as discrete, but no unit is named for it. The remaining 116 quantity types resolve to a family.

How does HealthKit express a unit like beats per minute?

By combining simpler units. Apple's HKUnit documentation, read 2026-09-04, states that HealthKit "supports creating complex units by mathematically combining existing units", and unitDivided(by:) "Creates a complex unit by dividing the receiving unit by another unit". A heart rate is therefore a count divided by a time, which is why its family reads count/time.

Is a unit family the same as the unit I read a sample in?

No. The family tells you the dimension the type measures; the unit is what you ask the quantity for when you pull the value out, and any compatible unit will answer. Two apps reading the same body mass sample can legitimately get different numbers, so record the unit alongside every value you store.

Derived by AIFitnessAPI from Apple’s published documentation, read 2026-08-28. The full table with units, aggregation and value enums is at every HealthKit type identifier, and the machine-readable export is on datasets.