What floors_climbed measures
floors_climbed is the number of flights of stairs, or equivalent elevation gained on foot, recorded in the local day. It is an integer. One floor is roughly 3 metres or 10 feet of ascent while walking.
| Field | floors_climbed |
|---|---|
| Unit | Count |
| Reported | Daily |
| Window | Midnight to midnight, profile local time |
| Wearable required | No on iOS. Barometer and a Health Connect writer on Android. |
| API | GET /api/v1/profile/biomarker/{externalId}?categories=activity&types=floors_climbed plus a date range |
| Webhook | BiomarkerCreatedIntegrationEvent. Entries update in place, upsert on id. |
Data sources
Floors are detected by combining a barometric pressure sensor with motion. Only devices that have the sensor can produce them.
| Platform | Record | Notes |
|---|---|---|
| iOS, HealthKit | flightsClimbed | Every iPhone since the iPhone 6 has a barometer, so a phone-only iOS user gets floors when the phone is carried. Apple Watch also records them. |
| Android, Health Connect | FloorsClimbedRecord | Needs a phone or watch with a barometer and an app such as Google Fit, Samsung Health, or a wearable’s companion app writing to Health Connect. |
| Android, device sensor | None | The phone step counter Sahha reads as a steps fallback does not produce floors. |
| Direct integrations | Provider-dependent | Only where the provider supplies floors. |
| Wearable required | No on iOS | Close to wearable-dependent on Android in practice. |
How Sahha calculates floors_climbed
- Sum every floors sample from a source whose end time falls inside the local day.
- Publish the total from the source that won best-source selection for activity. That selection is decided by steps, not by floors.
The second step has a consequence worth stating plainly: if the source with the most steps does not report floors, there is no floors biomarker that day, even if another connected source did report them. There is also no biomarker on days where the winning source reported zero floors samples. Absence means no data, not zero.
Interpreting the value
What counts as a lot. The Activity Score goal is 10 floors. A typical office worker who takes the stairs a few times reaches 5 to 15. Someone in a flat town with a lift reaches 0 to 2 most days, and that is not a health signal.
It is the least reliable activity biomarker. Detection depends on the barometer, on weather-driven pressure changes, and on whether the user is walking at the time. Treat single-day values as approximate and week-over-week totals as the useful unit.
Zero and missing look alike to users. A user with no barometer and a user who stayed on one floor both see nothing. Only the second one is a real zero, and Sahha cannot tell them apart.
Related scores and insights
Score factor. Floors climbed is a factor, under the name floors_climbed, in the Activity and Wellbeing scores, with unit floor and goal 10. Credit is linear with a floor of 0.2:
| Floors | Factor score |
|---|---|
| 0 | 0.20 |
| 2 | 0.36 |
| 5 | 0.60 |
| 8 | 0.84 |
| 10 and above | 1.00 |
Because a missing biomarker means the factor is absent rather than zero, a user whose device cannot count floors is not penalised. The score is computed from the factors that exist. For the current day the factor is projected forward like steps.
Trend. A floors_climbed trend is available on the factor score.
Comparison. None.
Use cases
A stair-climbing challenge, gated on capability. Before enrolling a user, check that they have at least one floors biomarker in the last 14 days. Users without one cannot take part and should not see the challenge.
GET /api/v1/profile/biomarker/{externalId}?categories=activity&types=floors_climbed&startDateTime=2026-08-18&endDateTime=2026-09-01An intensity hint next to steps. Same steps, more floors, harder day. Useful as one line in a daily summary, not as a feature on its own.
Limitations
- Not every device can count floors. No barometer, no floors. Check for the biomarker’s existence before building on it.
- Floors follow the steps winner. A watch that reports floors will lose them on a day the phone out-steps it. Watch
sourceon the steps biomarker if you need to explain a gap. - Absence is not zero. Render missing days as no data.
- Pressure weather affects counts. Storms and rapid pressure changes can add or remove a floor or two. Do not alert on small daily changes.
Related guides
- Steps for how the winning source is chosen
- Activity intensity for the MET-based view of effort that does not depend on a barometer
- Activity Score explained for how the six factors combine
- Data dictionary in the developer docs