OpenProgression

Data & Downloads

All OpenProgression data is available as JSON — free to use in any project under the MIT license. Build it into your gym software, coaching platform, or training app.

openprogression.json

One file with everything — all 7 levels, 8 categories, 14 sources, and 29 benchmarks with gender-specific standards across all levels. This is the recommended download.

Individual Files

Prefer to import only what you need? Download individual files.

Core

Benchmarks by Category

Schema Overview

The bundled JSON contains levels, categories, sources, and benchmarks. Here's the structure:

openprogression.json
{
  "version": "1.0.0",
  "levels": [...],
  "categories": [...],
  "sources": [...],
  "benchmarks": {
    "squatting": [
      {
        "movement": "back_squat",
        "name": "Back Squat",
        "testType": "1rm",
        "unit": "kg",
        "standards": {
          "beginner":          { "male": 40,  "female": 25 },
          "beginner_plus":     { "male": 60,  "female": 40 },
          "intermediate":      { "male": 80,  "female": 55 },
          "intermediate_plus": { "male": 105, "female": 70 },
          "advanced":          { "male": 130, "female": 85 },
          "advanced_plus":     { "male": 155, "female": 100 },
          "rx":                { "male": 180, "female": 120 }
        },
        "sources": ["ball_weidman_2024", "kilgore_2023"]
      }
    ],
    "pulling": [...],
    ...
  }
}

Usage Example

Load the JSON and look up a level for any movement:

JavaScript / TypeScript
import data from './openprogression.json'

function getLevel(category, movement, gender, value) {
  const benchmarks = data.benchmarks[category]
  const bm = benchmarks.find(b => b.movement === movement)

  const levels = ['rx', 'advanced_plus', 'advanced',
    'intermediate_plus', 'intermediate', 'beginner_plus', 'beginner']

  for (const level of levels) {
    const standard = bm.standards[level][gender]
    // Handle range-based (arrays) vs single values
    const threshold = Array.isArray(standard) ? standard[0] : standard
    if (value >= threshold) return level
  }
  return 'beginner'
}

// Example: 80kg male with 105kg back squat
getLevel('squatting', 'back_squat', 'male', 105)
// => 'intermediate_plus'

Gym Wall Poster

Print all benchmarks on a single A1 poster for your gym wall. Both genders, all 8 categories, all 7 levels.

Download Poster (SVG, A1 landscape)

Build with OpenProgression

The data is MIT licensed — use it in your gym management software, workout tracker, coaching platform, or any other project. No attribution required (but appreciated).

View on GitHub