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:

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 daytodaygoal (roughly)
30-minute brisk walk86
1 hour of hard training1316
Marathon1619–20
24 hours near max heart rate21just 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.

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 issue

Prefer 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.