EMOM Tracking for the Unstructured Athlete
EMOM tracking is the gap in almost every training log I have ever kept, including my own. Not because the workout is complicated. Because of when I do it.
I go to EMOMs when I am short on time. Ten minutes, pushups or pull-ups, done. It is not in a plan. It is not part of a program. There is no template waiting for it and no spreadsheet row expecting it. It is the session I do instead of the session I intended to do.
So it used to disappear. The work happened. The data never existed.
The session that never gets logged
Here is the trap: logging an unstructured EMOM costs more than doing it.
Ten minutes of pushups takes ten minutes. Getting those ten minutes into a template-first app takes longer — create the workout, name it, add the movement, decide how many sets, fill the rows, save something you will never run again in that shape. You have to author a program before the app will let the work exist.
So you skip it. I skipped it for years, then noticed my pushup history showed maybe a third of the pushups I had actually done. Only the programmed ones ever made it in. It is the same friction I hit with hybrid training generally — the log punishes you for training in a way it did not anticipate. With an EMOM it is worse, because the EMOM is by definition the session you did not anticipate.
Anyone who has tried greasing the groove knows a harder version of this problem: sets scattered across a whole day, far too small and too frequent to be worth opening an app for. Same root cause, and worth its own post.
What I wanted was simple. Ten minutes, no setup, and the pushups still count toward my pushup history.
An EMOM is a time protocol, not a set scheme
Standard logging has three slots: sets, reps, weight. An EMOM fits none of them, because the thing driving the workload is the clock.
"Every minute on the minute for ten minutes" is not ten sets in the way a lifting app means ten sets. It is a ten-minute window, subdivided, where the rest you get is whatever is left of the minute after the work. Compress the work and you get more rest. Fatigue late and the minutes get tight. The structure is the stimulus.
There is no slot for that, so people flatten it: one entry, "pushups, 10 reps," ten minutes, done. That is where the data quietly breaks.
Why your volume data is lying
Volume in Gym Analyst is load multiplied by reps, summed across the sets you actually stored. Bodyweight movements carry your bodyweight as the load, so a pushup is real volume, not a checkbox.
Which means the shortcut does not just lose detail. It loses an order of magnitude.
Take the EMOM I actually do: ten pushups at the top of every minute, for ten minutes. A hundred pushups. Say you weigh 80 kg.
| How you log it | Reps recorded | Volume charted |
|---|---|---|
| One summary set | 10 | 800 kg |
| Ten per-minute sets | 100 | 8,000 kg |
Same workout. Same ten minutes. One version reports a tenth of the work.
The loaded version behaves the same way. A twelve-minute EMOM of ten kettlebell swings at 24 kg is 240 kg if you log it as one set, and 2,880 kg if you log the twelve minutes you actually did. Twelve times the volume, from the same session.
Nothing multiplies your single set by the round count. The log only knows about sets it was given. So if you want a volume chart that reflects reality, you have to give it the minutes.
Set N = minute N
That is the whole mechanic, and it is the only thing you need to remember.
Log the EMOM as a timed block. The block header holds both numbers at once: the round count and the total duration. A ten-minute EMOM is ten rounds and 600 seconds, stored together, not one or the other.
Inside it, the movement's sets are positional. Set one is minute one. Set two is minute two. There is no minute object and no scheduling model underneath — the position in the list is the minute. Ten rows, one per minute.
Do that and everything downstream works. The block keeps its identity as a ten-minute EMOM, and "Push Up" still charts on its own history, with its own PR markers, alongside the pushups you did in a programmed session last Tuesday. The improvised work stops being a separate category and joins the actual record.
One thing to be clear about: there is no timer in the app, and I am not going to pretend there is. No countdown, no round chimes. The gym clock runs the EMOM. You type the duration in afterward and dictate what happened. Gym Analyst is the log, not the metronome — my phone stays in my pocket while I am working.
Why symmetry is the expensive case
The EMOM I keep coming back to is the simplest one there is: ten pushups at the top of every minute, ten minutes, a hundred reps. Every minute identical. That symmetry is the whole appeal — no score to chase, nothing to remember, just volume banked in a window I can always find.
It is also, precisely because of that, the most expensive session to log carelessly. When every minute is the same, one line feels like it covers the workout. Nothing lost, nothing forgotten. That is the line that reports 800 kg instead of 8,000.
Here is the honest version:
| Minute | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Total |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Pushups | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 100 reps |
Ten rows. A hundred reps. 8,000 kg.
Those rows carry the only signal a symmetric EMOM has: whether you held the number. Ten rows of ten is a held session; nine rows and a gap is a different session, and it should not chart the same. Once ten across ten is repeatable, you either add a rep to every minute or add minutes to the window, and both land on the same chart. The plan never had to exist for the trend to be real.
Doing this without typing ten rows
Everything above is correct and nobody would do it by hand. Ten rows for a ten-minute session — the session you chose because you were short on time. This is what Voice AI is for: I walk out, talk for fifteen seconds, and the per-minute structure gets built for me.
The parser knows what an EMOM is. You describe the session the way you would describe it to a training partner, and it builds the structure:
"Twenty minute EMOM, ten pushups and five pull-ups every minute."
That comes back as a timed block holding both movements and the window, with no structuring work from me.
Three practical notes from using this a lot.
Say the duration in words — "twenty minute EMOM," not "EMOM 20." The shorthand is ambiguous and the explicit phrasing is what the parser is tuned for.
Include a second movement if you want a wrapped block. A single-movement EMOM may come back as a flat run of entries instead. That is fine — the per-minute sets are what the charts read, and they are there either way.
And check the row count before you save. A perfectly uniform EMOM is the one case where the structure can collapse into a single summary set — every minute is identical, so one row looks like a faithful summary. It isn't; that is the 800 kg version. Confirm there is a row per minute and add any that are missing. Two seconds, and it is the difference between a chart that tells the truth and one that flatters you tenfold.
You can also skip speaking entirely. If you wrote the EMOM on a whiteboard or in a notebook, photograph the page and the same parser reads it.
What you can actually chart
Once the minutes are in, the Data tab gives you five metrics per movement, filterable over three months, six months, or a year, with PR markers:
- Load — volume, summed per day. The 8,000 kg number above.
- Reps — summed per day, so a ten-minute pushup EMOM plots 100. This is the "how many did I fit into the window" line.
- Heaviest — your top load for the movement.
- Time — for a block, the duration of the window.
- Distance — if your EMOM includes a run or a row.
Three lines matter for my pushup EMOMs: total reps, total volume, and how both trend when I keep the window at ten minutes. That is progression on a session I never planned.
Two honest limits. There is no work-per-minute density metric — nothing computes it, and I would rather say so than let you go looking. And nothing stores a prescription, so there is no concept of target versus actual: you log the minutes you completed, not the ones you intended, and there is no completion rate to chart. Log what happened, not what was planned.
Throughout, the movements live in your own exercise database rather than a shared global list, and it is one tap to CSV whenever you want the history out. The same logic that makes a sled push measurable as Load × Distance × Time is what makes ten minutes of pushups measurable at all.
The EMOM is the session I do when the plan falls apart, and it should still count. Per-minute logging is what makes it count; voice capture is what makes per-minute logging survive a real training week.
Ten minutes, ten rows, no program required.
Frequently asked questions
Do I need a timer to track an EMOM? Not in Gym Analyst. There is no built-in countdown or round chime — the gym clock, or any interval timer you already use, runs the workout. You enter the total duration afterward and log what you completed, either by typing or by dictating the session.
Is there an EMOM tracker app that handles bodyweight work? Bodyweight movements in Gym Analyst carry your bodyweight as the load, which you set once during onboarding. A ten-minute pushup EMOM therefore produces real volume data rather than a rep count with no load behind it.
Does the volume include every round of my EMOM? Only if you log every round. Volume is summed across the sets you stored, and nothing multiplies a single set by the round count. Log a ten-minute EMOM as one summary set and you will see roughly a tenth of the work. Log it as ten per-minute sets and the volume is accurate.
How is tracking an EMOM different from tracking an AMRAP? In an EMOM the work per minute is fixed and the clock is the constraint, so the useful record is what you completed in each minute. In an AMRAP the work is fixed and the score is total rounds. Both log as timed blocks; the EMOM is the one where per-minute detail carries the signal.
Test Gym Analyst on your own training.
Log strength, cardio, sandbag work, sled pushes, and loaded carries without fragmenting your history. One plan, one price, 30-day free trial.
30-day free trial. No ads. No social feed. Your data stays yours.
Gjorgji Ristovski
Developer of Gym Analyst
Gjorgji is a Marketing Operations expert and the creator of Gym Analyst, a frictionless workout logger for hybrid athletes.