I wear a Google Fitbit Air on my wrist and carry an iPhone. Sounds like a normal combo. In practice it's two health worlds that barely understand each other: the band counts steps, heart rate, sleep and workouts, the Google Health app shows all of it, but Apple Health — where every other iPhone app gets its data — receives only part of it, and not always in the right shape.
I ran into this as a developer: one of my apps builds activity analytics on top of Apple Health, and with the band's data the analytics started to lie. Here's what's actually broken, why it's hard to fix, what the paid bridges on the App Store cost, and how I built my own.
Two "Health" apps that refuse to be friends
Apple and Google store health data in fundamentally different ways. Apple Health (HealthKit) lives only on the phone: an encrypted on-device database with no cloud API. Google Health is the opposite — a cloud service: the band sends data to the phone, the phone sends it to your Google account, and that's where it lives.
To move data from one world to the other you need a program that runs on the iPhone, downloads data from Google's cloud and writes it into Apple's local store. Nobody else can do it: Google's cloud can't reach the database on your iPhone, and Apple only lets apps on the device itself write to it.
For years Google simply didn't ship such a program. When HealthKit launched in 2014, Fitbit said outright it had no plans to support it, and Fitbit owners with iPhones lived on third-party utilities for a decade. Only in August 2026, in version 5.05, did the Google Health app learn to write to Apple Health itself. Problem solved? Not quite.
What gets lost on the way
The official sync works, but with losses. On my own data:
- Workouts go missing. Some workouts recorded by the band never show up in Apple Health, although they're in Google Health.
- Calories and heart rate don't match between the two apps for the same day.
- Duplicates. The same steps and calories land in Apple Health twice and inflate the daily total.
- Some metrics don't transfer at all, e.g. heart rate variability (HRV) — even the coverage of the update admits it.
If you only glance at steps, that's cosmetic. But fitness apps, food diaries and training plans read Apple Health and draw conclusions from an incomplete, partly doubled picture.
Why it's hard to do right
- Different data models. In HealthKit a workout is a single object with calories and distance inside. In Google's model it's a set of separate points: an exercise segment, per-minute calories, per-minute distance. Copy everything as-is and calories inside a workout are counted twice.
- The echo. Google Health also reads Apple Health (iPhone steps, Apple Watch workouts), uploads them to Google's cloud, and they come back as "Google data". A bridge that can't tell its own records from the echo grows duplicates on every sync.
- The locked phone. Apple Health's store is encrypted while the iPhone is locked, so nothing can be written. Background sync works in fits and starts, and long history imports die when the screen turns off.
- Old paths are closing. Many cheap bands have been writing to Google Fit for years. Since May 1, 2024 new developers can't sign up for its APIs, and they shut down at the end of 2026. The replacement is the Google Health API, which has its own strings attached (see below).
Paid bridges on the App Store and what they cost
All of them are free to download and charge via in-app purchases. US App Store prices as of September 28, 2026:
| App | Subscription | Lifetime | Rating |
|---|---|---|---|
| Fitbit Sync To Apple Health (Syncfit) | $4.99–9.99/mo, $19.99–39.99/yr | $59.99 | 4.6 (19,688) |
| Fitbit to Apple Health Sync (myFitnessSync) | $5.99–9.99/mo, $9.99/wk, $39.99/yr | $39.99–59.99 | 4.3 (29,189) |
| Power Sync for Fitbit | auto-sync $1.99/mo, $7.99/yr (daily totals only) | $14.99 | 4.2 (15,642) |
| Power Sync: Fitness to Health | $5.99/wk, $10.99/mo, $19.99–24.99/yr | — | 4.5 (12,888) |
| Fitbit to Health Sync Solver | $9.99/wk, $39.99/yr | $59.99 | 4.5 (3,250) |
| Fitbit Sync to Health App | $9.99/wk, $19.99/mo, $39.99/yr | $59.99 | 4.1 (1,628) |
| Fitbit to Apple Health Sync · (StepsApp) | Pro: $4.99 or $19.99 | — | 4.3 (374) |
The typical price is $39.99/year or $59.99 lifetime. The Fitbit Air costs about $100, so you're asked to pay almost half the band's price again just to get its data onto your iPhone properly. Weekly $9.99 plans add up to roughly $520 a year — five times the band.
One caveat matters more than price: nearly all of these are built around the Fitbit / Google Health account. If your band writes to the old Google Fit, a bridge may not see its data. Test on the free trial before paying for a year.
How I built my own bridge
I didn't want to pay for a bridge, but my app's analytics had to be fixed, so I wrote the sync myself: the app pulls data straight from the Google Health API and writes it into Apple Health. (Turn off Google's own sync in that case, so you don't have two sources of the same thing.) The core work took one day; the interesting part is the pitfalls.
-
API. Google Fit REST is closed to new developers, so it's the Google Health API v4 (
dataTypes/{type}/dataPoints). All its scopes are classified as Restricted — more on that below. -
Sign-in without a secret. Google officially expects a web-server client with a client secret, and you can't ship a secret inside an iOS app. An iOS client with PKCE via
ASWebAuthenticationSessionworked — no backend, no Google SDK. Tokens live in the Keychain. -
Dedup the Apple way. Every HealthKit sample gets
HKMetadataKeySyncIdentifierlikegh:<type>:<point id>plusHKMetadataKeySyncVersion. A repeated sync replaces the record instead of adding a new one. -
Echo filtering. Points that came into Google from Apple Health (platform
HEALTH_KIT) are skipped, otherwise you get a loop. -
Whole workouts. Workouts are built with
HKWorkoutBuilderwith calories and distance inside, and per-minute calories/distance that fall into the workout window are dropped so the day doesn't count them twice. - History in chunks. Fresh days first, then history from newest to oldest: workouts and sleep up to a year, steps and calories 90 days, heart rate 30. Progress is stored per metric, so an interrupted sync resumes where it stopped.
- Keep the screen on. During a manual sync the idle timer is disabled, and if the phone gets locked anyway the user sees a clear hint instead of a database error.
- Format surprises. 64-bit numbers arrive as strings, distance comes in millimeters and sits somewhere other than the docs suggested — the first parser version crashed on a real response. The mapper is covered by tests on trimmed real data.
The main limitation isn't technical. Until the app passes Google's OAuth verification and a third-party security audit, the feature runs in testing mode: at most 100 users, and the Google sign-in expires every 7 days. Fine for personal use, not for everyone. The paid bridges above prove the path is passable — it just takes weeks and money.
What to do right now if you own a Google band
- Turn on the official sync in Google Health: add Apple Health in the connections settings. It's free, and for steps and sleep it's often enough.
- Set source priority in Apple Health: open a metric → Data Sources & Access → Edit, and put the band above the iPhone so phone and wrist steps don't add up.
- Compare a week of workouts in Google Health and Apple Health. No differences — you need nothing else.
- If workouts go missing and they matter, pick a bridge from the table — but start with the trial and check your data.
- Keep one bridge. Official sync plus a paid app at the same time is the shortest path to duplicates.
What's next
The sync already works in my test build, and I'm going to ship it as a separate app — just the Google Health → Apple Health bridge, nothing else. No name yet: Google verification comes first. I'll write about it when it's out.
Originally published at klukyanov.ru.
Shorter weekly write-ups (in Russian) — on Telegram.
Top comments (0)