Skip to content
How it works

Many pseudonymous puzzle pieces become your personal answer.

mypacing is not a fitness tracker, it is a shared tool. Everyone who takes part contributes a few measurements pseudonymously. That is what mypacingLAB (the shared analysis) learns from, to understand what precedes a crash and what helps. Here you can see openly how that works — and what is actually being analysed right now.

Illustration: a smartwatch gently syncing with a smartphone on a wooden table
Live statistics

What mypacingLAB is analysing right now

Real, continuously updated counts of analysed data points — not of people. We deliberately don't show user numbers: this is about data that is analysed pseudonymously after explicit consent so everyone gets clearer answers.
pseudonymously analysed data points in total
Hours of heart-rate data
HRV measurements
Nights of sleep
Activity days
Temperature measurements
Humidity measurements
Analyzed measurement days
Marked crash days
Blood pressure measurements
Oxygen saturation measurements
Respiratory rate measurements
Extended activity readings
Body measurement readings
Symptom reports
Cycle reports (voluntary)
computed crash days (prediction)
Loading … · These numbers grow with every new pseudonymous contribution — for example, if someone uploads a day with continuously recorded heart rate, that hour counts here live.

If the numbers here are still small, we are just getting started. We say that openly. Every pseudonymous contribution makes mypacingLAB smarter — and the number bigger.

More on this on the blog: how mypacing uses wearable data for crash analysis

In three steps: from the crowd to you

1

You share your daily values pseudonymously

Only the analysed daily values from your uploaded file are used — with a random ID instead of your name and an age band instead of your birth date. No name, no email, no device number. A single day says little on its own, like one piece of a puzzle.

2

mypacingLAB puts the pseudonymous pieces together

Only when many pieces come together do patterns emerge that no one person could ever see alone: When do crashes cluster? What preceded them one or two days earlier — more activity, less sleep, more heat? What did the days that went better for many people have in common? mypacingLAB computes these patterns from the pooled, pseudonymous data — always in groups, never from individual people.

3

The patterns sharpen YOUR personal recommendation

What many people show together flows back into your own analysis: your pulse limit and your exertion review become more precise the more people take part. If your group turns out to be especially sensitive to heat, for example, mypacing weights that more heavily for you. Always as an honest assessment — never as a prediction, never as a diagnosis.

The more pseudonymous puzzle pieces, the clearer the picture — for every single person. That's the whole point of the community.

Exactly which data is processed

Full openness: these are the values that flow into the analysis, pseudonymously. Nothing more.

Resting heart rateThe most common basis of the pulse limit (measured resting heart rate + 15 when no medically confirmed value exists) and a sign of recovery or overload.
Heart rate throughout the dayHow much time is spent above the exertion limit — the core of pacing.
HRVHow much your heartbeat varies (HRV) — a measure of how well your body is recovering.
SleepDuration and quality. Plus deep sleep, REM, light sleep and awake time individually, where your device or your uploaded file provides it. Measured in the pool (6 September 2026, 71,009 assessable days): on days when someone slept at least 10 % less than in their own previous week, a crash is marked on 0.50 % of days — otherwise on 0.36 %. A link, but a weak one, which is why sleep does not feed into the warning.
Activity & walking heart rateSteps (no double-counting between phone and watch), active calories, distance, floors climbed and exertion — possible triggers for post-exertional malaise (PEM).
Blood pressure, oxygen saturation & respiratory rateAdditional circulatory and breathing values, where your device records them — further signs of recovery or overload.
Body measurementsWeight, body fat percentage, BMI — slow-moving baseline values, not day-to-day triggers, but part of the overall picture.
Temperature & humidityEnvironmental factors at your approximate location — heat often intensifies symptoms.
SymptomsSymptoms you voluntarily log in Apple Health (e.g. exhaustion, dizziness, headache) — help place patterns in context. Plus, since August 2026, the symptoms with severity (0–10) logged in the app itself.
Daily check-inYour voluntary daily entries from the app: how you feel, subjective sleep quality, cognitive/social load and daytime rest — young fields the analysis learns from step by step.
Cycle data (voluntary)Only if you log it in Apple Health and grant permission — for some people it can be linked to crash patterns.
Crash markersCrashes you mark yourself — they are what makes the patterns learnable in the first place.
Interventions & triggersWhat helped and what came before — voluntary, by category.

Resting heart rate

HRV

Sleep

Activity

Blood pressure

SpO2

Respiratory rate

Body measurements

Temperature

Humidity

Symptoms

Cycle (voluntary)

Crash markers

What your history additionally shows you

mypacing also shows these patterns in your own history. Except for symptom tagging (see the note in the table), they are not part of the shared analysis.

Crash markers in the chartYour marked crash days appear directly in the history chart of your functional level — so you can see at a glance whether a dip coincides with a crash.
Treatment timelineMedications and supplements as a timeline, with start, end and note — so you can compare changes in your history with the start or stop of a treatment.
Symptom taggingLog individual symptoms with severity. This shows you how often and how persistently a symptom occurs for you over time. Unlike the other rows of this table, these entries also flow — pseudonymously — into the shared analysis (see the Symptoms row above).
Energy balanceA look back over the last 30 days: how many days you were pacing conservatively, staying within your "envelope", or overexerting.
Activity logLog individual activities like cooking, walking or housework — with your own rating of exertion and recovery (1–5 points each).

Time above your limit

Since August 2026 mypacing shows a figure that did not exist here before: how long your heart rate was above your personal limit today — not as an evening summary, but during the day. It is explicitly marked as a beta and can be switched on and off in the settings. Here is how it is calculated, so you can check the arithmetic yourself if you want to.

Where your limit comes from

The limit is the heart rate from which a minute counts as “above”. mypacing uses exactly one of these four sources, in this order:

1. A clinical measurementIf you have entered a threshold from an exercise test (a CPET, VT1), that one applies. A measurement beats any rule of thumb — and that is not a platitude here: it is the only number in this field that appears in a peer-reviewed study.
2. Your measured resting heart rateOtherwise: the median of your measured resting heart rate over the last 180 days, plus 15 beats per minute. That is a widely used rule of thumb — a rule, not a measurement taken on you. Where the 15 comes from, and what it is not, is in the next section.
3. The resting heart rate from your profileIf no measured values exist: the resting heart rate you entered yourself, plus 15. That is self-reported, and the display says so.
4. Otherwise: no limit at allIf none of this exists, the limit stays empty. No substitute number is filled in — an invented limit looks like a measurement, and later nobody can tell the two apart.

Next to the number, the app always states which of these sources it came from and how many days it rests on. A limit without its origin is a claim.

Where the number 15 comes from — and what it is not

We checked this on 5 September 2026, because we wanted to know it more precisely than “that is how it is done”. The answer is less comfortable than we would have liked, and it belongs here.

The originThe rule “resting heart rate + 15” comes from educational material by the Workwell Foundation, a US organisation that has been running exercise tests in ME/CFS for decades. There it carries no source of its own, and we found no paper in the literature that tests it. A PubMed search for the rule returns nothing.
What the studies sayThe only peer-reviewed number in this whole field is a different one: 10 % below the heart rate at the anaerobic threshold, measured by cardiopulmonary exercise testing (Davenport et al., Physical Therapy 2010). That is exactly source 1 above — a real measurement beats any rule of thumb.
Why we still calculateBecause the alternatives without a laboratory are demonstrably worse. The common age-based formulas were checked against the actually measured threshold in 90 people in 2020 (van Campen, Rowe and Visser): they were off by −28 to +23 beats. A formula that can be twenty beats wrong is not a limit.
What the guidelines sayNICE NG206, the CDC, the IOM report and the German guideline all recommend energy management rather than graded exercise — but not one of them names a number. For a long time we printed “NICE NG206” next to the 15 as its basis. That was wrong, and as of today it is gone. The German ME/CFS Society does name the rule; it cites the same Workwell material.
The sentence that hurts mostThere is no controlled study showing that any heart-rate limit prevents a crash — ours included. The one randomised trial using a pulse-based limit found no effect on PEM. Anyone telling you otherwise has not looked it up.

What follows from this, and why we keep the rule. It is the best approximation available without a laboratory, and it errs in the safer direction: for most people it sits lower than the age-based formulas, and too low is the less dangerous mistake in pacing. But it is a starting value, not a finding. The full version, as #MillionsMissing Germany also writes it, reads: resting heart rate + 15 + your symptoms + your own experience. No app can supply those last two terms for you — which is why the limit can be changed by hand in the settings at any time, and why the app states next to every number where it came from.

Since 12 Aug 2026 an additional ratchet applies: the measured basis of your limit may fall, but never rises on its own. A resting heart rate that climbs for weeks would otherwise raise the limit exactly when you can tolerate less. It is only raised by a medically confirmed value or a deliberate change in your settings.

How the minutes are counted

Counting is strictly above the limit: if your limit is 90, a minute at 90 does not count, a minute at 91 does. Only minutes in which your heart rate was actually measured are counted. A gap — because you took the watch off or it is charging — counts neither as rest nor as exertion, but not at all. Nothing is filled in.

The share (“that is X % of the time actually measured today”) only appears from 30 minutes of measurement onwards. Below that, such a share jumps between 0 and 100 % without anything having changed. The minutes themselves are still shown — they are counted and they are correct; only their share of a day says nothing at such low coverage.

Three levels — and each says what it cannot do

How precise the display can be depends on where the heart rate data comes from. It therefore always carries its level and that level's limitation with it, instead of feigning a precision that is not there right now.

Without a wearableWithout heart rate data there is no threshold logic. What is shown rests on your own entries alone.
From your importCalculated from the data your wearable last delivered. More recent minutes are not included yet — which is why the time of the last measured point is always shown alongside (“as of 14:10”).
Pacing modeLive evaluation on the Apple Watch while pacing mode is running. Explicitly not continuous monitoring: it runs when you start it and stops when you end it.

Why your limit can lag behind reality

If your limit rests on the median of 180 days, it rests on half a year. If your resting heart rate changes in that time, the limit follows with a delay — it then partly describes a state that no longer exists. Downwards this is the more uncomfortable direction: a limit that sits too high lets exertion pass as rest.

mypacing therefore also calculates which limit would result from your last 30 days alone and compares it with the standing one. If the two differ by at least 3 beats, a sentence appears that names both numbers — checkable, without any “up to”. This is only said when both sides rest on genuinely measured values, the long window carries at least 60 and the short one at least 10 days of measurement. Recalculated across the pseudonymous data: of 34 people who meet these conditions, 8 would see the note — for 7 of them the limit sits too high, for one too low; the largest deviation was 7 beats.

The sentence deliberately talks about the limit and not about you. Why a resting heart rate has changed, we do not know: recovery, a better fitting strap, the season — that is not something an app should make a claim about.

Why this does not become a score

The obvious next idea would be a composite figure: a “resilience score” from resting heart rate, HRV, sleep and exertion that tells you in the morning how today will go. We tested exactly that before building it — and then decided against it. The numbers are here so you can judge them instead of having to believe us.

Previous day's exertionTested against self-marked crash days: 30 episode onsets with computable previous-day exertion. Discrimination (AUC) 0.567 with a confidence interval from 0.460 to 0.674 — and that with the more optimistic method, which tests on the same data it learned from.
The existing daily scoreUnder the stricter test (each person left out entirely once): AUC 0.488 with 0.404 to 0.590.
Re-measured on 6 September 2026The same question again — now across 250 people and 193,056 pool days instead of 92, and this time computed within each person. That is the question the score actually asks: not “is a crash day somewhere in the pool rated higher than a calm day somewhere”, but “is my crash day rated higher than my calm day”. Result: AUC 0.575 (0.521 to 0.629) for the current day and 0.566 (0.505 to 0.627) for the next, across 20 people with at least five marked crash days. Neither interval includes 0.5 any more — so the score does discriminate, but weakly. Computed only on the well-covered days (14 people), it falls back entirely into the chance range. This can be recomputed with backend/werkzeug/score_guete.php.
What that meansBoth intervals include 0.5. 0.5 is the coin flip. A figure whose interval contains chance is not weak evidence — it is none.
Why more is not possible yetOnly 4 of 92 people so far meet the minimum sizes at which anything could be calculated for an individual at all. For 0.567 to leave the chance range, roughly 80 marked episode onsets would be needed instead of 30.

That is why mypacing shows what is measured at this point — minutes above your limit, its origin, its level — and no figure that pretends to know something about tomorrow. As soon as enough marked histories have accumulated, we will run the calculation again and write the result here, even if it comes out negative again.

What we are currently testing in the shadows

The search continues — just in the right order. Since 21 Aug 2026 a new candidate has been running in shadow mode: a model that evaluates all 30 daily signals together with the temporal depth of the existing model (37 inputs). It computes every night on real, pseudonymous data — but nobody gets to see its results: no display, no warning, no e-mail. It is only logged and tested.

Historical testUnder the strict method (each person left out entirely once) this page initially reported AUC 0.650 with 0.602 to 0.693. On 21 Aug 2026 we retracted that number ourselves — see the next row. Honestly computed, what remains is AUC 0.568 with a confidence range of 0.510 to 0.599, across 391 marked episode onsets from 67 people (as of 28.08.2026 — mypacingLAB recomputes these figures every night; the page shows its latest run). The lower bound sits just above the coin flip — a start, not proof.
Why the 0.650 is goneIt was to a substantial degree a label artifact: years of imported wearable days on which nobody could mark a crash yet counted automatically as “no crash” — the model learned to recognize old import days, not to predict crashes. Since 21 Aug, training labels per person only start from their first own self-report; the earlier history still serves as baseline context, just no longer as a claim about days nobody assessed.
The honest caveatLooking back over the last two weeks of everyday data, the same model reached only 0.585 with 0.498 to 0.659 — that range includes 0.5 again. This is consistent with the honest 0.558 and had already hinted at the artifact. Whether the quality carries over into everyday life remains open, not established.
How the decision is madeSince 21 Aug, every prediction is frozen on the target day itself, before the day has played out, and later checked against the crashes people actually marked. Only when this prospective test holds up across enough episode onsets does the question of showing anything arise — not before.
How those onsets are distributedNot evenly — and that belongs next to the number: about 41 % of all marked onsets come from a single person, the three most active together account for 58 %, and the median person has marked 1. In a test that leaves each person out once, a large part of the statement therefore rests on very few folds. We still report the figure — but it stands on few shoulders, it is not a cross-section. (The page recalculates these three figures live; without JavaScript you see the state as of 6 September 2026.)
How many actually deliver a heart-rate curveThe figure that explains the quality above better than any statement about sample size: of 229 people who shared data in the last 28 days, 101 actually deliver a heart-rate curve across the day on a typical day — for the rest there is only a resting heart rate, or nothing. And among those who also mark crashes (97), it is 55. Without a curve there are no exertion minutes, and without exertion minutes there is no way at all to test on those days whether exertion preceded the crash. The bottleneck is not the number of people, it is this combination. (Counted live; without JavaScript you see the state as of 9 September 2026.)
Why the weighting model uses fewer of them291 of the 458 onsets come from people who contribute no activity value at all — no steps, no minutes above the limit, no calories. Next to heart rate and HRV the second leg is missing there, so the weighting model computes with only 92 onsets. Not a calculation error, but the price of not counting days without evidence as evidence.
Who maintains the modelIt retrains automatically every night on all data shared up to that point. A new version is only adopted if it passes five checks — among them: the confidence range must sit above 0.5, and it must not be worse than the running version. If a check fails, the old version simply stays in place.

Model card: crash early-warning shadow model

PurposeResearch model running in shadow mode. It tests whether self-marked crash episode onsets can be discriminated from preceding personal daily data. Its output is currently not used for warnings, diagnoses or treatment decisions.
Inputs37 inputs: the 30 existing daily signals plus temporal depth. Missing values are not reinterpreted as evidence, so the usable sample can be much smaller than the number of registered people.
TargetOnset of a crash episode marked by the affected person. Training labels per person start only after their first own crash/non-crash response; older imported days are not automatically treated as “no crash”.
Person separationHistorical performance is tested using strict leave-one-person-out (LOPO) validation. Data from the same person therefore do not sit on both the training and test side at once.
DiscriminationAUC and its 95% confidence interval are published live above. These figures are not described as an accuracy rate.
CalibrationNot yet established robustly. An AUC does not show whether a percentage output would be a calibrated probability. mypacing therefore does not publish a “x% chance of a crash” figure.
Sensitivity / specificityNot yet reported as a clinical operating value. That requires a decision threshold fixed in advance and tested prospectively. No user-facing operating threshold exists while the model remains in shadow mode.
SubgroupsNot yet validated. Severity, ME/CFS versus Long COVID, and device/data-source groups must only be assessed separately once each group contains enough independent episodes.
VersioningThe training system recomputes nightly. Before any model version could affect users, it must be frozen, published with an unambiguous version identifier and test date, and then tested prospectively against unchanged outcomes.
Release / shutdown ruleA new version is internally adopted only if all five quality checks pass, including a confidence interval above 0.5 and no deterioration versus the running version. For any future user-facing release an additional rule applies: a negative prospective test means no release.

If the prospective test comes out negative, that will be written here — just as the negative result for the score is written above. A model that has to prove itself before anyone sees it is not a step back: it is the reason you can trust what mypacing does show you.

More on this in the blog (in German): why our best crash model stays invisible
And always, without exception: pseudonymous. Your values are stored pseudonymised in mypacingLAB under a random research identifier. While your account exists, that identifier can be linked to your account internally; public analyses only appear once a minimum group size is reached. The data is never sold and never used for advertising. Storage is encrypted, on servers in Germany/the EU. That separation between internal pseudonymisation and public group-level output is a condition, not an afterthought.
More on this on the blog: how mypacing analyses HRV and heart-rate data from your wearable

Why we show this so openly

Because trust is everything in this project. Anyone who uses mypacing extends a double advance of trust: with a possible contribution — and with their health data. Both are precious. That is why you should always be able to see what for. Every measurement above is a piece of shared hope that together we can find answers no single person could find alone. No corporation profits from it. mypacing belongs to the people who use it.

And if you'd like, help make sure it can keep going:

❤ Support mypacing

For clinicians

If you are reading this professionally: there is a separate page saying where every number comes from and where its meaning ends — including a sample report filled with fictional data that you can look at without anyone having to show you their health data.

To the page for clinicians

mypacing is not a medical device and does not provide a diagnosis. All patterns are observations from pseudonymous data, not a prediction. In case of symptoms, medical advice takes precedence. In an emergency, call your local emergency number.