Lutea

For care that's lutea-ly made for women.

Upload the export from your Fitbit, Oura or Garmin. Lutea maps your menstrual cycle from the signals your device already records, then surfaces the hormonal patterns hiding in the noise.

Download a test file
On-device · private
↑
Drop your export here
or click to browse · CSV files · drop as many as you like
Fitbit · Takeout Oura · trends export Garmin · Connect export
How far to trust this
Upload your data to see how far the read-out can be trusted.
Every signal we read
Your hormonal read-out
Your read-out appears once we have a cycle to work with.
What to check next
Nothing to flag yet.

Not medical advice. Lutea reads consumer wearable data and cannot diagnose any condition. Percentages reflect how strongly your signals match a known pattern, not your odds of having the condition. Always confirm with a licensed clinician.

Your cycle
No period log or temperature pattern found yet.
API

No key, no account needed. Your own read-out always happens on your device — this API exists only to grow and share the open reference data everyone gets compared against. Two endpoints, that's the whole surface.

GET/api/cohort
Pull the live, de-identified reference distribution the app compares users against. No auth. Free to reuse.
Response · 200 OK
{
  "updated": "2026-07-19T01:12:53Z",
  "donations": 214,
  "days": 6120,
  "signals": {
    "rhr":  { "n": 6120, "mean": 61.4, "sd": 6.2 },
    "hrv":  { "n": 5980, "mean": 48.1, "sd": 14.7 },
    "temp": { "n": 4102, "mean": 36.3, "sd": 0.24 }
  },
  "rhr_by_age": {
    "30": { "n": 1180, "p": [52, 57, 61, 66, 74] }
  }
}
Does the app really get smarter with more data? · benchmark
Our promise: the more women share their data, the sharper the app gets for everyone. This chart is the proof. We feed it realistic donations and measure how far its self-learned reference sits from trusted national medical data (the CDC's health survey) — measured in heart-beats per minute. The line falls as data grows: a rough guess at first, near-perfect once warmed up. Lower is better; hover the line to read any point. Anyone can re-run it: node docs/benchmark/cohort_convergence.js.
Loading benchmark…
POST/api/donate
Contribute a de-identified export to the cohort. Identifiers are stripped on-device and again server-side. Explicit consent required.
Request body
{
  "consent": true,
  "age": 31,
  "records": [
    { "date": "2023-01-01", "rhr": 62.1, "hrv": 55, "skin_temperature": 36.31,
      "sleep_efficiency": 90.2, "spo2": 96.4, "steps": 9549, "phase": "Menstrual" }
  ]
}
Response · 200 OK
{
  "ok": true,
  "accepted": 1,
  "dropped": 0,
  "identifiers_removed": 0,
  "cohort_size": 215,
  "cohort_days": 6121
}
Signal fields, one object per day in records
rhrresting heart rate, bpm
hrvovernight rMSSD, milliseconds
skin_temperaturenightly skin temperature, °C
sleep_efficiencypercent of time in bed asleep
respiratory_ratebreaths per minute
spo2blood-oxygen saturation, percent
stepsdaily step count
phaseMenstrual · Follicular · Fertility · Lutealoptional
consentmust be true, GDPR lawful basisrequired

Rate-limited and size-capped to protect the service. Dates are coarsened to relative day offsets and age to 5-year bands before anything is stored; any field shaped like a personal identifier is rejected. Analysis itself needs no API call, it runs entirely in your browser.

Period journal

No wearable? No problem. Tap a day to log it by hand. Marking whether it was a period day is the only thing we need — everything else is optional context that sharpens your read-out.

Period day Extra detail logged

Saved on this device only (your browser's local storage), nothing is uploaded unless you choose to donate it from the API tab.