Garmin HRV vs. Elite HRV — Watch vs. Strap
Comparing nightly Garmin HRV measurements with morning Elite HRV strap measurements.
This is a part of my upcoming series of building a comprehensive health data measurement system.
I’ve been wearing my trusty Garmin Forerunner steadily for years now and it has given me my nightly HRV status every morning. However, watch HRV statuses are not without its criticism. HRV influencers (yes, they exist, on X/Twitter) abide by the gold standard morning heart rate heart rate strap measurement. In practice however, I didn’t find my morning strap measurement very consistent. When measuring twice in a row, values can fluctuate as much as 5–8 digits. Time to put it all to the test.
Methodology
Garmin
Watch model: Garmin Forerunner 255
Values types:
- By default Garmin supplies the 7 day rolling average of their HRV nightly HRV. It is suspected but not officially confirmed that this is an RMSSD value.
- Garmin also reports the nightly average. Which is the one that we’ll be using in our analysis.
Exporting Garmin HRV data
While Garmin Connect is quite a comprehensive data platform, their exporting options are terrible and their APIs are not accessible for the regular health data geek. There’s an excellent repo (https://github.com/tcgoetz/GarminDB) that extracts large amounts of Garmin data, but HRV data is not available through this method (or I wasn’t able to find it).
I found another way to get the data from their platform by intercepting the network requests in Garmin Connect and parsing and combining the lastNightAvg HRV values into a dataframe. If you want to know more about how I did this just leave me a message.
Another method would be to download a CSV export for each month through Garmin connect and join them all together manually.
Elite HRV
Device used: Garmin HRM-Pro Plus
Values types:
- By default, Elite HRV uses their proprietary HRV score, where they take the RMMSD apply a transformation and scale it to a more intuitive 0–100 range. (source)
- The raw RMMSD value (this is the one we’ll be using)
Measurement: first thing after waking up, sitting, measuring for 1 minute.
HRV4training vs. Elite HRV: While both apps are superb, the sole reason for me for choosing Elite HRV is that they provide a live heart rate display for detecting artifacts.
A note on artifacts: the strap does not communicate perfect data. What tends to happen is that every so often heart rate peaks unnaturally high, then it’s compensated by an unnaturally low value and then it stabilizes again. Sometimes Elite HRV corrects this (and can be seen in the data screen afterwards), but sometimes it does not correct. Due to the uncertainty of whether or not the artifacts are corrected, I just stop and restart the process, and yes that can be frustrating.
The reason that I measure “just” for one minute, is because Elite HRV allows you to preview your HR trendline before starting. During the preview, I just wait until it’s stable enough to start measurement. Most of the time during measurement the value stays roughly the same during the full minute and I’m confident enough the value is reliable.
Exporting data from Elite HRV: Elite HRV has the option to export your HRV data to your mailbox but there’s a catch: they only provide the raw measurements. You’ll have to write your own functions to calculate the RMSSD and their HRV score. Luckily in this day and age we have AI to do this for us, so it only took a couple of minutes. Note that in the exported data the artifacts are not removed, so they will be displayed in the data analysis below.
Measurement periods
For 3 separate periods in the last few years I have been able to muster the discipline for daily HRV measurements, so that’s why you’ll be seeing 3 charts. In the meantime Garmin may have updated their HRV or measurement algorithms and firmware so keep that in mind.
Apples to apples (!)
Keep in mind that Garmin’s measurement is a nightly average measurement, while Elite HRV performs a cross-sectional single moment measurement.
Note that there are 4 variables we are comparing here:
- Garmin’s (rolling average) score → we are not interested in this one for now.
- Garmin’s nightly average → might reflect the recovery process, not necessarily the recovered state in the morning.
- Garmin’s last nightly measurement → which should be used to compare apples to apples as good as we can since it’s closest to Elite HRV morning measurements.
- Elite HRV morning measurement → default and recommended-cross sectional measurement.
Let’s look at some cases where the nightly and morning measurement differ. After that I’ll compare some of the last nightly measurement to the morning measurements.
Example 1: Garmin low— Elite HRV high

The three values of note here are:
- 53 ms → nightly measurement
- 60 ms → morning measurement
- 59 ms → last nightly measurement
Conclusion: nightly HRV was lower than usual, probably due to an increased training load I was experiencing. But the actual measurements seem to align quite well.
Example 2: Garmin low — Elite HRV high

- 66 ms → nightly measurement
- 54 ms → morning measurement
- 64 ms → last nightly measurement
Conclusion: the measurements methods do not align as nicely as the previous one. My nightly readings were much higher, but somehow I was not recovered as well in the morning. Some loose theories are that it might be due to training type (weight training vs. running) or I did not sleep as well.
What does the theory say about nightly average vs. morning reading?
I didn’t find a way yet to get the last night’s reading in bulk so I made a manual comparison.

Conclusion: based on these (limited) measurements, there seems to be no meaningful relationship between the Garmin morning reading and the strap measurement. Some speculations why this might be the case:
- Garmin’s wrist HRV measurements are not accurate enough,
- the last measurement if the night is still in a (semi) sleeping state and is not comparable to a waking state
- or a single 1 minute strap measurement is just too much of a momentary measurement of a volatile metric.
HRV Data Analysis: Watch vs. Strap
With the data collected, cleaned and merged in my VS Code Python notebook we can start to do some analyses.
Watch vs. strap RMSSD plots
When comparing trends for correlations, I always like to use two axes that are scaled. Ultimately, we’re mostly interested in the practical applications of HRV, thus scaled axes and correlations are valid in this case. Since Garmin’s nightly data is an average and Elite HRV a single point, we’ll expect that the range of the average is lower and that’s also can be seen in the charts:
How I interpret these charts: they somewhat correlate, but not nearly perfectly. Often there seems to be a delay, but it’s not consistent in a single direction of time.
If I smooth things out with a centered 6 day moving average, the correlation becomes much more clear:
The correlation seems strong here, except for the beginning and end of the second period and the middle of the last period even shows a sort of reverse correlation.
Let’s see if we can quantify the results and have a look at the lags in the data.
HRV correlations
Correlation outputs show that there’s a mild (r=0.29) but significant correlation when looking at the full date range. The relationship is somewhat stronger (r=0.35) when the Elite HRV data is lagged for 1 day. This is strange, because that would mean that my nightly average explains the next day’s morning more than the morning directly after the night.
As we suspected from the charts, smoothing the data (still lagged with 1 day) increases the correlation to r=0.49.
Conclusions
Firstly, I have learned what is already common wisdom: daily HRV fluctuations are *often* so messy and dependent on numerous unknown variables that cannot be interpreted with any amount of certainty.
Secondly, the Garmin watch data *mostly* correlates with “gold standard” heart rate strap morning measurements, especially with short term trends.
For me, the Garmin data is reliable enough to track your training status or your nervous system state on a rolling weekly basis, but you might draw other conclusion based on these findings. At least this saves me the hassle of putting on a heart rate strap each morning :’)