← All posts
August 27, 2026·vo2-maxapple-watchhealthkit

VO2 Max Trends from Apple Watch: Letting AI Spot the Patterns

VO2 Max Trends from Apple Watch: Letting AI Spot the Patterns

VO2 max is one of the most robust predictors of cardiovascular fitness and longevity. Apple Watch estimates it from outdoor walk/run workouts using GPS speed, heart rate, and motion data. The estimate isn’t lab-accurate, but it’s consistent — meaning the trend is reliable even if the absolute number has a margin of error.

Here’s how to query and interpret your Apple Watch VO2 max data.

How Apple Watch Measures VO2 Max

Apple Watch doesn’t measure VO2 max directly. It estimates it using the relationship between heart rate and exercise intensity (via GPS pace) during an outdoor walk or run with heart rate monitoring.

The algorithm requires:

Apple Watch updates its VO2 max estimate after qualifying outdoor workouts. If you train mostly indoors on a treadmill or bike without outdoor GPS data, you’ll have fewer VO2 max readings.

The HealthKit identifier: HKQuantityTypeIdentifierVO2Max. Unit: ml/(kg·min).

What Your VO2 Max Data Looks Like

In health4ai’s database, VO2 max is stored as HKQuantityTypeIdentifierVO2Max records with:

Unlike heart rate, VO2 max isn’t sampled continuously. You might have one reading per week if you run outdoors weekly, or one per month if outdoor runs are infrequent. The trend analysis still works — you’re looking at the direction over months, not day-to-day variation.

Querying Your VO2 Max History

Last year:

What's my VO2 max trend over the last 12 months?

Claude calls query_metric(metric_type="HKQuantityTypeIdentifierVO2Max", days=365).

For a 365-day window, this returns daily aggregates (avg, min, max per day where data exists). The daily array will show dates where VO2 max was estimated, with gaps on days without qualifying workouts.

Multi-year trend:

Show me my VO2 max over the last 3 years. Is it trending up or down?

Claude calls get_long_term_trend(metric_type="HKQuantityTypeIdentifierVO2Max", months=36).

This returns monthly buckets — each month’s average VO2 max (averaging across the estimates recorded that month). A 3-year view makes seasonal patterns and multi-year fitness trajectory visible.

Example output:

{
  "monthly_trend": [
    {"month": "2023-07", "avg": 44.8, "days_with_data": 4},
    {"month": "2023-08", "avg": 45.2, "days_with_data": 5},
    ...
    {"month": "2026-06", "avg": 48.6, "days_with_data": 4}
  ],
  "overall_avg": 46.4,
  "overall_min": 42.1,
  "overall_max": 50.3
}

A trend from 44.8 to 48.6 over 3 years represents a meaningful fitness improvement — roughly a 8% increase in estimated aerobic capacity.

Interpreting the Numbers

Apple Watch’s VO2 max estimates have been validated against lab measurements with an average error of ±3.5 ml/kg/min. This means the absolute number may be off, but relative changes are meaningful.

General reference ranges (American Heart Association):

Age 30-39 male VO2 Max Category
< 38 Low
38-44 Fair
45-51 Good
52-58 Excellent
> 58 Superior

For interpretation in Claude:

My VO2 max average over the last 6 months is 48.2. I'm a 35-year-old male. 
Put this in context — how does it compare to standard fitness categories?

Claude can contextualize your number against population norms and explain what the trajectory implies.

Correlating VO2 Max with Training Volume

Show me my VO2 max trend alongside my running workout frequency over the last 2 years.

Claude pulls get_long_term_trend for VO2 max and get_workouts(days=730) for training history. It can look for periods where increased running frequency preceded VO2 max improvements (with the expected lag of 6-10 weeks for aerobic adaptation).

This is a genuinely interesting analysis — seeing whether your training is actually producing aerobic improvement, or whether VO2 max has plateaued despite consistent training (which might indicate the training stimulus isn’t sufficient).

Spotting Seasonal Patterns

VO2 max often shows seasonal variation: higher in summer (more outdoor running, better heat adaptation), lower in winter (more treadmill training, fewer qualifying outdoor workouts for Apple Watch to generate estimates).

Does my VO2 max show seasonal patterns? Compare my summer months to winter months over 3 years.

Claude uses get_long_term_trend(metric_type="HKQuantityTypeIdentifierVO2Max", months=36) and groups the monthly data by season. If summer consistently shows higher estimates, that’s a pattern worth knowing — it affects how you interpret a single reading in November vs in July.

Before/After Training Block Comparison

I trained specifically for a 10K last spring (March-May 2026). Did my VO2 max improve during that block?
compare_periods(
    metric_type="HKQuantityTypeIdentifierVO2Max",
    period_a_start="2026-01-01",
    period_a_end="2026-02-28",
    period_b_start="2026-05-01",
    period_b_end="2026-05-31",
    label_a="Pre-training",
    label_b="Post-training"
)

This gives you a factual before/after comparison with delta and percent change. If VO2 max improved 2-3 ml/kg/min over a 12-week training block, that’s a measurable result of the training program.


health4ai: Free while in early access.
Download on the App Store →