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
7 progression levels with colors, percentile ranges, and descriptions
8 fitness categories with descriptions and key movements
14 research sources with citations, URLs, and sample sizes
Benchmarks by Category
Squatting
4 movements
Pulling
1 movement
Pressing
2 movements
Olympic Lifting
3 movements
Gymnastics
6 movements
Monostructural
4 movements
Bodyweight
5 movements
Endurance
4 movements
Schema Overview
The bundled JSON contains levels, categories, sources, and benchmarks. Here's the structure:
{
"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:
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