# PulsHealth > Sync Apple Health from your iPhone to a database you control. PulsHealth includes the iOS app, a self-hosted Docker Compose stack, a read-only API and MCP server, and an open sync protocol. The backend is pre-release. Source: https://github.com/PulsHealth/pulshealth. Website: https://pulshealth.com. ## Product facts and choosing a workflow - [Features](https://pulshealth.com/features/): iPhone exploration, on-device CSV/JSON/JSONL export, custom summaries, and database sync. Local exports do not require a server or account. - [Free and Pro](https://pulshealth.com/pricing/): current app limits and prices. Free includes recent exports and five sync types; Pro expands history and sync types. Hosting is separate. Check this page instead of inferring that every feature is free from the download price. - [Export to a spreadsheet](https://pulshealth.com/blog/export-apple-health-to-csv-excel/): choose raw readings or daily aggregates, create a CSV and open it in Excel or Numbers. - [Use a Mac or PC](https://pulshealth.com/blog/view-apple-health-on-mac-pc/): a local export for occasional analysis, or a synced browser dashboard for repeated use. - [Privacy](https://pulshealth.com/privacy/): where data goes for each workflow. Access to health data depends on HealthKit permissions and available records; the app cannot recover data it cannot read. - [Download for iPhone and iPad](https://apps.apple.com/us/app/pulshealth/id6757657354). Source code uses Apache-2.0; the self-hosted backend is pre-release. ## Set up a server Start with the [server setup guide](https://pulshealth.com/docs/setup/). It is the step-by-step path for both people and coding assistants: prerequisites, a matching source/image version, phone connectivity, pairing, first-sync verification, and backups. Use the [server reference](https://pulshealth.com/docs/server/) only for configuration and operations details. Copyable request: > Help me set up PulsHealth using https://pulshealth.com/docs/setup/. First establish my server OS, Docker availability, time zone, and how my iPhone will reach it. Explain the plan, then work through setup and verify a first sync. Keep credentials out of chat. Ask before spending money, exposing a service publicly, or replacing existing data. For setup agents: - Inspect the existing installation before changing it. Preserve `server/.env`, volumes, and working services. Follow the guide's release/source-build choice; do not mix migrations from one revision with images from another. - Configure a reachable phone URL. `localhost` on an iPhone is the iPhone; `--url` records an address and does not create HTTPS or a proxy. Keep the database, API, MCP, viewer and Grafana private unless deliberately configured otherwise. - Bootstrap prints secrets and a pairing QR code. Keep its output local; do not copy tokens, `.env`, QR codes or health records into chat, logs or a public issue. - A healthy container is only the server check. Separately verify the phone connection, an acknowledged sync, and the expected data in the viewer. Report anything still unverified. ## Read the docs The site publishes plain Markdown at `https://pulshealth.com/docs/.md`, including [setup.md](https://pulshealth.com/docs/setup.md). [llms-full.txt](https://pulshealth.com/llms-full.txt) combines all published Markdown docs when a reader needs the complete reference. These are generated from the same repository sources as the human-readable pages. Read only the relevant guide first; deployed server behavior is described by the matching release's sources and its own `/openapi.json`. - [Set up your server](https://pulshealth.com/docs/setup/): the complete first-run workflow. - [Server configuration and operations](https://pulshealth.com/docs/server/): services, networking, secrets, migrations, backups and upgrades. - [Connect an AI assistant](https://pulshealth.com/docs/ai/): query already-synced data through MCP or the API. This is separate from using a coding assistant to install the server. - [Web viewer](https://pulshealth.com/docs/web-viewer/): dashboards, access and optional accounts. - [Export data](https://pulshealth.com/docs/export/): on-device files, server exports and the CLI. - [Product API guide](https://pulshealth.com/docs/api/): authentication, queries, pagination and errors. - [API reference](https://pulshealth.com/docs/api-reference/): machine-readable OpenAPI; also at https://pulshealth.com/openapi.json. - [MCP reference](https://pulshealth.com/docs/mcp/): transports, configuration and read-only tools. ## Interpret the data Read the [database guide](https://pulshealth.com/docs/database/) before writing SQL or drawing conclusions. Raw iPhone and Watch samples overlap; use `metric_daily` or the daily API for daily summaries. Wire timestamps are epoch milliseconds, quantity units are canonical, and missing data is not zero. MCP reads through the API, never directly from PostgreSQL. - [Database guide](https://pulshealth.com/docs/database/): tables, query examples, calendars and double-counting traps. - [Recording behavior](https://pulshealth.com/docs/recording-behavior/): cadence, coverage, sources and sample intervals. - [HealthKit knowledge base](https://github.com/PulsHealth/pulshealth/blob/main/knowledge-base/README.md): the source of https://pulshealth.com/knowledge-base/. ## Build an integration - [Puls Sync Protocol v1](https://pulshealth.com/docs/protocol/): implement a receiver; schemas, canonical units, idempotency and retries. - [Type catalog](https://github.com/PulsHealth/pulshealth/blob/main/docs/protocol/catalog.json): generated HealthKit identifiers, kinds, units and allowed aggregate functions. - [Catalog field guide](https://github.com/PulsHealth/pulshealth/blob/main/docs/protocol/catalog.md): meaning and generation of the vocabulary. - [Python/SQLite receiver](https://github.com/PulsHealth/pulshealth/blob/main/examples/receivers/python-sqlite/README.md): a minimal alternative backend. - [Swift package](https://pulshealth.com/docs/swift-package/): embed the sync engine in an iOS app. ## App and project The [App Store app](https://apps.apple.com/us/app/pulshealth/id6757657354) can explore and export without a server. Free sync covers five types and the latest 30 days; Pro expands type and history access, subject to HealthKit permission and availability. Hosting is separate: run your own server or use a [hosted PulsHealth account](https://app.pulshealth.com/signup). - [Project README](https://github.com/PulsHealth/pulshealth/blob/main/README.md): overview and component map. - [Security](https://pulshealth.com/docs/security/): trust boundaries and private vulnerability reporting. - [Changelog](https://pulshealth.com/docs/changelog/): backend release history. - [Roadmap](https://pulshealth.com/docs/roadmap/): planned work and current limitations. ## Contribute to the code These guides are for changing PulsHealth, not prerequisites for installing it: - [AGENTS.md](https://github.com/PulsHealth/pulshealth/blob/main/AGENTS.md): contributor orientation and authoritative sources. - [CLAUDE.md](https://github.com/PulsHealth/pulshealth/blob/main/CLAUDE.md): implementation invariants and gotchas. - [CONTRIBUTING.md](https://github.com/PulsHealth/pulshealth/blob/main/CONTRIBUTING.md): branches, tests, sign-off and pull requests. - [Site development](https://github.com/PulsHealth/pulshealth/blob/main/site/README.md): the public site, separate from the self-hosted viewer.