How to Make a Workout Tracker in Notion

Short answer

Make an Exercises database with a rep range for each move and a Log database linked to it. Log the weight and the reps of each set, like 10 10 9. Formulas add up volume, estimate your one rep max, tick New PR and say when to add weight.

Rather skip the setup? Our Gym Tracker is ready to use, $9 once.
A Notion workout tracker: a bench press page with its next target, best weight and logged sets, and cards that say what to lift next time

Try it: log a set

Type a weight and the reps you did on each set, then click Log it. The log and the numbers above it change the same way the formulas below work in Notion. The sample is the four workouts from our test.

Bench press

8 to 12 reps. Hit 12 on every set and it adds 5.

Next target
Add weight: 140 × 8
Best weight
135
Best 1RM
189

Log

  • Oct 30 135 × 12 12 12 New PR Volume 4860 · Est 1RM 189
  • Oct 27 135 × 10 10 9 Volume 3915 · Est 1RM 180

1. A list of exercises

A workout tracker needs two databases: one for the moves you do, and one for every time you do them. Start with the moves. Each one gets a rep range, which is what tells the tracker when you’re ready for more weight.

  1. Make a new page called Workouts. On it, type /table, pick the table option and call the database Exercises.
  2. Add the properties below, then a page for each move, like Bench press with 8, 12 and 5.
PropertyTypeWhat it’s for
ExerciseTitleThe move, like Bench press
MuscleSelectChest, Back, Legs, Shoulders, Arms
Min repsNumberBottom of your rep range
Max repsNumberTop of your rep range
JumpNumberHow much weight to add, like 5 or 10

Big lower body lifts can take a bigger jump. In our test, squat had a range of 5 to 8 and a jump of 10.

2. A log for every set

Now the log. One row is one move on one day: the weight, and the reps of each set typed in one field.

  1. Add a second database called Log with the properties below.
  2. When you add the Exercise relation, pick the Exercises database, turn on Show on Exercises and name it Log.
PropertyTypeWhat it’s for
NameTitleAnything you like, such as the move
ExerciseRelationThe move you did
DateDateThe day you did it
WeightNumberThe weight on the bar
RepsTextReps of each set, like 10 10 9

Typing all your sets in one text field keeps logging quick: three sets of bench press are one row, not three. Put a space between the numbers. In our test, 8, 8, 8 with commas worked too.

A new log in Notion with Weight 160 and Reps 8 7 7 ringed
Logging a move in our Gym Tracker: one weight, and the reps of every set.

3. Volume and one rep max

Three formulas on Log turn that text into numbers. First, Total reps splits Reps at the spaces and adds the sets up:

Total reps
prop("Reps").split(" ").filter(!empty(current)).map(toNumber(current)).sum()

Then Volume, the weight times all your reps, which shows how much work a session was:

Volume
prop("Weight") * prop("Total reps")

And Est 1RM, an estimate of the most you could lift once. It uses the Epley formula on your top set, so you can compare a heavy set of 5 with a lighter set of 10:

Est 1RM
round(
  prop("Weight") * (1 + prop("Reps").split(" ").filter(!empty(current)).map(toNumber(current)).max() / 30)
)

Bench press at 135 for 10 10 9 showed 29 reps, a volume of 3915 and an estimated 1RM of 180.

4. When to add weight

Getting stronger means doing a little more over time, which lifters call progressive overload. A simple way to do it is to stay at a weight until you hit the top of your rep range on every set, then add weight and start again at the bottom. Add a formula called Next to Log:

Next
lets(
  reps, prop("Reps").split(" ").filter(!empty(current)).map(toNumber(current)),
  ex, prop("Exercise").first(),
  if(
    reps.every(current >= ex.prop("Max reps")),
    "Add weight: " + format(prop("Weight") + ex.prop("Jump")) +
      " × " + format(ex.prop("Min reps")),
    "Same weight: " + format(prop("Weight")) + ", beat " + prop("Reps")
  )
)

It reads the rep range and jump from the move you picked. Bench press at 135 for 10 10 9 said Same weight: 135, beat 10 10 9. Three days later, 12 12 12 said Add weight: 140 × 8.

Our Notion test log: bench press and squat rows with Est 1RM, Next saying Same weight or Add weight, and New PR ticked on one row
Our test log on October 31. Only the bench press at 12 12 12 beat an earlier estimate.

5. Mark a new PR

A personal record, or PR, is when you beat yourself. Add a formula called New PR to Log. It ticks when a row’s Est 1RM is higher than every earlier log of the same move:

New PR
lets(
  before, prop("Exercise").first().prop("Log")
    .filter(current.prop("Date") < prop("Date"))
    .map(current.prop("Est 1RM")),
  !empty(before) and prop("Est 1RM") > before.max()
)

In our test, bench press went from 180 to 189 and got ticked. The second squat matched the first at 234, so it stayed unticked, and the first log of each move has nothing to beat.

Want a list of your PRs? Add a view to Log filtered to New PR is checked and sorted by Date.

6. Your numbers on every move

The last step puts the numbers where you look before a set: on each move’s page in Exercises.

  1. Add a Rollup called Best weight. Set Relation to Log, Property to Weight and Calculate to Max.
  2. Add another rollup called Best 1RM with Property set to Est 1RM and Calculate to Max.
  3. Add a formula called Next target that shows Next from your latest log:
Next target
prop("Log").sort(current.prop("Date")).last().prop("Next")

Bench press showed a best weight of 135, a best 1RM of 189 and Add weight: 140 × 8. Squat showed 185, 234 and Add weight: 195 × 5.

Main lifts cards in Notion: Back squat says Add weight: 195 × 5 and bench press says Same weight: 160, beat 7 6 6, with best weight and 1RM
Our Gym Tracker shows the next target and your bests on a card for each main lift.

Questions

Can I use kilograms?

Yes. Type every weight in kg and set Jump to 2.5 or 5. The formulas only do the math, so they work the same in pounds or kilos.

How accurate is the one rep max?

It’s an estimate from the Epley formula: weight times one plus reps divided by 30, using your top set. It’s closest for sets of a few reps and rougher for long sets, so use it to compare your own logs, not as a number to test.

Why doesn’t matching my best count as a PR?

New PR asks for more than every earlier log. In our test, a squat at the same estimate as before stayed unticked. If you want ties to count, change the > near the end of the formula to >=.

Can I log workouts on my phone?

Yes. Open Log in the Notion app, tap New and fill in the move, weight and reps. Reps is a text field, so the spaces between sets type normally.

Does this work on the free Notion plan?

Yes. Databases, relations, rollups and formulas are all on the free plan.