Weighted Pullups Calculator for Strength Precision
Use this weighted pullups calculator to estimate your pull-up one-rep max, understand strength-to-weight ratios, and see how added weight shifts your calisthenics performance. Enter body weight, added load, and clean rep count to see instant strength analytics.
Weighted Pullups Calculator
Use current morning body weight for accuracy.
Plates, belt, or dumbbell load. Use 0 if unweighted.
Count only clean, full-range, shoulder-width pullups.
Estimated 1RM Load: 0 kg
Formula: Epley method using total load and completed reps for weighted pullups.
Total Load Per Rep: — kg
Strength-to-Weight Ratio: —
Projected 5-Rep Working Load: — kg
Estimated Reps at Bodyweight Only: —
Reps
Predicted Load (kg)
Bodyweight-Only Load (kg)
Repetition-strength table shows how the weighted pullups calculator translates your current capacity across rep targets.
Blue line: current weighted pullups calculator projection. Green line: bodyweight-only projection.
What is a weighted pullups calculator?
The weighted pullups calculator is a specialized strength tool that converts your body weight, added load, and strict rep count into an estimated pull-up one-rep max. Athletes, coaches, and programmers use the weighted pullups calculator to measure pulling strength, balance load selection, and set progressive overload targets without guesswork.
The weighted pullups calculator matters for climbers, CrossFit athletes, calisthenics specialists, and any lifter who relies on vertical pulling. A common misconception is that bodyweight-only reps fully describe pulling power; the weighted pullups calculator shows how added load and rep capacity reveal a truer strength-to-weight picture.
Weighted pullups calculator Formula and Mathematical Explanation
The weighted pullups calculator applies the Epley equation adapted to total load: Estimated 1RM = (Body Weight + Added Weight) × (1 + Reps ÷ 30). This keeps the weighted pullups calculator consistent with free-weight strength standards while honoring the body-mass component.
Step 1: Sum total load by adding body weight and external load.
Step 2: Apply the repetition coefficient (1 + reps/30) to project maximal strength.
Step 3: Derive working weights or rep expectations by inverting the same factor.
Step 4: Use the weighted pullups calculator outputs to set weekly loading schemes.
Variable
Meaning
Unit
Typical Range
Body Weight
Current athlete mass used in the weighted pullups calculator
kg
50-110
Added Weight
External load attached during the set
kg
0-60
Reps
Strict pullups performed at that load
count
1-12
Total Load
Sum of body and added weight per rep
kg
50-170
Estimated 1RM
Projected maximal single-rep load
kg
60-200
Variable summary keeps the weighted pullups calculator transparent for precise programming.
Practical Examples (Real-World Use Cases)
Example 1: An 82 kg athlete adds 12 kg and hits 6 strict reps. The weighted pullups calculator sets total load at 94 kg. Estimated 1RM = 94 × (1 + 6/30) ≈ 112.8 kg. Projected 5-rep load = 112.8 ÷ 1.1667 ≈ 96.7 kg. The athlete learns that 15 kg added should be feasible for 5 reps, guiding next mesocycle.
Example 2: A 68 kg climber with 0 kg added performs 10 reps. The weighted pullups calculator reads total load 68 kg. Estimated 1RM = 68 × (1 + 10/30) ≈ 90.7 kg. At this ratio, the climber's strength-to-weight ratio is 1.33, meaning a 20 kg plate goal equals roughly 5 reps, shaping a peaking block.
Both scenarios show how the weighted pullups calculator translates real repetitions into actionable load targets, eliminating trial-and-error and keeping shoulder volume in check.
How to Use This weighted pullups calculator
Enter body weight, added weight, and strict reps. The weighted pullups calculator instantly updates your estimated 1RM, strength-to-weight ratio, and projected working sets. Review the table to choose rep goals and use the chart to visualize progressions.
Use morning body weight for consistency.
Log the exact external load; even 0.5 kg matters in the weighted pullups calculator.
Count only clean reps; partials distort the repetition coefficient.
Watch the strength-to-weight ratio to balance mass gain and pulling power.
Copy results to your training log to track weekly changes.
When reading results, focus on the primary 1RM for maximal strength, the 5-rep projection for volume work, and the estimated bodyweight-only reps to judge endurance. The weighted pullups calculator simplifies decision-making for heavy days, deloads, and peaking phases.
Key Factors That Affect weighted pullups calculator Results
var chartCanvas=document.getElementById("strengthChart");
var ctx=chartCanvas.getContext("2d");
var chartData1=[];
var chartData2=[];
function validateInput(value,min,idErr,label){
var errElem=document.getElementById(idErr);
if(value===""||isNaN(value)){
errElem.innerText=label+" is required.";
return false;
}
if(value<min){
errElem.innerText=label+" must be at least "+min+".";
return false;
}
errElem.innerText="";
return true;
}
function calculate(){
var bodyVal=document.getElementById("bodyWeight").value;
var addedVal=document.getElementById("addedWeight").value;
var repsVal=document.getElementById("reps").value;
var bodyWeight=parseFloat(bodyVal);
var addedWeight=parseFloat(addedVal);
var reps=parseInt(repsVal,10);
var validBody=validateInput(bodyVal,1,"errBody","Body weight");
var validAdded=validateInput(addedVal,0,"errAdded","Added weight");
var validReps=validateInput(repsVal,1,"errReps","Reps");
if(!validBody||!validAdded||!validReps){
updateDisplay("–","–","–","–","–");
drawChart([],[]);
updateTable([]);
return;
}
var totalLoad=bodyWeight+addedWeight;
var est1RM=totalLoad*(1+reps/30);
var projFive=est1RM/(1+5/30);
var strengthRatio=est1RM/bodyWeight;
var bodyOnlyReps=(est1RM/bodyWeight-1)*30;
if(bodyOnlyReps<0){bodyOnlyReps=0;}
updateDisplay(est1RM,totalLoad,projFive,strengthRatio,bodyOnlyReps);
var tableRows=buildRepLoads(est1RM,bodyWeight,reps);
updateTable(tableRows);
drawChart(tableRows.map(function(row){return row.rep;}),tableRows.map(function(row){return row.load;}),tableRows.map(function(row){return row.bodyLoad;}));
}
function updateDisplay(est1RM,totalLoad,projFive,strengthRatio,bodyOnlyReps){
var primary=document.getElementById("primaryResult");
if(est1RM==="–"){
primary.innerText="Estimated 1RM Load: –";
document.getElementById("intTotalLoad").innerText="Total Load Per Rep: — kg";
document.getElementById("intStrengthRatio").innerText="Strength-to-Weight Ratio: –";
document.getElementById("intFiveRep").innerText="Projected 5-Rep Working Load: — kg";
document.getElementById("intBodyReps").innerText="Estimated Reps at Bodyweight Only: –";
return;
}
primary.innerText="Estimated 1RM Load: "+est1RM.toFixed(1)+" kg";
document.getElementById("intTotalLoad").innerText="Total Load Per Rep: "+totalLoad.toFixed(1)+" kg";
document.getElementById("intStrengthRatio").innerText="Strength-to-Weight Ratio: "+strengthRatio.toFixed(2);
document.getElementById("intFiveRep").innerText="Projected 5-Rep Working Load: "+projFive.toFixed(1)+" kg";
document.getElementById("intBodyReps").innerText="Estimated Reps at Bodyweight Only: "+bodyOnlyReps.toFixed(1);
}
function buildRepLoads(est1RM,bodyWeight,reps){
var arr=[];
var r;
for(r=1;r<=12;r++){
var load=est1RM/(1+r/30);
var body1RM=bodyWeight*(1+reps/30);
var bodyLoad=body1RM/(1+r/30);
arr.push({rep:r,load:load,bodyLoad:bodyLoad});
}
return arr;
}
function updateTable(rows){
var tbody=document.getElementById("loadTable");
tbody.innerHTML="";
var i;
for(i=0;i<rows.length;i++){
var tr=document.createElement("tr");
var tdRep=document.createElement("td");
tdRep.innerText=rows[i].rep;
var tdLoad=document.createElement("td");
tdLoad.innerText=rows[i].load.toFixed(1);
var tdBody=document.createElement("td");
tdBody.innerText=rows[i].bodyLoad.toFixed(1);
tr.appendChild(tdRep);
tr.appendChild(tdLoad);
tr.appendChild(tdBody);
tbody.appendChild(tr);
}
}
function drawChart(repLabels,series1,series2){
ctx.clearRect(0,0,chartCanvas.width,chartCanvas.height);
ctx.fillStyle="#ffffff";
ctx.fillRect(0,0,chartCanvas.width,chartCanvas.height);
if(!repLabels||repLabels.length===0){return;}
var maxVal=Math.max.apply(null,series1.concat(series2));
var padding=50;
var usableWidth=chartCanvas.width-2*padding;
var usableHeight=chartCanvas.height-2*padding;
drawAxes(padding,usableWidth,usableHeight,maxVal);
plotLine(repLabels,series1,"#004a99",padding,usableWidth,usableHeight,maxVal);
plotLine(repLabels,series2,"#28a745",padding,usableWidth,usableHeight,maxVal);
}
function drawAxes(padding,usableWidth,usableHeight,maxVal){
ctx.strokeStyle="#c7d0db";
ctx.lineWidth=1;
ctx.beginPath();
ctx.moveTo(padding,padding);
ctx.lineTo(padding,padding+usableHeight);
ctx.lineTo(padding+usableWidth,padding+usableHeight);
ctx.stroke();
var i;
ctx.fillStyle="#0f2f54";
for(i=0;i<=5;i++){
var y=padding+usableHeight-(usableHeight*i/5);
var val=maxVal*i/5;
ctx.fillText(val.toFixed(0)+" kg",5,y+4);
ctx.beginPath();
ctx.strokeStyle="#e6ecf2";
ctx.moveTo(padding,y);
ctx.lineTo(padding+usableWidth,y);
ctx.stroke();
}
for(i=1;i<=12;i+=2){
var x=padding+(usableWidth*(i-1)/11);
ctx.fillText(i+" reps",x-10,padding+usableHeight+20);
}
}
function plotLine(repLabels,data,color,padding,usableWidth,usableHeight,maxVal){
ctx.strokeStyle=color;
ctx.lineWidth=2;
ctx.beginPath();
var i;
for(i=0;i<repLabels.length;i++){
var x=padding+(usableWidth*(repLabels[i]-1)/(repLabels.length-1));
var y=padding+usableHeight-(data[i]/maxVal*usableHeight);
if(i===0){ctx.moveTo(x,y);}else{ctx.lineTo(x,y);}
ctx.fillStyle=color;
ctx.beginPath();
ctx.arc(x,y,3,0,Math.PI*2);
ctx.fill();
}
ctx.stroke();
}
function copyResults(){
var primary=document.getElementById("primaryResult").innerText;
var int1=document.getElementById("intTotalLoad").innerText;
var int2=document.getElementById("intStrengthRatio").innerText;
var int3=document.getElementById("intFiveRep").innerText;
var int4=document.getElementById("intBodyReps").innerText;
var note=document.getElementById("formulaNote").innerText;
var summary=primary+"\n"+int1+"\n"+int2+"\n"+int3+"\n"+int4+"\n"+note;
navigator.clipboard.writeText(summary);
}
function resetForm(){
document.getElementById("bodyWeight").value="80";
document.getElementById("addedWeight").value="10";
document.getElementById("reps").value="5";
document.getElementById("errBody").innerText="";
document.getElementById("errAdded").innerText="";
document.getElementById("errReps").innerText="";
calculate();
}
calculate();