For Coaches Training & analysis

Matching workouts to recorded activities

How the auto-matcher works, when to override it manually, and what locking means.

What "matching" means

A planned workout lives on the calendar. A recorded activity is what the athlete actually uploaded (a FIT, TCX, or GPX file). Matching them ties the two together so you can compare planned-vs-actual on the workout detail page.

How auto-match works

When an athlete uploads an Activity, the Hub runs the auto-matcher:

  1. Look for planned workouts on the same date with the same sport.
  2. Skip workouts already matched, or with match_locked set (user explicitly decided).
  3. If multiple candidates exist, pick the one with the closest planned duration to the activity's actual duration.
  4. Attach the activity, set status to completed.

The auto-matcher never overrides a manual decision and never matches across dates.

When auto-match gets it wrong

Common failure cases:

Manual match / unmatch

From the workout detail page (/athlete/<pid>/workout/<id>/):

What "match locked" means

When you manually match or unmatch, the workout gets match_locked=True. This tells the auto-matcher to leave it alone. If you later want auto-match to consider it again, edit the workout from admin and clear the flag.

Why no cross-date auto-match

The system deliberately does not match a Tuesday Activity to a Wednesday planned workout. The risks (matching the wrong day, getting taper or recovery decisions wrong) are larger than the convenience. The fix is to drag the planned workout to the correct date first.

See also: Calendar overview, Drag and drop in the calendar, Workout notes (three kinds).

Last updated May 12, 2026

Still stuck? Ask us a question and we'll write up an answer.

Ask a question