Why Garmin Connect Doesn't Show the Exercise You Actually Did
Your Connect activity says Burpee for every set, or just says Strength Training and nothing else. That is not a sync failure. In a FIT file the exercise name is not text at all, it is two integers that Garmin looks up on its own servers, and the name field you would expect to matter is ignored. Here is the exact mechanism, the five-step lookup Rack runs on every set, why an unknown exercise is deliberately sent as a blank instead of a guess, and the one tab in Garmin Connect that tells you whether any app got it right.
You finish a heavy session. The watch says done. You open Garmin Connect on the phone, tap the activity, and the exercise list is wrong. Every set says “Burpee.” Or the whole activity just says “Strength Training” and nothing else. You know what you did. Your watch knew what you did. Somewhere between the two, the names got lost.
This is not a sync failure, and re-syncing will not fix it. It is how the file format works. Once you know the mechanism, the behaviour stops being mysterious and starts being predictable.
The name is not text. It is two numbers.
A finished strength session reaches Garmin Connect as a FIT file. FIT is Garmin’s own activity format and the standard partner channel third-party apps use to write into Connect. Inside that file, every single set you performed is one set message. That message carries the duration, the repetitions, the weight, the set type, the start time, and two more fields that decide everything about how the row reads:
- field 7,
exercise_category - field 8,
category_subtype
Both are integers. Neither is a name.
Garmin takes that pair and looks it up against its own internal table on its servers. The name you see in Connect comes out of Garmin’s table, not out of the file. An app cannot send the string “Romanian Deadlift” and have Connect print it. It sends a pair of numbers, and Connect decides what that pair means.
There is a text field in the format called wkt_step_name, and it is a reasonable place to expect the name to live. It is not the source of truth for the exercise list. If the category pair disagrees with it, the category pair wins.
So an app can show you the correct exercise name on your phone all session long, write a file with an honest-looking name string inside it, and still produce an activity in Connect that reads as something else. The phone screen and the Connect row are computed from different things.
What happens when the numbers are wrong
Every FIT writer needs a fallback for an exercise it cannot place. The obvious one is category 29, subtype 0, the total-body bucket. Garmin renders that pair as “Burpee.”
We shipped that fallback. For a while, a chest session with six different movements in it came out of the pipe as six rows of the same wrong name, because the mapping collapsed several exercises onto one code. A customer with a real training log spotted it in a week.
The lesson is structural rather than specific to us. There is no free-text escape in this format. Every exercise, including one you invented this morning, has to be resolved down to two integers before it can leave your phone. Any app writing lifting data into Garmin Connect is doing that translation, and how carefully it does it is exactly how accurate your Connect history looks a year from now.
The lookup chain
Rack resolves a name in five steps, each falling through to the next on a miss.
- An exact match against a compiled table. It covers all 361 distinct names in the seeded exercise catalog, and it is generated from that catalog rather than typed by hand.
- Multi-word keyword patterns, longest first. There are 91. This is what catches a variant like “Paused Front Squat” that was never seeded. Order matters, so “leg curl” resolves before the bare word “curl” can claim it.
- Single-word keyword patterns, 114 of them, for names that share only one useful token.
- A muscle-group fallback, used when we know which muscle the movement targets. Hamstrings goes to leg curl rather than to the coarse legs-to-squat default.
- The total-body code, and the burpee row.
Steps 4 and 5 are the dangerous ones. Step 4 is where the interesting decision lives.
When the app cannot tell
A muscle group tells you which muscle was worked. It never tells you which exercise was performed. Those are two different claims, and treating the first as the second is how you print a confident wrong answer.
Take a physical-therapy client whose entire knee rehab program is custom exercises. “Quad Set With Towel” matches nothing in any table. Its muscle group is quads. Follow the muscle fallback and Garmin Connect renders that row as “Barbell Back Squat” on what is effectively a clinical record.
So Rack does not follow it. A user-created exercise rides the name-based steps only. Where the name is evidence we use it, and a custom exercise called “My Custom Squat” still lands on squat, because the word “squat” is real information. Where the name says nothing, we stop and send category 65534, the community convention for unknown. It is not 65535, which the format reserves to mean “this field is absent” and which says something different.
We checked what Connect does with 65534 instead of assuming. On 4 August 2026 an upload carrying it was accepted, and the row rendered as an actionable “Choose an Exercise” link. Reps, time and rest on that row survived intact. You get a blank you can fill in yourself, rather than a wrong name you have to notice first.
There is a third state hiding in here that is easy to miss. Built-in, custom, and “we cannot tell which” are three situations, not two. An exercise can arrive with no catalog link at all: a second device, a reinstall before the custom catalog finishes syncing, a spreadsheet import. Folding that third case into “built-in” is exactly what let the burpee fallback onto a rehab record. It defaults to withholding now.
What survives no matter what
Even when the exercise identity is withheld, the set message still carries the rest of it:
- repetitions, as an exact count rather than an estimate
- weight in kilograms, encoded at the format’s 1/16 kg resolution, so 31.75 kg from a 70 lb log survives instead of rounding to a whole number
- duration and start time, which is where your rest between sets comes from
- set type, so warmups do not pollute the working numbers
That is worth holding next to the baseline. Garmin’s native strength mode stores neither weights nor exercise names, and its reps are estimated from wrist motion. Withholding one field on one unusual exercise is a much smaller loss than not having the field at all.
How to check your own activity
Open the activity in Garmin Connect, on web or in the app, and find the Exercises tab. That table is rendered from the category pairs, one row per set. If the names match what you actually did, your app resolved them correctly. If every row reads the same, or reads as a movement you have never performed, the pairs are wrong. Re-syncing will not help, because as far as Garmin is concerned the file it received was valid.
It is also the fastest way to evaluate any strength app that claims Garmin support. Do one session with a few unusual movements in it, then read the Exercises tab. Names are cheap to display on a phone. Names that survive the trip to Connect are the thing that is actually hard.
Try it
Rack logs sets, reps and weight on the watch and writes the finished session into Garmin Connect as a standard FIT activity, with the exercise codes resolved per set. If you train with a Garmin, Rack is on the Connect IQ store, and the iPhone app works on its own if you would rather start there.
Found an exercise that resolves to the wrong name in your Connect history? Send me a message with the exercise name. I’m the dev, and I read everything.