Skip to content
WebViewGold Vibe Coding to App Store
English
Get WebViewGold

Google Play rejection

Health apps declaration and Health Connect permissions: how to get a health or fitness web app approved on Google Play

Every app on Google Play has to answer the health apps declaration, including apps without any health features. If your app reads or writes Health Connect data, Google also checks each requested data type against a visible feature and your privacy policy. Most rejections come from a declaration that does not match the bundle, or from requesting more data types than the app uses.

From $109 one-time per platform, or let our team do it all from $698.

  • Approval guarantee – or money back within 14 days
  • No coding needed
  • One-time payment, free updates
  • 24/7 human support
  • Made in Germany since 2014 · ISO 27001

Two requirements that are easy to mix up

The health apps declaration is a form on the App content page in Play Console. Every developer has to complete it for every app. Apps without health features simply state that they have none. Apps with health features select the categories they offer, such as activity and fitness, nutrition and weight management, sleep, stress, period tracking, disease management or medical categories. Google reviews the answers as part of app review.

Health Connect permissions apply when your app reads or writes data in Health Connect, Android's on-device store for health and fitness data. Google treats this data as personal and sensitive user data. In the same health apps form you declare each Health Connect data type you request and explain how it benefits the user. You may only request data types that a user-facing feature needs, and the privacy policy on your listing must be the same one users reach from Health Connect.

The wider Health Content and Services policy adds rules about claims. An app with health or medical functionality that is not a regulated medical device needs a clear disclaimer in its description that it is not a medical device and does not diagnose, treat, cure or prevent any condition, and it should tell users to consult a healthcare professional. Apps that are regulated as medical devices must declare it and be able to show their approval or clearance on request.

How the rejection typically reads

Notices in this area name either the Health Content and Services policy or the Health Connect requirements of the User Data policy. Typical reasons are: the declaration is missing, incomplete or does not match what the bundle requests; a requested data type is not justified by a visible feature; the privacy policy does not explain how health data is handled; or the description makes medical claims without the required disclaimer.

A frequent variant comes from the permissions side: the bundle contains Health Connect permissions, but the declaration says the app has no health features. That usually means permissions from a template or a copied project were never removed. The permissions guide shows how to find them in the merged manifest.

How WebViewGold talks to Health Connect

The WebViewGold Health Connect API lets your web app read and write records through URL schemes. readhealthkit://StepsRecord reads today's total for that record type and injects it as a JavaScript variable named after the record, for example "8421.0 steps". writehealthkit://StepsRecord//1000 writes a value and injects WRITE_SUCCESS or the error text. If Health Connect is not available, the variable contains "Health Connect not supported". Health Connect is preinstalled on Android 14 and later, and the API requires Android 8.0 or newer. The Android API mirrors the iOS HealthKit plugin, so one web app can work with health data on both platforms.

Two details matter for the declaration. First, reads return today's values at the moment your web app asks for them, so a WebViewGold integration has no use for the Health Connect permissions that read history older than 30 days or read data in the background. Second, the API only works for record types the app has requested permission for, which is exactly the list Google wants you to keep short.

I am very happy I bought this app! Extremely easy and great documentation. Was in contact with the customer service, they replied very quickly and very friendly. They solved my question within a day. 10/10 would recommend.

Nelis Geiger · CodeCanyon

Read today's steps from your web app

Based on the documented pattern: the link triggers the read, and the injected variable is available shortly afterwards. On the very first read, Android shows the Health Connect permission dialog, so let the user tap again after granting access.

html
<a href="readhealthkit://StepsRecord" onclick="setTimeout(showSteps, 300)">Sync today's steps</a>
<p>Steps today: <span id="steps">-</span></p>

<script>
  function showSteps() {
    // WebViewGold injects a variable named after the record type
    if (typeof StepsRecord !== "undefined") {
      document.getElementById("steps").textContent = StepsRecord; // e.g. "8421.0 steps"
    }
  }
</script>

Record types, permissions and justifications that pass

Permissions are shown without the android.permission.health. prefix. Keep only the rows your web app actually uses.

WebViewGold recordHealth Connect permissionJustification that names a feature
StepsRecordREAD_STEPS, WRITE_STEPS only if you log stepsShows today's step count on the Home dashboard and marks the daily goal as reached.
HeartRateRecordREAD_HEART_RATEDisplays today's heart rate value on the workout summary screen.
WeightRecordREAD_WEIGHT, WRITE_WEIGHTLets the user log today's weight in the progress tracker and see it in the chart.
SleepSessionRecordREAD_SLEEPShows the sleep recorded today next to the morning energy check-in.
HydrationRecordREAD_HYDRATION, WRITE_HYDRATIONAdds a glass of water from the hydration widget and shows today's total.

Fix it: make the declaration, the manifest and the policy agree

Work through these in order; each step feeds the next.

  1. Decide which record types you really use

    List every screen in your web app that calls readhealthkit:// or writehealthkit:// and the record type it uses. That list is your scope. A feature that is still on the roadmap is not a reason to request its data type today.

  2. Trim the Health Connect permissions in the manifest

    Keep one read or write permission per record type on your list and remove the rest from AndroidManifest.xml. Check the Merged Manifest tab in Android Studio and, after the upload, the permissions listed in the App bundle explorer. If the history or background read permissions show up, remove them.

  3. Complete the health apps declaration

    On the App content page, select the health features your app offers. For each Health Connect data type, describe the feature that uses it, the screen where the user sees it, and whether you read, write or both. "Today's steps on the Home dashboard" is a justification; "to improve the user experience" is not.

  4. Update the privacy policy

    Add a section on health data: which record types, read or write, for what purpose, whether you store copies on your server, and that the data is not sold or used for advertising. Use the same URL in Play Console, in the app and for the Health Connect link; the privacy policy link guide covers the URL rules.

  5. Fix the description

    Remove diagnosis or treatment claims you cannot back with a medical device clearance, and add the not-a-medical-device disclaimer if the app has health or medical functionality. The misleading claims guide has a rewrite prompt.

  6. Explain before you ask, then resubmit

    Show a short screen in your web app that explains what you will read and why before the first readhealthkit:// call, so the system dialog does not come out of nowhere. Add a demo account with sample data under App access, list health and fitness data in the Data safety form, and resubmit.

Reply template for a Health Connect rejection

Map every data type to a screen. Reviewers check the list against the bundle, so it must match the manifest exactly.

Paste into the reply or appeal form and adapt
Hello Google Play team,

Thank you for reviewing [app name] ([package name]). We have updated the health apps declaration and the app so that every Health Connect data type is tied to a visible feature:

- Steps (read): shown on the Home dashboard as today's step count and used for the daily goal badge.
- Weight (read and write): the user logs today's weight in Progress > Log weight and sees it in the chart.
[add one line per remaining data type]

We removed the following permissions that the app did not need: [list].
Before the Health Connect permission dialog appears, the app explains what is read and why ([screen name]).
Our privacy policy ([URL]) contains a section on health data and is the same link shown in Health Connect.
The app is not a medical device; the description now contains the corresponding disclaimer.

Demo account with sample data: [username] / [password].

Kind regards,
[name]

Health app checklist

  • Health apps declaration completed, also if the app has no health features.
  • Every Health Connect data type in the manifest appears in the declaration with a feature-specific justification, and the other way round.
  • No history or background read permissions unless a feature really needs them.
  • Privacy policy covers health data and uses the same URL in Play Console, the app and Health Connect.
  • Description contains no unsupported medical claims; the disclaimer is present where required.
  • Data safety form lists the health and fitness data the app handles.
  • App access contains a demo account with data, so the reviewer can see each health feature.

Frequently asked questions

My app has nothing to do with health. Do I still need the health apps declaration?

Yes. All developers complete the form for their apps. If your app has no health features, choose the option that says so and submit it; it takes a minute.

Do I need a separate approval to use Health Connect?

Access is reviewed through the health apps declaration as part of normal app review. Google used to have a separate request form; data types declared there had to be moved into the Play Console declaration in early 2025.

Can WebViewGold read Health Connect history, for example the last 90 days?

The documented API returns today's totals for a record type. Longer history is not part of it, so do not request the history permission for a WebViewGold integration.

Does the same web app work with Apple Health on iOS?

WebViewGold for iOS has a HealthKit plugin that the Android Health Connect API mirrors. It is activated with a plugin token in Config.swift and the HealthKit capability, and the App Store applies its own health data rules.

Can I use Health Connect data for ads or analytics?

Do not. Health Connect data is personal and sensitive user data with additional restrictions, and selling it or using it for advertising is not a permitted use. Keep it for the user-facing features you declared.

Three ways to get your app into the stores

Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.

Do it yourself

$109 per platform, one-time

The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.

See plans on the main page

Cloud Builder

$349 per license, one-time add-on

No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.

How the Cloud Builder works Try the free demo

Full Service

$698 per platform $798

Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.

Full Service details Powered by WeSetupYourWebViewApp

Winter Sale prices valid until December 31, 2026.

Ready to ship your app?

App Store & Google Play approval guarantee – or your money back within 14 days

Rather hand it over? Full Service: we configure, build and deliver within 72 hours, from $698 per platform. Questions? Chat with us 24/7.

Refunds are granted under the conditions listed in our FAQ: a non-content rejection by Apple and/or Google, claimed within 14 days after purchase.