Steps & Daily Activity data from every wearable, in one schema
Step counts, distance, floors and active minutes — deduplicated across phone and watch.
6 / 8
Providers connectable today
8
Webhook events in this family
count for steps, metres for distance, seconds for time buckets
Canonical units
What steps & daily activity looks like through one API
Step count looks like the simplest metric in connected health and causes more double-counting bugs than any other. The problem is not measurement — it is that a single user commonly has two or three devices counting simultaneously, and the platforms handle that overlap differently.
A phone in a pocket and a watch on a wrist both count the same walk. Apple Health and Health Connect apply their own deduplication before handing data to an app, and their rules differ. Cloud providers know nothing about the phone at all. Summing sources naively inflates daily totals by anywhere from 20% to nearly double for active users.
WearLink records the originating device on every sample and exposes both the provider-deduplicated daily summary and the underlying series, so you can implement a source-priority policy — prefer the watch, fall back to the phone — rather than adding numbers that were never meant to be added.
Where providers disagree
The part that costs you weeks if you build this yourself. None of the following is a WearLink limitation — it is how the underlying providers actually behave.
Platform deduplication is not consistent
Apple Health and Health Connect both deduplicate overlapping step sources, but with different rules and different results. Neither exposes a stable explanation of what it dropped. If your product reconciles a total against what a user sees in their native health app, expect small unexplained gaps.
Day boundaries follow device timezone
A daily step total is bounded by local midnight on the device, which moves when a user travels. Aggregating in UTC on the server produces split or doubled days around travel. Store the local date the provider attributed, not a UTC-derived one.
Backfill rewrites days you already read
A watch that has not synced for three days uploads all three at once, and the provider restates those daily totals. Anything you computed from the earlier, incomplete values — streaks, goal completion, a leaderboard position — is now wrong and nothing tells you to recompute it. This is the single most common cause of step counts that disagree with the user's own app. WearLink re-emits the affected day on the webhook when a provider restates it, so the correction arrives as an event rather than being something you have to poll for and diff yourself.
"Active minutes" is proprietary everywhere
Every vendor computes active or exercise minutes with its own intensity thresholds. These are not comparable and should not be summed across providers. Use the raw series if you need a definition you control.
Providers that supply steps & daily activity
Status is read from the same provider table the rest of the site uses, so nothing here can claim a provider is connectable when it is not. Coverage also varies by hardware generation within a brand.
| Provider | Category | Status |
|---|---|---|
| Fitbit | Cloud OAuth | Live |
| Garmin | Cloud OAuth | Onboarding |
| Oura | Cloud OAuth | Live |
| Withings | Cloud OAuth | Live |
| Ultrahuman | Cloud OAuth | Onboarding |
| Apple Health | Mobile SDK | Mobile SDK |
| Google Health Connect | Mobile SDK | Mobile SDK |
| Samsung Health | Mobile SDK | Mobile SDK |
Webhook events for steps & daily activity
Subscribe to the summary event for settled records, and to the series streams when you need the underlying samples. Event names below are generated from the backend enum, so they cannot drift out of date relative to the API.
Summary object
steps.created
Series streams
series.steps.createdseries.flights_climbed.createdseries.stand_time.createdseries.exercise_time.createdseries.distance_walking_running.createdseries.walking_speed.createdseries.walking_steadiness.createdFrequently asked questions
- How do I stop double-counting steps between a phone and a watch?
- Use the device attribution on each sample and apply a source-priority rule rather than summing. WearLink preserves the originating device so the policy is yours to set.
- Can I get intraday step data rather than daily totals?
- Yes, via series.steps.created, where the provider grants intraday access. Fitbit in particular gates intraday data behind a separate application approval.
- Why does my total differ from the number in the user's health app?
- Almost always platform deduplication. Apple Health and Health Connect drop overlapping samples using rules they do not fully expose, so a server-side sum over raw sources will not match the native display exactly.
Related data types
15 normalised data families in total — see them all or browse integrations by provider.