Skip to main content

samsung-health-sdk

PyPI version Python CI License: MIT

A Python SDK for parsing and analysing Samsung Health export data.

Load any health metric from a Samsung Health export directory as a pandas DataFrame with a single function call. Compare data across multiple people or time windows. Derive higher-level health features from the raw data.

Installation

pip install samsung-health-sdk

Quick Start

from samsung_health_sdk import SamsungHealthParser, SamsungHealthComparator

# Point at your Samsung Health export directory
p = SamsungHealthParser("path/to/samsunghealth_export_dir")

# See all available metrics
print(p.list_metrics())

# Load heart rate (hourly summaries or minute-level)
hr     = p.get_heart_rate("2024-10-01", "2024-10-31")
hr_min = p.get_heart_rate("2024-10-01", "2024-10-31", granularity="minute")

# All supported metrics
sleep  = p.get_sleep("2024-10-01", "2024-10-31")
skin   = p.get_skin_temperature("2024-10-01", "2024-10-31", granularity="minute")
stress = p.get_stress("2024-10-01", "2024-10-31")
spo2   = p.get_spo2("2024-10-01", "2024-10-31")
steps  = p.get_steps("2024-10-01", "2024-10-31")
hrv    = p.get_hrv("2024-10-01", "2024-10-31")
rr     = p.get_respiratory_rate("2024-10-01", "2024-10-31", granularity="minute")
ex     = p.get_exercise("2024-10-01", "2024-10-31")
mv     = p.get_movement("2024-10-01", "2024-10-31")  # per-minute activity_level

# Generic accessor for any metric by its full name
df = p.get_metric("com.samsung.shealth.vitality_score", start="2024-10-01")

Feature Engineering

HealthFeatureEngine derives meaningful higher-level features from the raw data:

from samsung_health_sdk.features import HealthFeatureEngine

eng = HealthFeatureEngine(p, tz_offset_hours=5.5)  # tz_offset_hours: your UTC offset

# Per-night sleep quality: efficiency, deep/REM %, fragmentation, composite score
sleep_stats = eng.sleep_sessions("2025-01-01", "2025-03-31")

# Per-night HRV + respiratory rate + movement restlessness during sleep
physio = eng.nightly_physiology("2025-01-01", "2025-03-31")
# Columns: rmssd_mean, rmssd_min, rmssd_std, rr_mean, rr_std,
#          restlessness_score, restless_min, hrv_suppression_flag

# HRV readiness: today vs your rolling N-day personal baseline
readiness = eng.hrv_readiness("2025-01-01", "2025-03-31", baseline_days=14)
# Columns: rmssd_mean, baseline_14d, deviation_pct, readiness_score, low_readiness_flag

# Previous-day stress deviation vs that night's sleep quality
impact = eng.stress_impact_on_sleep("2025-01-01", "2025-03-31")
# Uses stress deviation from rolling baseline, not absolute score

# Per-day activity breakdown + HR context + stress
profile = eng.daily_activity_profile("2025-01-01", "2025-03-31")
# Columns: sedentary_min, light_min, low_mod_min, moderate_min, vigorous_min,
#          active_min, mean_hr_active, median_hr_day, mean_stress, stress_deviation_pct

# Walking cardiac load trend (HR / speed — lower = more aerobically efficient)
cardiac = eng.walking_cardiac_load("2024-11-01", "2025-06-30", source="auto")
# source='auto': pedometer (most accurate) > movement (accelerometer-based,
#                extends to Nov 2024) > exercise summaries (Jun 2022+)
# Columns: date, duration_min, distance_m, speed_mps, mean_hr, cardiac_load,
#          source, rolling_4w_cardiac_load, cardiac_load_trend

Multi-Person Comparison

p1 = SamsungHealthParser("path/to/person1_export")
p2 = SamsungHealthParser("path/to/person2_export")

comp = SamsungHealthComparator({"Alice": p1, "Bob": p2})

# Compare heart rate — absolute calendar window
df = comp.compare_heart_rate("2024-10-01", "2024-10-31")

# Align to relative Day 0 per person (time_shift=True)
df = comp.compare_heart_rate("2024-10-01", "2024-10-31", time_shift=True)

Export Format

Samsung Health exports a directory containing:

  • CSV files per health metric (some with a metadata row, some without — auto-detected)
  • jsons/ subdirectory with per-minute binning JSON files
  • files/ subdirectory with binary attachments (ECG waveforms, photos)

The SDK handles BOM encoding, namespaced column headers, UTC offset timestamps, trailing commas, and lazy JSON loading automatically.

Sleep Stage Codes

Code Label
40001 Awake
40002 Light
40003 Deep
40004 REM

Movement Activity Levels

Per-minute accelerometer intensity from get_movement():

Range Intensity
0–5 Sedentary
5–20 Light
20–50 Low-moderate
50–100 Moderate
100+ Vigorous

Requirements

  • Python 3.9+
  • pandas >= 2.0
  • numpy >= 1.24

Contributing

git clone https://github.com/Devasy/samsung-health-sdk
cd samsung-health-sdk
pip install -e ".[dev]"
pre-commit install
pytest

Run linting/format hooks on demand:

pre-commit run --all-files

Release files for samsung-health-sdk 0.2.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for samsung-health-sdk 0.2.6
File Size Uploaded
samsung_health_sdk-0.2.6.tar.gz 88.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for samsung-health-sdk 0.2.6
File Interpreter ABI Platform
samsung_health_sdk-0.2.6-py3-none-any.whl Python 3 none any Details

Total release size: 189.4 kB

Release files / samsung_health_sdk-0.2.6.tar.gz

Download URL samsung_health_sdk-0.2.6.tar.gz
Size 88.4 kB
Tags Source
SHA-256 checksum
How to use checksums
44c84f83444e0058e33f9bc1a01e4da6e2375c5429eb3e1a874264c32447a696
BLAKE2b-256 checksum
How to use checksums
8ab898fff370220f510bb81d5724ccf78ac201182512c6e8119b22aa01b410be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 11, 2026.

Transparency log

Release files / samsung_health_sdk-0.2.6-py3-none-any.whl

Download URL samsung_health_sdk-0.2.6-py3-none-any.whl
Size 101.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
92dc7561b398d1c2cf9df645908a42e07701882334b991d9d472e681a624811f
BLAKE2b-256 checksum
How to use checksums
b27ab2c18c6025f99a80095c3d2be5ea14cebf8584a49795187a8a81a5a54e96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.6 This release

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page