Personal Health Collector

Privacy policy

This project is operated by Ou David for the owner's personal health archive.

Last updated: October 19, 2026

Data access and collection

After the owner grants Google OAuth consent, the collector reads available Google Health and Fitbit records in three categories: activity and fitness, sleep, and health metrics and measurements.

These can include steps, distance, exercise, energy use, sleep sessions and stages, heart rate and variability, oxygen, respiration, temperature, weight, body fat, height, and blood glucose. Available records depend on the account, device, and API permissions.

The collector stores original returned records with their dates, source information when available, and import coverage metadata. It also stores the Google Health account identifier to keep the archive tied to the authorized owner, and OAuth credentials needed for ongoing access.

All requested health permissions are read-only. GPS, nutrition, profile, ECG, and write permissions are not requested.

Purpose and Limited Use

Data is used to maintain the owner's personal archive and support analysis that the owner explicitly authorizes. It is not sold, used for advertising, or used to train general AI models.

Personal Health Collector follows the Limited Use requirements of the Google Health API Developer and User Data Policy. Use and sharing are limited to the disclosed archive and owner-authorized analysis features.

Storage and access

Records are stored in a private SQLite database on the owner's self-hosted server. OAuth credentials are stored separately in restricted files. The collector's database and credential files are not mounted into this website's server.

This public website serves information pages only. It has no health-data endpoint, account sign-in, or way for visitors to view the archive.

Sharing and authorized agents

Google provides the health data through its API. The collector retains that data on the owner's server.

A private agent query interface is planned separately from this website. When the owner explicitly directs a connected agent to query the archive, the agent and its service provider may receive the selected query results to perform that requested analysis. The owner chooses that agent or provider at the time of use; this website does not send health data to an agent.

Access by another person requires the owner's explicit authorization for the specific data, except where access is necessary for security or required by law. No health data is shared for advertising, sale, or general AI model training.

Retention, revocation, and deletion

Archived health data is kept indefinitely until the owner deletes it. There is no automatic retention deadline.

The owner can stop future access by removing the app's authorization in Google Account connections. Revocation does not delete records already archived on the owner's server.

To delete collected data, the owner must stop collection and remove the local archive and any retained backups. To remove connection credentials, the owner must also delete the collector's stored OAuth tokens. Deleting this local archive does not delete the original records held by Google or Fitbit.

For help with access or deletion, contact Ou David through the developer support email shown on the Google consent screen, or visit vvivid.dev.

Website requests

These pages do not set application cookies, use analytics, load third-party fonts or scripts, or collect information through forms.

Cloudflare and the hosting infrastructure process ordinary request metadata, such as an IP address, requested URL, browser information, and request time, to deliver and protect the website. That metadata may be recorded in service or access logs. Do not include health information or credentials in a website URL.

Changes and contact

This page will be updated when the project's data practices change. The date above identifies this version.

Operator: Ou David. Use the developer support email on the Google consent screen for privacy questions, or visit vvivid.dev.