---
description: Google Fit APIs shut down at the end of 2026. This Google Fit to Health Connect migration guide covers Capacitor apps, with a data type mapping table.
title: Migrating from Google Fit to Health Connect in Capacitor - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/google-fit-to-health-connect-migration-in-capacitor.png
---

<!doctype html> 

[Skip to content ](#migrating-from-google-fit-to-health-connect-in-capacitor) 

[📲 Introducing **Build Sharing** — get your builds onto testers' devices with a link & QR code. No account required. ](/blog/share-mobile-app-builds-with-testers/) 

* [ SDKs ](/docs/sdks/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Geofences ](/docs/sdks/capacitor/geofences/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Health ](/docs/sdks/capacitor/health/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ LLM ](/docs/sdks/capacitor/llm/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ MapLibre ](/docs/sdks/capacitor/maplibre/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Watch ](/docs/sdks/capacitor/watch/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Set Up Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Notifications
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Network Restrictions ](/docs/cloud/organizations/network-restrictions/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ Why Health Connect Alone Doesn't Cover iOS ](#why-health-connect-alone-doesnt-cover-ios)
* [ How to Migrate Your Capacitor App ](#how-to-migrate-your-capacitor-app)
* [ What Changes After You Migrate? ](#what-changes-after-you-migrate)
* [ FAQ ](#faq)
* [ Try Capawesome ](#try-capawesome)
* [ Conclusion ](#conclusion)

* Related links

# Migrating from Google Fit to Health Connect in Capacitor[¶](#migrating-from-google-fit-to-health-connect-in-capacitor "Permanent link")

Google supports the Fit APIs only until the end of 2026, and new developer signups have been closed since May 1, 2024\. If your app still reads steps, workouts or heart rate through Fit, you are on a deadline. A Google Fit to Health Connect migration in a Capacitor app also involves more than swapping one Android SDK for another, because Health Connect exists on Android only and the iOS side of your app talks to Apple HealthKit.

This guide covers three things: what actually replaces each Fit API, a full Fit to Health Connect data type mapping table, and the steps to port a Capacitor codebase. The [Capacitor Health plugin](/docs/sdks/capacitor/health/) handles the last part with a single API for both platforms.

[ ![Build and deploy your Capacitor app with Capawesome Cloud](https://capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png?t=1) ](https://capawesome.io/) 

## Key Takeaways[¶](#key-takeaways "Permanent link")

* The [Google Fit APIs](https://developers.google.com/fit), including the REST API, are supported until the end of 2026\. Google has published no exact shutdown day, and new signups closed on May 1, 2024.
* Health Connect replaces the Fit APIs on Android phones. The REST API maps to the Google Health API, Wear OS moves to Health Services, the Goals API has no replacement, and the BLE API maps to the Android Bluetooth APIs.
* Health Connect is Android-only. On iOS, health data lives in Apple HealthKit, so a Capacitor app needs both integrations.
* Health Connect ships with the operating system on Android 14 and later. On Android 9 to 13 the user may have to install it first.
* The [Capacitor Health plugin](/docs/sdks/capacitor/health/) covers both stores through one typed API with around 20 data types, aggregation buckets and workout reads.
* Health Connect limits reads to the 30 days before the permission was first granted. HealthKit has no time limit.

## What Replaces the Google Fit API in a Capacitor App?[¶](#what-replaces-the-google-fit-api-in-a-capacitor-app "Permanent link")

Health Connect replaces the Google Fit APIs on Android, and Apple HealthKit is the equivalent on iOS. In a Capacitor app you integrate both, or use a plugin that wraps both. No single Google API spans the two platforms.

Google's [Fit migration guide](https://developer.android.com/health-and-fitness/health-connect/migration/fit) breaks the replacements down per API, and the destinations differ more than most teams expect:

| Google Fit API | Phone                                                                              | Wear OS                                                               |
| -------------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Recording API  | Health Connect                                                                     | Health Services (PassiveMonitoringClient, ExerciseClient)             |
| History API    | Google Health API                                                                  | Read from the phone app via Health Connect                            |
| Sensors API    | Android sensors, Fused Location Provider API                                       | Health Services (MeasureClient, PassiveMonitoringClient)              |
| Sessions API   | Google Health API for read and write; track running sessions in your own app state | Health Services for start and stop, Health Connect for read and write |
| Goals API      | No replacement                                                                     | No replacement                                                        |
| BLE API        | Android Bluetooth APIs                                                             | Android Bluetooth APIs                                                |

Two rows catch teams off guard. The Goals API has no successor at all, so goal tracking moves to your own backend or local storage. And the History API, which most server-backed apps reached through the REST endpoint, points at the Google Health API rather than Health Connect: a cloud API with its own onboarding, not an on-device store.

If your Fit usage was really sensor access in disguise, neither destination fits. Live step cadence belongs to the [Capacitor Pedometer plugin](/docs/sdks/capacitor/pedometer/), and heart rate straps or other BLE peripherals to the [Capacitor Bluetooth Low Energy plugin](/docs/sdks/capacitor/bluetooth-low-energy/).

## When Do the Google Fit APIs Stop Working?[¶](#when-do-the-google-fit-apis-stop-working "Permanent link")

At the end of 2026\. Google's wording is that the Fit APIs "will only be supported until the end of 2026", with no exact shutdown date announced, so treat any specific day you read elsewhere as a guess. The signup freeze is already in effect: since May 1, 2024, developers cannot sign up to use the Fit APIs at all, so a Capacitor app that has not onboarded yet has no path to Fit today. Existing integrations keep working until the cutoff, and Google's advice is to migrate now for uninterrupted service.

## Google Fit to Health Connect Data Type Mapping[¶](#google-fit-to-health-connect-data-type-mapping "Permanent link")

Most Google Fit data types have a one-to-one counterpart in Health Connect, a handful have none, and every record name changes. This table maps each Fit type to its [Health Connect record](https://developer.android.com/health-and-fitness/guides/health-connect/plan/data-types) and to the plugin's `DataType` value:

| Google Fit data type                      | Health Connect record                       | Capacitor Health DataType |
| ----------------------------------------- | ------------------------------------------- | ------------------------- |
| com.google.step\_count.delta              | StepsRecord                                 | Steps                     |
| com.google.distance.delta                 | DistanceRecord                              | Distance                  |
| com.google.calories.expended              | TotalCaloriesBurnedRecord                   | TotalCalories             |
| com.google.calories.bmr                   | BasalMetabolicRateRecord                    | —                         |
| com.google.heart\_rate.bpm                | HeartRateRecord                             | HeartRate                 |
| com.google.weight                         | WeightRecord                                | Weight                    |
| com.google.height                         | HeightRecord                                | Height                    |
| com.google.body.fat.percentage            | BodyFatRecord                               | BodyFat                   |
| com.google.hydration                      | HydrationRecord                             | Hydration                 |
| com.google.sleep.segment                  | SleepSessionRecord                          | Sleep                     |
| com.google.activity.segment               | ExerciseSessionRecord                       | Workout                   |
| com.google.blood\_pressure                | BloodPressureRecord                         | BloodPressure             |
| com.google.blood\_glucose                 | BloodGlucoseRecord                          | BloodGlucose              |
| com.google.oxygen\_saturation             | OxygenSaturationRecord                      | OxygenSaturation          |
| com.google.body.temperature               | BodyTemperatureRecord                       | BodyTemperature           |
| com.google.nutrition                      | NutritionRecord                             | —                         |
| com.google.speed                          | SpeedRecord                                 | —                         |
| com.google.power.sample                   | PowerRecord                                 | —                         |
| com.google.cycling.pedaling.cadence       | CyclingPedalingCadenceRecord                | —                         |
| com.google.location.sample                | Exercise route inside ExerciseSessionRecord | —                         |
| com.google.active\_minutes (Move Minutes) | —                                           | —                         |
| com.google.heart\_minutes (Heart Points)  | —                                           | —                         |

Basal metabolic rate is the row worth reading twice. Health Connect keeps it as its own record, but the plugin does not expose it separately, because on iOS `TotalCalories` is already computed as active plus basal energy burned. Android has a dedicated total calories record instead.

### Which Fit Data Types Have No Health Connect Equivalent?[¶](#which-fit-data-types-have-no-health-connect-equivalent "Permanent link")

Move Minutes and Heart Points have no equivalent. Both are Google Fit scoring concepts, calculated by Fit rather than stored as measurements, and Health Connect has nothing that corresponds to them. If your UI showed either metric, recompute something similar from exercise sessions and heart rate, or drop it and tell users why. No migration path preserves the historical values.

The remaining gaps are plugin-side. Nutrition, speed, power and cycling cadence exist as Health Connect records but are not in the plugin's data type set, so those still need a native bridge. The trade runs the other way too: Health Connect carries measurements Fit never exposed, surfaced as `RestingHeartRate`, `HeartRateVariability`, `RespiratoryRate`, `FloorsClimbed` and `Vo2Max`.

One change is easy to miss because it is not technical. Fit's [health data types](https://developers.google.com/fit/datatypes/health) for blood pressure, blood glucose, oxygen saturation and body temperature required approval for restricted OAuth scopes. Health Connect has no OAuth scopes. Every health permission goes through a Google Play health apps declaration instead, a review with a different shape and a different failure mode.

## Why Health Connect Alone Doesn't Cover iOS[¶](#why-health-connect-alone-doesnt-cover-ios "Permanent link")

Health Connect is an Android platform component with no iOS build, so porting a Fit integration to Health Connect fixes exactly half of a Capacitor app. On iOS, health data lives in HealthKit: a separate framework with its own record types, its own permission model, and an entitlement you add in Xcode.

The two platforms then disagree in ways that reach into your JavaScript. HealthKit hides read permission status by design, so on iOS a read permission is never `granted`, only `prompt` before the first request and `unknown` after it. Health Connect never reports one as `denied`. Android caps historical reads at 30 days before the first grant, iOS has no limit. Heart rate variability is RMSSD on Android and SDNN on iOS, and the values are not comparable. `sourceName` is always `null` on Android, because Health Connect provides only a package name.

Writing all of that twice is the real cost of going cross-platform. The [Capacitor Health plugin](/docs/sdks/capacitor/health/) puts both stores behind one API and documents each divergence instead of papering over it. It ships through the Capawesome [Insiders](/docs/insiders/) subscription, so it is a paid dependency, and it requires Capacitor 8.

## How to Migrate Your Capacitor App[¶](#how-to-migrate-your-capacitor-app "Permanent link")

### 1\. Audit your Fit calls[¶](#1-audit-your-fit-calls "Permanent link")

Sort every Fit call in your codebase into four buckets: history reads, aggregated reads, session reads and writes, and inserts. That grouping is the migration plan, because each bucket maps onto exactly one plugin method.

### 2\. Install and configure the plugin[¶](#2-install-and-configure-the-plugin "Permanent link")

Follow the [Installation](/docs/sdks/capacitor/health/#installation) section in the plugin documentation for the setup steps. Budget time for the configuration Fit never needed: `minSdkVersion 26` in `variables.gradle`, an `android.permission.health.*` entry in `AndroidManifest.xml` for every data type you use, a `PRIVACY_POLICY_URL` meta-data element, a ProGuard keep rule, plus the HealthKit capability and the `NSHealthShareUsageDescription` and `NSHealthUpdateUsageDescription` keys on iOS.

### 3\. Gate on availability[¶](#3-gate-on-availability "Permanent link")

Fit rode on Google Play services and was effectively always there. Health Connect is not, so check availability first and offer the install prompt when the device is supported but the app is missing:

`[](#%5F%5Fcodelineno-0-1)import { DataType, Health, WorkoutType } from '@capawesome-team/capacitor-health';
[](#%5F%5Fcodelineno-0-2)
[](#%5F%5Fcodelineno-0-3)const { available, reason } = await Health.isAvailable();
[](#%5F%5Fcodelineno-0-4)if (!available && reason === 'health-connect-not-installed') {
[](#%5F%5Fcodelineno-0-5)  await Health.installHealthConnect();
[](#%5F%5Fcodelineno-0-6)}
`

Both [isAvailable()](/docs/sdks/capacitor/health/#isavailable) and [installHealthConnect()](/docs/sdks/capacitor/health/#installhealthconnect) have no Fit analogue: new code, not a replacement.

### 4\. Replace the OAuth flow with permissions[¶](#4-replace-the-oauth-flow-with-permissions "Permanent link")

A Health Connect integration has no Google API Console project, no client ID and no consent screen. Permissions are declared in the manifest and granted by the user inside Health Connect, which reduces your sign-in code to a single call:

`[](#%5F%5Fcodelineno-1-1)await Health.requestPermissions({
[](#%5F%5Fcodelineno-1-2)  read: [DataType.Steps, DataType.Distance, DataType.HeartRate, DataType.Workout],
[](#%5F%5Fcodelineno-1-3)  write: [DataType.Weight],
[](#%5F%5Fcodelineno-1-4)});
`

Use [checkPermissions(...)](/docs/sdks/capacitor/health/#checkpermissions) to inspect the current state and [openSettings()](/docs/sdks/capacitor/health/#opensettings) to reach the health settings, the only recovery path once Health Connect stops showing the dialog.

### 5\. Replace History API reads[¶](#5-replace-history-api-reads "Permanent link")

Individual record reads move to [readRecords(...)](/docs/sdks/capacitor/health/#readrecords). Fit's per-data-source reads translate to the `dataOrigins` filter, which takes package names on Android and bundle identifiers on iOS:

`[](#%5F%5Fcodelineno-2-1)const { records } = await Health.readRecords({
[](#%5F%5Fcodelineno-2-2)  dataType: DataType.Steps,
[](#%5F%5Fcodelineno-2-3)  startDate: '2026-08-01T00:00:00.000Z',
[](#%5F%5Fcodelineno-2-4)  endDate: '2026-08-08T00:00:00.000Z',
[](#%5F%5Fcodelineno-2-5)  limit: 100,
[](#%5F%5Fcodelineno-2-6)  ascending: true,
[](#%5F%5Fcodelineno-2-7)  dataOrigins: ['com.google.android.apps.fitness'],
[](#%5F%5Fcodelineno-2-8)});
`

### 6\. Replace bucketed reads[¶](#6-replace-bucketed-reads "Permanent link")

Anything that used Fit's `bucketByTime` with an aggregate data type becomes [aggregate(...)](/docs/sdks/capacitor/health/#aggregate). The platform runs the aggregation and deduplicates overlapping records from a phone and a watch, which you should not reimplement in JavaScript:

`[](#%5F%5Fcodelineno-3-1)const { buckets } = await Health.aggregate({
[](#%5F%5Fcodelineno-3-2)  dataType: DataType.Steps,
[](#%5F%5Fcodelineno-3-3)  startDate: '2026-08-01T00:00:00.000Z',
[](#%5F%5Fcodelineno-3-4)  endDate: '2026-08-08T00:00:00.000Z',
[](#%5F%5Fcodelineno-3-5)  bucket: 'day',
[](#%5F%5Fcodelineno-3-6)  operations: ['sum'],
[](#%5F%5Fcodelineno-3-7)});
`

### 7\. Replace the Sessions API[¶](#7-replace-the-sessions-api "Permanent link")

Sessions become workouts, read through [readWorkouts(...)](/docs/sdks/capacitor/health/#readworkouts) with an optional type filter. Fit's activity types map onto the plugin's `WorkoutType` enum, which covers more than 50 values and falls back to `OTHER` with the raw platform value preserved:

`[](#%5F%5Fcodelineno-4-1)const { workouts } = await Health.readWorkouts({
[](#%5F%5Fcodelineno-4-2)  startDate: '2026-07-01T00:00:00.000Z',
[](#%5F%5Fcodelineno-4-3)  endDate: '2026-08-01T00:00:00.000Z',
[](#%5F%5Fcodelineno-4-4)  workoutType: WorkoutType.Running,
[](#%5F%5Fcodelineno-4-5)  limit: 50,
[](#%5F%5Fcodelineno-4-6)});
`

### 8\. Replace inserts[¶](#8-replace-inserts "Permanent link")

Writes go through [writeRecord(...)](/docs/sdks/capacitor/health/#writerecord), and the writable set is narrower than Fit's: blood glucose, blood pressure, height, hydration, steps, weight and workouts. Blood pressure is the shape change to watch, since it uses `systolic` and `diastolic` instead of a single `value`:

`[](#%5F%5Fcodelineno-5-1)await Health.writeRecord({
[](#%5F%5Fcodelineno-5-2)  dataType: DataType.BloodPressure,
[](#%5F%5Fcodelineno-5-3)  startDate: new Date().toISOString(),
[](#%5F%5Fcodelineno-5-4)  systolic: 118,
[](#%5F%5Fcodelineno-5-5)  diastolic: 76,
[](#%5F%5Fcodelineno-5-6)});
`

### 9\. Re-submit for review[¶](#9-re-submit-for-review "Permanent link")

Every app that integrates with Health Connect has to complete the [Health apps declaration](https://support.google.com/googleplay/android-developer/answer/14738291) in the Play Console and be approved for the permission types it requests, backed by a privacy policy that explains how the health data is used. Without approval, the release gets rejected. Plan for review time before you ship, not after.

## What Changes After You Migrate?[¶](#what-changes-after-you-migrate "Permanent link")

The API surface gets smaller, but three behaviors change in ways your users will notice.

The first is history. On Android, reads only reach 30 days back from the moment the permission was first granted, so a chart that used to render a year of Fit data looks almost empty right after install and fills in over the following weeks. Build an empty state for it.

The second is permission visibility. Fit's OAuth scopes told you exactly what you had; neither platform does that now. Design around the presence of data instead: request, query, and show a helpful message when nothing comes back.

The third is that health data no longer travels through a Google account. Health Connect and HealthKit are on-device stores, so nothing syncs across devices and nothing reaches your server unless you send it there yourself. That is a privacy improvement and a feature you may need to rebuild.

## FAQ[¶](#faq "Permanent link")

### Is Google Fit being shut down?[¶](#is-google-fit-being-shut-down "Permanent link")

The Google Fit APIs are. Google states that they are supported until the end of 2026 and has not published an exact shutdown date. New developer signups have been closed since May 1, 2024.

### What replaces the Google Fit REST API?[¶](#what-replaces-the-google-fit-rest-api "Permanent link")

The Google Health API, not Health Connect. Health Connect is an on-device store with an Android SDK and no cloud endpoint, so a server-side integration that used the Fit REST API needs a different destination than a mobile one.

### Does Health Connect work on iOS?[¶](#does-health-connect-work-on-ios "Permanent link")

No. Health Connect is an Android platform component with no iOS version. On iOS, health data is stored in Apple HealthKit, which a cross-platform Capacitor app has to integrate separately.

### Can I read Google Fit data through Health Connect?[¶](#can-i-read-google-fit-data-through-health-connect "Permanent link")

Only what the Google Fit app itself has written to Health Connect while the user had that connection enabled. Health Connect does not import your historical Fit data, and Android's 30-day cap applies to what you can read regardless.

### Do I still need a Google API Console project?[¶](#do-i-still-need-a-google-api-console-project "Permanent link")

Not for Health Connect. There are no OAuth scopes and no consent screen. Permissions are declared in your manifest and granted by the user in Health Connect, with a Play Console health apps declaration replacing Google's scope approval.

### Is the Capacitor Health plugin free?[¶](#is-the-capacitor-health-plugin-free "Permanent link")

No. It is part of the Capawesome [Insiders](/docs/insiders/) subscription, which is a paid plan that also includes priority support and access to the other Insiders plugins.

## Try Capawesome[¶](#try-capawesome "Permanent link")

Migrations like this one land better when you hear about the deadline months early rather than weeks. Subscribe below and new Capacitor guides land in your inbox as they are published.

[Subscribe to the Capawesome Newsletter](https://capawesome.io/newsletter/)

## Conclusion[¶](#conclusion "Permanent link")

The API calls are the easy part. The expensive part is the data model: Move Minutes and Heart Points have no successor and no historical import, the 30-day read window makes your app look brand new to returning users, and roughly half the work has nothing to do with Health Connect at all, because Android's replacement stops at the platform boundary and iOS still needs HealthKit. Start with the audit, decide early which metrics you are willing to lose, and the code changes follow quickly.

If your Fit usage was closer to raw sensors than to stored health records, [The Complete Guide to Capacitor Device Sensors](/blog/capacitor-device-sensors-guide/) covers that side of the platform. Questions are welcome in the [Capawesome Discord server](https://discord.gg/VCXxSVjefW), and the [Capawesome newsletter](https://capawesome.io/newsletter/) is where new plugins and guides get announced first.

August 16, 2026 

Back to top

```json
{
      "@context": "https://schema.org",
      "@type": "BlogPosting",
      "headline": "Migrating from Google Fit to Health Connect in Capacitor",
      "description": "Google Fit APIs shut down at the end of 2026. This Google Fit to Health Connect migration guide covers Capacitor apps, with a data type mapping table.",
      "image": "https://capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png",
      "datePublished": "2026-08-17T00:00:00+00:00",
      "dateModified": "2026-08-17T00:00:00+00:00",
      "author": [
        {
          "@type": "Person",
          "name": "Robin Genz",
          "url": "https://github.com/robingenz"
        }
      ],
      "publisher": {
        "@type": "Organization",
        "name": "Capawesome",
        "url": "https://capawesome.io",
        "logo": {
          "@type": "ImageObject",
          "url": "https://capawesome.io/assets/images/logo.svg"
        }
      },
      "articleSection": "Capacitor",
      "keywords": ["Capacitor", "Guides", "SDKs"],
      "isPartOf": {
        "@type": "Blog",
        "@id": "https://capawesome.io/blog/#blog"
      },
      "mainEntityOfPage": "https://capawesome.io/blog/google-fit-to-health-connect-migration-in-capacitor/",
      "url": "https://capawesome.io/blog/google-fit-to-health-connect-migration-in-capacitor/"
    }
{
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://capawesome.io/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Blog",
          "item": "https://capawesome.io/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Migrating from Google Fit to Health Connect in Capacitor",
          "item": "https://capawesome.io/blog/google-fit-to-health-connect-migration-in-capacitor/"
        }
      ]
    }
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "What Replaces the Google Fit API in a Capacitor App?", "acceptedAnswer": {"@type": "Answer", "text": "Health Connect replaces the Google Fit APIs on Android, and Apple HealthKit is the equivalent on iOS. In a Capacitor app you integrate both, or use a plugin that wraps both. No single Google API spans the two platforms. Google's Fit migration guide breaks the replacements down per API, and the destinations differ more than most teams expect: Google Fit API Phone Wear OS Recording API Health Connect Health Services ( PassiveMonitoringClient, ExerciseClient) History API Google Health API Read from the phone app via Health Connect Sensors API Android sensors, Fused Location Provider API Health Services ( MeasureClient, PassiveMonitoringClient) Sessions API Google Health API for read and write; track running sessions in your own app state Health Services for start and stop, Health Connect for read and write Goals API No replacement No replacement BLE API Android Bluetooth APIs Android Bluetooth APIs Two rows catch teams off guard. The Goals API has no successor at all, so goal tracking moves to your own backend or local storage. And the History API, which most server-backed apps reached through the REST endpoint, points at the Google Health API rather than Health Connect: a cloud API with its own onboarding, not an on-device store. If your Fit usage was really sensor access in disguise, neither destination fits. Live step cadence belongs to the Capacitor Pedometer plugin, and heart rate straps or other BLE peripherals to the Capacitor Bluetooth Low Energy plugin."}}, {"@type": "Question", "name": "When Do the Google Fit APIs Stop Working?", "acceptedAnswer": {"@type": "Answer", "text": "At the end of 2026. Google's wording is that the Fit APIs \"will only be supported until the end of 2026\", with no exact shutdown date announced, so treat any specific day you read elsewhere as a guess. The signup freeze is already in effect: since May 1, 2024, developers cannot sign up to use the Fit APIs at all, so a Capacitor app that has not onboarded yet has no path to Fit today. Existing integrations keep working until the cutoff, and Google's advice is to migrate now for uninterrupted service."}}, {"@type": "Question", "name": "Which Fit Data Types Have No Health Connect Equivalent?", "acceptedAnswer": {"@type": "Answer", "text": "Move Minutes and Heart Points have no equivalent. Both are Google Fit scoring concepts, calculated by Fit rather than stored as measurements, and Health Connect has nothing that corresponds to them. If your UI showed either metric, recompute something similar from exercise sessions and heart rate, or drop it and tell users why. No migration path preserves the historical values. The remaining gaps are plugin-side. Nutrition, speed, power and cycling cadence exist as Health Connect records but are not in the plugin's data type set, so those still need a native bridge. The trade runs the other way too: Health Connect carries measurements Fit never exposed, surfaced as RestingHeartRate, HeartRateVariability, RespiratoryRate, FloorsClimbed and Vo2Max. One change is easy to miss because it is not technical. Fit's health data types for blood pressure, blood glucose, oxygen saturation and body temperature required approval for restricted OAuth scopes. Health Connect has no OAuth scopes. Every health permission goes through a Google Play health apps declaration instead, a review with a different shape and a different failure mode."}}, {"@type": "Question", "name": "What Changes After You Migrate?", "acceptedAnswer": {"@type": "Answer", "text": "The API surface gets smaller, but three behaviors change in ways your users will notice. The first is history. On Android, reads only reach 30 days back from the moment the permission was first granted, so a chart that used to render a year of Fit data looks almost empty right after install and fills in over the following weeks. Build an empty state for it. The second is permission visibility. Fit's OAuth scopes told you exactly what you had; neither platform does that now. Design around the presence of data instead: request, query, and show a helpful message when nothing comes back. The third is that health data no longer travels through a Google account. Health Connect and HealthKit are on-device stores, so nothing syncs across devices and nothing reaches your server unless you send it there yourself. That is a privacy improvement and a feature you may need to rebuild."}}, {"@type": "Question", "name": "Is Google Fit being shut down?", "acceptedAnswer": {"@type": "Answer", "text": "The Google Fit APIs are. Google states that they are supported until the end of 2026 and has not published an exact shutdown date. New developer signups have been closed since May 1, 2024."}}, {"@type": "Question", "name": "What replaces the Google Fit REST API?", "acceptedAnswer": {"@type": "Answer", "text": "The Google Health API, not Health Connect. Health Connect is an on-device store with an Android SDK and no cloud endpoint, so a server-side integration that used the Fit REST API needs a different destination than a mobile one."}}, {"@type": "Question", "name": "Does Health Connect work on iOS?", "acceptedAnswer": {"@type": "Answer", "text": "No. Health Connect is an Android platform component with no iOS version. On iOS, health data is stored in Apple HealthKit, which a cross-platform Capacitor app has to integrate separately."}}, {"@type": "Question", "name": "Can I read Google Fit data through Health Connect?", "acceptedAnswer": {"@type": "Answer", "text": "Only what the Google Fit app itself has written to Health Connect while the user had that connection enabled. Health Connect does not import your historical Fit data, and Android's 30-day cap applies to what you can read regardless."}}, {"@type": "Question", "name": "Do I still need a Google API Console project?", "acceptedAnswer": {"@type": "Answer", "text": "Not for Health Connect. There are no OAuth scopes and no consent screen. Permissions are declared in your manifest and granted by the user in Health Connect, with a Play Console health apps declaration replacing Google's scope approval."}}, {"@type": "Question", "name": "Is the Capacitor Health plugin free?", "acceptedAnswer": {"@type": "Answer", "text": "No. It is part of the Capawesome Insiders subscription, which is a paid plan that also includes priority support and access to the other Insiders plugins."}}], "url": "https://capawesome.io/blog/google-fit-to-health-connect-migration-in-capacitor/"}
```
