Health Connect Records We Verified
10 metrics verified on both platforms · 10 carry a cross-platform caveat · HealthKit side read 2026-08-28
10 metrics verified on both Health Connect and HealthKit, with record names and the structural mismatches. A verified subset, not Google's full catalog.
Start with what this page is not. It is not a catalogue of Health Connect. Google documents the full set of record types, and that set is larger than what appears here. This page lists the 10 metrics this site has verified on both platforms — checked against Apple's documentation and Google's, and listed only once both sides were read. Everything else is absent because it has not been checked yet, not because it does not exist.
With that said, the 10 are the ones a fitness app reaches for first, and the interesting part is not that both platforms have them. It is the shape of the mismatch when you try to write one schema over both.
Heart rate is HeartRateRecord and RestingHeartRateRecord against
Apple's heartRate and restingHeartRate. Both platforms give you samples
plus a separate resting value, which is a favour — do not derive resting
yourself.
HRV is the one that looks aligned and is not.
HeartRateVariabilityRmssdRecord against heartRateVariabilitySDNN. Apple
stores SDNN, Health Connect stores RMSSD, and they are different measures
that are not interconvertible. SDNN vs RMSSD is the
long version.
VO2 max is Vo2MaxRecord against vo2Max — an estimate on both
platforms rather than a lab measurement, with Health Connect additionally
tagging a measurement method.
Blood oxygen is OxygenSaturationRecord against oxygenSaturation. The
type existing does not mean data exists: SpO2 is device-gated, and Apple Watch
availability in the US has been subject to litigation, so verify current
status rather than assuming.
Sleep is the structural mismatch. Apple gives you
HKCategoryTypeIdentifier.sleepAnalysis, a category type whose values are
inBed, awake, asleepCore, asleepDeep, asleepREM and asleepUnspecified. Health
Connect gives you SleepSessionRecord, a session that carries stages. Stage
vocabularies differ between them and stages are estimated rather than
measured, so a shared "sleep quality" score computed across both platforms is
comparing two different estimators.
Steps is StepsRecord and StepsCadenceRecord against stepCount, with
CMPedometer for live counts on iOS. Both sides need de-duplication, since a
phone and a watch can write the same walk. On Android there is one extra rule:
from the June 2026 update on-device steps are attributed to a per-device
Synthetic Package Name, which you read via getCurrentDeviceDataSource() and
never hardcode.
Workouts is ExerciseSessionRecord and PlannedExerciseSessionRecord
against HKWorkout and HKWorkoutBuilder. The activity-type taxonomies
differ, so map them explicitly rather than by matching names.
GPS routes is ExerciseRoute with ExerciseRoute.Location against
HKWorkoutRoute and HKWorkoutRouteQuery. Health Connect gates routes behind
its own permission, READ_EXERCISE_ROUTES, and restricts background reads of
other apps' routes.
Calories is the asymmetry to watch: ActiveCaloriesBurnedRecord and
TotalCaloriesBurnedRecord against activeEnergyBurned and
basalEnergyBurned. Apple splits active and basal; Android offers active and
total. Both are modelled estimates.
Body composition is one Apple concept against a shelf of records:
WeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord,
BodyWaterMassRecord and BasalMetabolicRateRecord against bodyMass,
bodyFatPercentage, leanBodyMass and bodyMassIndex. The store holds it,
but something has to write it — usually a smart scale or a manual entry.
The full side-by-side with the watch-outs is the cross-platform matrix. For the platform-level comparison see HealthKit vs Health Connect, for setup integrate Health Connect, and for the Apple side the HealthKit identifier dataset.
HealthKit type → Health Connect record
10metrics, each confirmed against Apple’s and Google’s own documentation. A pairing here means the two platforms expose the same metric — not that the values are interchangeable, which is what the caveat column is for.
| Metric | Apple HealthKit | Android Health Connect | Watch out |
|---|---|---|---|
| Heart rate | HKQuantityTypeIdentifier.heartRate, .restingHeartRate | HeartRateRecord, RestingHeartRateRecord | Both expose samples plus a separate resting value — don't derive resting yourself. |
| HRV | HKQuantityTypeIdentifier.heartRateVariabilitySDNN | HeartRateVariabilityRmssdRecord | The big one: Apple stores SDNN, Health Connect stores RMSSD. They are different measures and are not interconvertible — do not normalize one into the other. |
| VO2 max | HKQuantityTypeIdentifier.vo2Max | Vo2MaxRecord | An estimate on both platforms, not a lab measurement. Health Connect tags a measurement method. |
| Blood oxygen | HKQuantityTypeIdentifier.oxygenSaturation | OxygenSaturationRecord | The type existing doesn't mean data exists — SpO2 is device-gated, and Apple Watch availability in the US has been subject to litigation. Verify current status. |
| Sleep | HKCategoryTypeIdentifier.sleepAnalysis (values: inBed, awake, asleepCore, asleepDeep, asleepREM, asleepUnspecified) | SleepSessionRecord (carries stages) | Stage vocabularies differ and stages are estimated, not measured. Apple's .asleep is deprecated in favour of the specific stages. |
| Steps | HKQuantityTypeIdentifier.stepCount (CMPedometer for live counts) | StepsRecord, StepsCadenceRecord | De-duplicate: phone and watch both write steps. On Android, from the June 2026 update on-device steps are attributed to a per-device Synthetic Package Name — read it via getCurrentDeviceDataSource(), never hardcode it. |
| Workouts | HKWorkout (HKWorkoutBuilder) | ExerciseSessionRecord, PlannedExerciseSessionRecord | Activity-type taxonomies differ between platforms — map them explicitly rather than by name. |
| GPS route | HKWorkoutRoute (array of CLLocation), HKWorkoutRouteQuery | ExerciseRoute with ExerciseRoute.Location | Health Connect gates routes behind their own permission (READ_EXERCISE_ROUTES) and restricts background reads of other apps' routes. |
| Calories | HKQuantityTypeIdentifier.activeEnergyBurned, .basalEnergyBurned | ActiveCaloriesBurnedRecord, TotalCaloriesBurnedRecord | Modelled estimates, not measurements. Note the asymmetry: Apple splits active/basal, Android offers active and total — don't add active to total. |
| Body composition | HKQuantityTypeIdentifier.bodyMass, .bodyFatPercentage, .leanBodyMass, .bodyMassIndex | WeightRecord, BodyFatRecord, LeanBodyMassRecord, BoneMassRecord, BodyWaterMassRecord, BasalMetabolicRateRecord | The store holds it, but something has to write it — usually a smart scale or manual entry. Body fat is a bioimpedance estimate. |
What will bite you
Do not read this list as coverage. These are the 10 metrics verified against both vendors' documentation, not the boundary of what Health Connect supports. If a record type you need is missing here, the answer is that we have not checked it, and Google's own documentation is where to look.
Do not normalize SDNN into RMSSD. Apple stores heart rate variability as SDNN and Health Connect stores it as RMSSD. They are different measures and are not interconvertible, so a single "HRV" column populated from both platforms holds two incompatible quantities that will trend against each other for reasons that have nothing to do with the user.
Do not add active calories to total calories. Apple splits active and basal; Health Connect offers active and total. Those are not the same split, and the rule for the Android pair is simply that you must not add active to total — the result is a plausible number that nothing will flag. Both figures are modelled estimates on both platforms, not measurements.
Do not hardcode the steps data source on Android. From the June 2026
update, on-device steps are attributed to a per-device Synthetic Package Name.
Read it with getCurrentDeviceDataSource(). A literal package name in your
de-duplication logic will work on the device you tested on and quietly stop
filtering on everyone else's — and de-duplication matters here, because a
phone and a watch both write steps for the same walk.
Questions
Does this page list every Health Connect record type?
No. It lists the 10 metrics this site has verified against both Apple's and Google's documentation. Google documents the full catalog, which is larger. A record type missing from this page means we have not checked it against both vendors yet, not that Health Connect lacks it.
Can I map Apple HRV onto Health Connect HRV?
Not by conversion. Apple's heartRateVariabilitySDNN stores SDNN and Health Connect's HeartRateVariabilityRmssdRecord stores RMSSD. These are different measures of the same underlying signal and are not interconvertible, so keep them in separate fields and label which one any chart is showing.
Which Health Connect records match Apple's calorie types?
ActiveCaloriesBurnedRecord and TotalCaloriesBurnedRecord sit opposite Apple's activeEnergyBurned and basalEnergyBurned. The split is not the same on both sides, so map them explicitly and never add the active figure to the total figure. Both platforms are giving you modelled estimates rather than measurements.
Compiled by AIFitnessAPI; the HealthKit side was read from Apple’s published documentation on 2026-08-28. Every HealthKit identifier with units, aggregation and value enums is at every HealthKit type identifier, and the machine-readable export is on datasets.