PulseWatch

Privacy policy

Effective 27 September 2026 · Applies to the PulseWatch app and this website.

In short

1. Who operates PulseWatch

PulseWatch is a personal, non-commercial project built and operated by its developer (GitHub: @usmanmateen), referred to below as “the operator”. It is not offered as a public or commercial service; the operator is its only user. PulseWatch is not a medical device.

2. Information PulseWatch accesses

PulseWatch uses the Google Health API with the following read-only permissions, granted through Google's OAuth consent screen. It never writes, edits or deletes anything in Google Health.

Permission (scope) Information read
googlehealth.health_metrics_and_measurements.readonly The timestamp of the most recent heart-rate sample; for each 5-minute window of the last few hours, the average heart rate, used only to tell whether the tracker was being worn in that window and never stored; daily resting heart rate, heart-rate variability (RMSSD) and respiratory rate.
googlehealth.activity_and_fitness.readonly Step totals for each 5-minute window of the last few hours, and total steps per day.
googlehealth.sleep.readonly For each sleep session: start and end time, minutes asleep, time in bed, whether it is the main sleep or a nap, and whether Google has finished processing it.
googlehealth.settings.readonly For each paired device: device type, model name, last sync time, battery level and battery status.

Requests are limited to the fields above. PulseWatch does not request individual heart-rate readings, sleep stages, device hardware addresses, location, or any other data type.

3. How the information is used

Only to provide PulseWatch's features to the person who granted access:

All decisions are made by fixed, documented rules and simple statistics. PulseWatch does not use machine-learning models, profiling for any other purpose, or automated decisions with legal or similarly significant effects.

4. What is stored, where, and for how long

PulseWatch runs on Cloudflare Workers and stores data in a Cloudflare D1 database in the operator's Cloudflare account. Retention is enforced automatically.

Data Purpose Kept for
Daily summaries: one value per day for resting heart rate, heart-rate variability, respiratory rate, minutes asleep, bedtime, wake time and steps Personal baselines, trend notices, morning brief 120 days
Baseline statistics per metric (median, spread, number of days) Comparisons in the morning brief Replaced daily
Rule state, e.g. whether the tracker is currently considered off the wrist and when a reminder was last sent Avoiding duplicate or repeated reminders Current state only
Notification records: identifier, type, delivery status and timestamps. The message text is kept only until the notification is delivered, finally fails or expires Reliable, non-duplicated delivery 30 days
Operational status: times of the last check and last successful sync, counters and error codes, and the tracker's last sync time, battery status and model Monitoring whether PulseWatch itself is working Current values only (overwritten)
Records of each scheduled check: time, outcome, number of API calls and error codes (no health values) Reliability and troubleshooting 14 days
Service logs: event names, identifiers, states and error codes (no health values or credentials) Troubleshooting Up to 7 days (Cloudflare Workers Logs)

Not stored: minute-by-minute or raw readings, sleep stages, and Google passwords. OAuth credentials (the Google refresh token and client secret) are kept as encrypted Cloudflare Worker secrets, never in the database; short-lived access tokens exist only in memory while a check runs.

5. Sharing and disclosure

PulseWatch does not sell, rent or trade Google user data and does not use it for advertising. It is shared only with the service providers needed to run PulseWatch:

These providers may process data in countries other than the operator's. Information may also be disclosed if required by law. It is not shared with anyone else, and nobody other than the operator reads it.

6. Google API Services User Data Policy

PulseWatch's use and transfer to any other app of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements. In particular, information received from Google APIs:

7. Security

8. Your choices and controls

9. This website

These pages are static files hosted on GitHub Pages. They set no cookies, run no scripts, and load no analytics, fonts or other third-party resources. GitHub may process technical information such as IP addresses to serve the pages; see the GitHub Privacy Statement.

10. Children

PulseWatch is not directed at children and is not used to collect information from them.

11. Changes to this policy

Changes will be published on this page with a new effective date. Material changes to how Google user data is used will be made only with renewed consent where required.

12. Contact

Questions about this policy can be raised by opening an issue at github.com/usmanmateen/pulsewatch/issues (please do not include personal or health information), or by using the support email shown on PulseWatch's Google consent screen.