Share your WHOOP data to calibrate NOOP's Effort
This page turns a WHOOP data export into two small files for the Effort recalibration in ryanbr/noop#2438. It keeps only what the fit needs and drops everything personal.
Why Effort needs recalibrating
Effort tells you how hard your day was for your heart: 0 is a lazy day, 21 (or 100 on NOOP's own scale) is the absolute maximum. Right now the scale is set up in a way that works against anyone who wants to get fitter:
- A little movement already looks like a lot. A 30-minute walk gives about 8 out of 21, and 45 minutes gives about 10, which already counts as "moderate".
- A lot of training barely counts. Once you are at about 14, two extra hours of hard training add only about 1.5 points. A marathon ends up at about 16, and 20 is practically out of reach.
The reason is simple: the top of the scale was set at 24 hours in a row near your maximum heart rate. Nobody has a day like that, so everything real gets squeezed into the lower part of the scale.
The goal is a scale where extra training shows up clearly, hard days like a marathon can reach 19–20, and 21 stays almost unreachable. People coming from WHOOP should see roughly the same ranges as before. This is not a copy of WHOOP's formula, just the same idea of what "light", "moderate", "hard" and "all-out" mean.
| Example day | today | goal (roughly) |
|---|---|---|
| 30-minute brisk walk | 8 | 6 |
| 1 hour of hard training | 13 | 16 |
| Marathon | 16 | 19–20 |
| 24 hours near max heart rate | 21 | just under 21 |
The "goal" column is an illustration. The real numbers will come from your data.
Why your WHOOP data helps
A WHOOP export shows, for every workout, how long you spent in each heart-rate zone and what score WHOOP gave it. With exports from many different people (walkers, lifters, runners, cyclists, fit and less fit) the new scale can be fitted so it is fair for everyone, not tuned to one person. Light days help as much as hard ones. Days at 18 and above (a marathon, a race, a long tour) are especially wanted, because they are rare.
Collection runs until about 8 October 2026. The result is then posted openly in #2438 and proposed to NOOP's maintainer.
Your data stays on your device
Everything runs in your browser. Nothing is uploaded: this page has no server, and its security policy blocks every network request. You can also save the page and open it offline.
Kept: year and month, activity name, duration, strain, max/avg heart rate, HR-zone shares; per day:
Day Strain, resting/max/avg heart rate. Days are numbered 0, 1, 2… instead of dated.
Dropped: exact dates and times, sleep, HRV, recovery, skin temperature, SpO₂ and the journal.
Year and month stay because WHOOP changed how it defines its heart-rate zones at some point, and the fit has to
know which of your workouts came before that.
1Get your WHOOP export
Request your data export in the WHOOP app (Data Export). WHOOP sends you a ZIP file. You don't need to unzip it.
2Choose the ZIP file
3Check and download the two files
These are the complete contents that would be shared. Please look through them.
4A few questions
The export can't tell these apart, and they decide whether your workouts can be used for the curve.
Lower bound of each zone in bpm, as shown in the WHOOP app. With these, your workouts can still be used.
5Post it
Copy this text into a new comment on #2438 and attach both files. The comment is public. Posting needs a free GitHub account; any username works.
Open the issuePrefer a terminal? The same logic is available as a Python script in the first post of #2438. This page and the script produce identical files. Source of this page: DX23876/effort-calibration.