The 37 HealthKit Activity Types
37 identifiers · read from Apple’s documentation on 2026-08-28
Apple's Activity group holds 37 type identifiers. Thirty-five of them are quantity types, which carry a number and a unit. Two are category types, which carry an enum value instead. This is the corner of HealthKit most fitness products read first, and it is where the quietest mistakes live. Everything below comes from this site's HealthKit identifier dataset, parsed from Apple's developer documentation on 2026-08-28.
The 35 quantity types split 20 cumulative, 13 discrete, and 2 that state no
aggregation style at all. The cumulative twenty are daily totals.
stepCount, distanceWalkingRunning, activeEnergyBurned and
flightsClimbed all state cumulative, so summing them over a window is
right and averaging them describes the device's write cadence rather than the
user. The discrete thirteen are readings taken at a moment: cyclingPower,
runningSpeed, vo2Max and the rest of the per-sport telemetry. Sum a
discrete type and the number grows with how long the watch was worn. Nothing
throws either way, which is why the split gets its own
page.
Eight unit families appear across the group: count, counts per minute,
distance per time, energy, length, power, time, and volume/mass/time. That
last one belongs to vo2Max alone, which also carries 323 words of
discussion, more than any other identifier here, and is worth reading before
you put a number on a screen. Not everything has a unit
family. physicalEffort states discrete aggregation and no unit family, and
neither category type has one, because a category type carries an enum rather
than a measurement.
Four identifiers back the Activity rings. appleExerciseTime (iOS 9.3),
appleStandTime (13.0) and appleMoveTime (14.5) are all cumulative
amounts of time, and Apple scopes the appleMoveTime abstract to a
specified day. appleStandHour is the outlier: a category type from iOS 9.0
whose abstract counts hours in which the user stood and moved for at least a
minute, but whose value is HKCategoryValueAppleStandHour.
The group keeps growing, and recently. Nine of the 37 arrived in iOS 18.0,
five in 17.0 and five in 16.0, against seven that date to iOS 8.0. Apple has
been adding per-sport telemetry release by release. iOS 16.0 brought running
form:
runningGroundContactTime, runningPower, runningSpeed,
runningStrideLength and runningVerticalOscillation, the last measuring
pelvis vertical range of motion during a single stride. iOS 17.0 brought
cycling: cyclingCadence, cyclingPower, cyclingSpeed and
cyclingFunctionalThresholdPower, which Apple defines as the estimated
maximum average power sustained over 60 minutes on a bike. iOS 18.0 brought
distances for rowing, cross country skiing, skating and paddling, plus a speed
for each of those except skating.
Availability is per release, so a metric added in 18.0 does not exist on a
device that has not been updated.
Wheelchair users have had their own pair since iOS 10.0. pushCount counts
pushes performed while using a wheelchair and distanceWheelchair measures
distance moved that way, both cumulative. If step count is the only movement
metric your app reads, those users register as sedentary.
Four types in the group have Android counterparts we have verified:
activeEnergyBurned and basalEnergyBurned both against
ActiveCaloriesBurnedRecord and TotalCaloriesBurnedRecord,
stepCount against StepsRecord and StepsCadenceRecord, and
vo2Max against Vo2MaxRecord. Everything else here is Apple-only until
we verify a counterpart, which is a statement about our checking rather than
about Android. The cross-platform matrix shows how those four line
up, and the reference pages on step counting and
calorie tracking cover what each is made of on
both platforms.
The 37 identifiers in activity
Every field is joined from Apple’s documentation. Aggregation style and unit family are the two Apple states only in prose — where its wording does not state one, this table says so rather than guessing. Android names appear only where the mapping is verified on both platforms.
| Identifier | What it is | Aggregate | Unit | iOS | Android |
|---|---|---|---|---|---|
| activeEnergyBurnedHKQuantityTypeIdentifierActiveEnergyBurned | A quantity sample type that measures the amount of active energy the user has burned. | .cumulativeSum | energy | 8.0 | ActiveCaloriesBurnedRecord, TotalCaloriesBurnedRecord |
| appleExerciseTimeHKQuantityTypeIdentifierAppleExerciseTime | A quantity sample type that measures the amount of time the user spent exercising. | .cumulativeSum | time | 9.3 | not verified |
| appleMoveTimeHKQuantityTypeIdentifierAppleMoveTime | A quantity sample type that measures the amount of time the user has spent performing activities that involve full-body movements during the specified day. | .cumulativeSum | time | 14.5 | not verified |
| appleStandTimeHKQuantityTypeIdentifierAppleStandTime | A quantity sample type that measures the amount of time the user has spent standing. | .cumulativeSum | time | 13.0 | not verified |
| basalEnergyBurnedHKQuantityTypeIdentifierBasalEnergyBurned | A quantity sample type that measures the resting energy burned by the user. | .cumulativeSum | energy | 8.0 | ActiveCaloriesBurnedRecord, TotalCaloriesBurnedRecord |
| crossCountrySkiingSpeedHKQuantityTypeIdentifierCrossCountrySkiingSpeed | A quantity sample type that measures how fast you are traveling while cross country skiing. | .discreteAverage | distance per time | 18.0 | not verified |
| cyclingCadenceHKQuantityTypeIdentifierCyclingCadence | A quantity sample type that represents the rate at which the user is pedaling. | .discreteAverage | counts per minute | 17.0 | not verified |
| cyclingFunctionalThresholdPowerHKQuantityTypeIdentifierCyclingFunctionalThresholdPower | A quantity sample type that measures the estimated maximum average power sustained while riding a bike for 60 minutes. | .discreteAverage | power | 17.0 | not verified |
| cyclingPowerHKQuantityTypeIdentifierCyclingPower | A quantity sample type that measures the estimated power being used while riding a bike. | .discreteAverage | power | 17.0 | not verified |
| cyclingSpeedHKQuantityTypeIdentifierCyclingSpeed | A quantity sample type that measures how fast you are traveling while riding a bike. | .discreteAverage | distance per time | 17.0 | not verified |
| distanceCrossCountrySkiingHKQuantityTypeIdentifierDistanceCrossCountrySkiing | A quantity sample type that measures the distance the user has moved by cross country skiing. | .cumulativeSum | length | 18.0 | not verified |
| distanceCyclingHKQuantityTypeIdentifierDistanceCycling | A quantity sample type that measures the distance the user has moved by cycling. | .cumulativeSum | length | 8.0 | not verified |
| distanceDownhillSnowSportsHKQuantityTypeIdentifierDistanceDownhillSnowSports | A quantity sample type that measures the distance the user has traveled while skiing or snowboarding. | .cumulativeSum | length | 11.2 | not verified |
| distancePaddleSportsHKQuantityTypeIdentifierDistancePaddleSports | A quantity sample type that measures the distance the user has moved by paddling sports. | .cumulativeSum | length | 18.0 | not verified |
| distanceRowingHKQuantityTypeIdentifierDistanceRowing | A quantity sample type that measures the distance the user has moved by rowing. | .cumulativeSum | length | 18.0 | not verified |
| distanceSkatingSportsHKQuantityTypeIdentifierDistanceSkatingSports | A quantity sample type that measures the distance the user has moved by skating. | .cumulativeSum | length | 18.0 | not verified |
| distanceSwimmingHKQuantityTypeIdentifierDistanceSwimming | A quantity sample type that measures the distance the user has moved while swimming. | .cumulativeSum | length | 10.0 | not verified |
| distanceWalkingRunningHKQuantityTypeIdentifierDistanceWalkingRunning | A quantity sample type that measures the distance the user has moved by walking or running. | .cumulativeSum | length | 8.0 | not verified |
| distanceWheelchairHKQuantityTypeIdentifierDistanceWheelchair | A quantity sample type that measures the distance the user has moved using a wheelchair. | .cumulativeSum | length | 10.0 | not verified |
| estimatedWorkoutEffortScoreHKQuantityTypeIdentifierEstimatedWorkoutEffortScore | No abstract published. | not stated | — | 18.0 | not verified |
| flightsClimbedHKQuantityTypeIdentifierFlightsClimbed | A quantity sample type that measures the number flights of stairs that the user has climbed. | .cumulativeSum | count | 8.0 | not verified |
| nikeFuelHKQuantityTypeIdentifierNikeFuel | A quantity sample type that measures the number of NikeFuel points the user has earned. | .cumulativeSum | count | 8.0 | not verified |
| paddleSportsSpeedHKQuantityTypeIdentifierPaddleSportsSpeed | A quantity sample type that measures the distance the user has moved by paddling sports. | .cumulativeSum | distance per time | 18.0 | not verified |
| physicalEffortHKQuantityTypeIdentifierPhysicalEffort | 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. | .discreteAverage | — | 17.0 | not verified |
| pushCountHKQuantityTypeIdentifierPushCount | A quantity sample type that measures the number of pushes that the user has performed while using a wheelchair. | .cumulativeSum | count | 10.0 | not verified |
| rowingSpeedHKQuantityTypeIdentifierRowingSpeed | A quantity sample type that measures how fast the rower is moving. | .discreteAverage | distance per time | 18.0 | not verified |
| runningGroundContactTimeHKQuantityTypeIdentifierRunningGroundContactTime | A quantity sample type that measures the amount of time the runner’s foot is in contact with the ground while running. | .discreteAverage | time | 16.0 | not verified |
| runningPowerHKQuantityTypeIdentifierRunningPower | A quantity sample type that measures the rate of work required for the runner to maintain their speed. | .discreteAverage | power | 16.0 | not verified |
| runningSpeedHKQuantityTypeIdentifierRunningSpeed | A quantity sample type that measures the runner’s speed. | .discreteAverage | distance per time | 16.0 | not verified |
| runningStrideLengthHKQuantityTypeIdentifierRunningStrideLength | A quantity sample type that measures the distance covered by a single step while running. | .discreteAverage | length | 16.0 | not verified |
| runningVerticalOscillationHKQuantityTypeIdentifierRunningVerticalOscillation | A quantity sample type measuring pelvis vertical range of motion during a single running stride. | .discreteAverage | length | 16.0 | not verified |
| stepCountHKQuantityTypeIdentifierStepCount | A quantity sample type that measures the number of steps the user has taken. | .cumulativeSum | count | 8.0 | StepsRecord, StepsCadenceRecord |
| swimmingStrokeCountHKQuantityTypeIdentifierSwimmingStrokeCount | A quantity sample type that measures the number of strokes performed while swimming. | .cumulativeSum | count | 10.0 | not verified |
| vo2MaxHKQuantityTypeIdentifierVO2Max | A quantity sample that measures the maximal oxygen consumption during exercise. | .discreteAverage | volume/mass/time | 11.0 | Vo2MaxRecord |
| workoutEffortScoreHKQuantityTypeIdentifierWorkoutEffortScore | No abstract published. | not stated | — | 18.0 | not verified |
| appleStandHourHKCategoryTypeIdentifierAppleStandHour | A category sample type that counts the number of hours in the day during which the user has stood and moved for at least one minute per hour. | enum — HKCategoryValueAppleStandHour | — | 9.0 | not verified |
| lowCardioFitnessEventread-onlyHKCategoryTypeIdentifierLowCardioFitnessEvent | An event that indicates the user’s VO2 max values consistently fall below a particular aerobic fitness threshold. | enum — HKCategoryValueLowCardioFitnessEvent | — | 14.3 | not verified |
What will bite you
Two identifiers here are documented in name only.
estimatedWorkoutEffortScore and workoutEffortScore both arrived in iOS
18.0 with no abstract, no aggregation style, no unit family and no discussion.
You cannot tell from Apple's page whether they sum, average, or what scale
they use. Do not put either into a weekly rollup on the strength of a guess.
Show the raw samples, or probe the behaviour yourself and write down what you
found.
paddleSportsSpeed looks like a documentation bug. Its abstract is word for
word the abstract of distancePaddleSports, "measures the distance the user
has moved by paddling sports", and it is the only type in the group with a
distance-per-time unit family that states cumulative aggregation. Every other
speed here is discrete. Treat that stated aggregation as unverified and look
at real samples before you sum anything.
appleStandHour reads like a number and is not one. The abstract counts
hours, the family is category, and the value is
HKCategoryValueAppleStandHour. Code expecting a quantity gets nothing back.
lowCardioFitnessEvent has the same shape, carrying
HKCategoryValueLowCardioFitnessEvent, and its abstract describes an event
indicating that VO2 max values consistently fall below an aerobic fitness
threshold. It is a flag, not a series you can chart.
physicalEffort states discrete aggregation and no unit family. So you know
not to sum it, and you do not know what the number is in.
Questions
- How many activity types does HealthKit have?
- Apple's Activity group holds 37 type identifiers in the documentation this site parses. Thirty-five are quantity types carrying a number and a unit, and two are category types carrying an enum value. The group covers steps, distances, energy, the Activity ring timers, and the per-sport speed and power metrics Apple has added since iOS 16.0.
- Which HealthKit activity types should I sum?
- The 20 quantity types that state cumulative aggregation, which includes stepCount, distanceWalkingRunning, activeEnergyBurned, flightsClimbed and the sport distances. Thirteen state discrete instead, so speeds, powers, cadence and vo2Max want an average, a minimum, a maximum or the latest value. Two state nothing at all, so neither operation is safe on them.
- Do HealthKit activity types map to Android Health Connect?
- Four of them do in our verified matrix. activeEnergyBurned and basalEnergyBurned line up with ActiveCaloriesBurnedRecord and TotalCaloriesBurnedRecord, stepCount with StepsRecord and StepsCadenceRecord, and vo2Max with Vo2MaxRecord. The rest of the group has no counterpart we have confirmed, so settle the Android side of a cycling or running metric before you promise it.
All 37 identifiers above were read from Apple’s documentation on 2026-08-28. See the full 240-identifier table for every group at once, or the datasets for the same data as JSON and CSV. Apple’s abstracts are quoted for identification; the grouping, the aggregation split and the cross-platform mapping are AIFitnessAPI’s.