Skip to main content

Extract sleep and heart rate data from Whoop WebApp API (unofficial)

Project description

Whoop HeartRate and Sleep Python API

Updated July 2025 to use new login API endpoint

A simple Python library to access Whoop's internal web app API for extracting sleep and heart rate data.

Note: This is an unofficial library based on reverse-engineered API endpoints and is not affiliated with or endorsed by Whoop. The API endpoints may change without notice.

Features

  • Authenticate with Whoop using your account credentials
  • Extract data from app.whoop.com using internal API:
    • Sleep data including sleep stages, disturbances, and metrics
    • Heart rate data with customizable time intervals

Not yet implemented

  • Reading of all Activies
  • Whoop recommendations / VOWs

Installation

# From PyPI
pip install whoop-data

# From source
git clone https://github.com/jjur/whoop-sleep-HR-data-api.git
cd whoop-sleep-HR-data-api
pip install -e .

Quick Start

Retrieving data is as simple as:

from whoop_data import WhoopClient, get_heart_rate_data

# Create a client (credentials can also be set via environment variables)
client = WhoopClient(username="your_email@example.com", password="your_password")

# Get heart rate data (defaults to last 7 days if dates not specified)
hr_data = get_heart_rate_data(client=client)

You can also specify date ranges and customize the sampling interval:

# Get heart rate data for a specific date range with 5-minute intervals
hr_data = get_heart_rate_data(
    client=client,
    start_date="2023-01-01",
    end_date="2023-01-07",
    step=60  # 60 seconds / 1 minute
)

Sleep Data

Retrieving sleep data works in a similar way:

from whoop_data import WhoopClient, get_sleep_data

# Create a client
client = WhoopClient(username="your_email@example.com", password="your_password")

# Get sleep data for the last 7 days (default)
sleep_data = get_sleep_data(client=client)

# Or specify a date range
sleep_data = get_sleep_data(
    client=client,
    start_date="2023-01-01",
    end_date="2023-01-07"
)

Command Line Usage

# Extract heart rate data
python main.py --username your_email@example.com --password your_password --data-type heart_rate --from-date 2023-01-01 --to-date 2023-01-07

# Extract sleep data
python main.py --username your_email@example.com --password your_password --data-type sleep --from-date 2023-01-01 --to-date 2023-01-07

# Extract both sleep and heart rate data
python main.py --username your_email@example.com --password your_password --data-type all --from-date 2023-01-01 --to-date 2023-01-07

You can also store your credentials in a .env file:

WHOOP_USERNAME=your_email@example.com
WHOOP_PASSWORD=your_password

Examples

See the examples/ directory for more usage examples:

  • examples/simple_example.py: Minimal example showing basic usage
  • examples/process_data.py: Example of processing and visualizing HR data
  • examples/process_sleep.py: Example of Sleep data and visualizing hypnogram

Here are some example visualizations from Whoop data:

Heart Rate Plot Example heart rate visualization showing 30 hours of data while writing this repo :)

Sleep Hypnogram Sleep stages hypnogram generated from sleep data

Contributing

Contributions are welcome! Here are some ways you can contribute:

  • Report bugs or changes in API by raising an issue
  • Implement missing features like activities, recovery, VOWs

Disclaimer

This project is not affiliated with, endorsed by, or connected to Whoop in any way. It is an independent project that uses the Whoop web app's internal API for data extraction. The API endpoints may change without notice.

Acknowledgements

There are some github projects for reading the data, but they are a couple years old and the underlaying unofficial api structure changed over time. Then there is official dev api from Whoop, but they only provide aggregated information, which is not as cool as the raw hear rate in my opinion. Authentication logic and data relationships I got from rharber/whoop_scraper repo.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whoop_data-0.3.0.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

whoop_data-0.3.0-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file whoop_data-0.3.0.tar.gz.

File metadata

  • Download URL: whoop_data-0.3.0.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.2

File hashes

Hashes for whoop_data-0.3.0.tar.gz
Algorithm Hash digest
SHA256 74cd67c5da015136355f516faa7a1ccb6db99e02a361ba83474948cbcb2a349e
MD5 2411446a1b630810c7fdd28e89e92149
BLAKE2b-256 6f29d28685934fda29e4ad830654f76dd2c3d43cc030d4892ecb7883517f651d

See more details on using hashes here.

File details

Details for the file whoop_data-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: whoop_data-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 11.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.2

File hashes

Hashes for whoop_data-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d9e6ac1bcf18885aed0ddb8219bf101463cfa3ab666b6cb811ea0e266a7f43b5
MD5 605ddcd1e4be33018ef95944c7b1b436
BLAKE2b-256 0afff5542858239489ac588f840b674d08ab8c6d991e0d9051f729f00b488001

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page