January 2026 Developer Diary

Bringing VO2 max to your run

VO2 max is the single number that best captures your aerobic fitness — but Apple buries it in the Health app, disconnected from any specific run. Apex Run reads it from HealthKit and ties it back to the run that produced it.

VO2 max is the number most coaches point to when they want a single measure of aerobic fitness. It predicts race performance better than any individual workout metric. It responds to training over weeks and months in a way that tells you whether what you’re doing is actually working.

And in Apple Health, it’s buried three taps deep, detached from any run, sitting in a list of samples with timestamps and no context.

The data exists. It just isn’t where it should be.

How Apple calculates it — and why the connection is lost

Apple Watch estimates VO2 max using heart rate response during outdoor runs. After you finish a run, the watch processes the data and, if conditions were right, writes a new VO2 max sample to HealthKit. That sample carries a timestamp, a value, and nothing else — no link back to the workout that produced it.

So even though the reading appears within minutes of your run finishing, it carries no reference back to the workout that produced it. Just a timestamp and a number.

Apex Run closes that gap. When a VO2 max sample appears in HealthKit within a few minutes of a run ending, the app associates that reading with the run. Open the run detail, and your VO2 max for that day is right there — alongside pace, heart rate, and everything else from that workout.

What you can do with it

A single VO2 max reading isn’t very interesting. A series of them, attached to real runs, starts to tell a story.

You can see whether your aerobic fitness tracked upward during a consistent training block, or held flat during a recovery week. You can notice that your VO2 max estimate tends to come in higher on your harder efforts, or that it dropped slightly after a period of fatigue. It becomes part of the record of your training — not an isolated number floating in a health dashboard.

VO2 max belongs with your runs. That’s where the context is.

Got an idea?

What should I build next?

I read every email. If there's a feature that would make your runs better, I'd genuinely love to hear about it.

✉  Send me your idea