Training advice online is mostly opinion: how many sets, how long to rest, how many days a week. I wanted the boring answer instead: what do written programs actually prescribe? So the 101 programs in the depot.fitness library are now an open dataset, with one row per program, one per exercise, and the full set-by-set prescriptions for the five programs that are free in full.

It's on GitHub as CSV under CC BY 4.0: AlonDrilich/depot-strength-programs (DOI 10.5281/zenodo.24082645). The programs follow documented templates such as 5/3/1, 5×5, push/pull/legs and upper/lower.

One caveat up front: this is what one library prescribes, not what people did, and not a sample of all training programs.

A few numbers

  • Volume grows with level, but less than you'd think. Median weekly prescribed sets: beginner 47, intermediate 59.5, advanced 67. The whole range is 12 to 130.
  • Rest follows the rep range. Median rest is 180 s when the top of the rep range is 5 or fewer, 120 s at 6 to 8, 90 s at 9 to 12, and 60 s at 13 or more.
  • Sessions are small. The median session is 5 exercises and 16 sets; 92.1% of sessions have 3 to 6 exercises.
  • Three or four days a week. 42 programs train 3 days, 40 train 4, and only 19 ask for 5 or 6.
  • Moderate reps dominate. Of 1,565 rep-count prescriptions, 33.4% top out at 9 to 12 reps and 32.9% at 13 to 15. Only 13.0% are in the 1 to 5 range.
  • Nobody prescribes RPE or RIR. Progression is free text, and only 10 programs mention a deload or reset.

Load it in a few lines

import pandas as pd base = "https://raw.githubusercontent.com/AlonDrilich/depot-strength-programs/main/" programs = pd.read_csv(base + "programs.csv") exercises = pd.read_csv(base + "exercises.csv") # Median weekly prescribed sets by level print(programs.groupby("level")["weekly_prescribed_sets"].median()) # The ten exercises that appear in the most programs print(exercises.nlargest(10, "programs_using")[["exercise_name", "programs_using"]]) 

The second query puts back squat and bench press on top, in 56 programs each, followed by barbell row (44), Romanian deadlift and lateral raise (39 each).

The messy part: exercise names

The source is free text, so "Back Squat", "Back Squats", "Barbell Squat" and "Barbell Squats" are the same lift, and so are "Leg Curl" and "Hamstring Curls (Lying)". Names are slugified, run through an alias table (abbreviations expanded, parentheticals dropped, four barbell pairs merged), and a trailing "s" is merged only when the singular also appears. Names that could mean something different, like "Squats" and "Back Squat T1", are left apart rather than guessed. The result is 484 canonical exercises, and exercises.csv lists every spelling that was merged into each one, so you can check or redo it.

Reps are free text too. Each prescription gets a reps_kind (fixed, range, 5/3/1 wave, per-set list, AMRAP, time, interval and so on), and numeric bounds only where they make sense.

What's not in it

  • Exercise-by-exercise prescriptions for the other 96 programs. They're counted in the summaries but not released.
  • Any mapping from exercises to muscles. The source only has program-level muscle groups.
  • Anything about outcomes. It's a description of prescriptions, nothing more.

The charts and the full method are at depot.fitness/data. Corrections are welcome at support@depot.fitness, or as an issue on the repo.