Use this calculator to determine your current Satisfactory Academic Progress (SAP) completion rate (Pace). This metric is crucial for maintaining financial aid eligibility at most colleges and universities.
Includes passed classes, failures (F), withdrawals (W), and incompletes (I).
Only includes classes with passing grades (usually D- or higher, or P).
Standard requirement is 67%, but check your institution's policy.
Current Completion Rate0%
How to get back on track:
You need to complete 0 consecutive credit hours without failing or withdrawing from any more classes to reach the 67% threshold.
How to Calculate SAP Completion Rate
Satisfactory Academic Progress (SAP) is a set of standards students must maintain to remain eligible for federal financial aid. One of the three main components of SAP is the Completion Rate, often referred to as "Pace."
The Formula
The SAP completion rate formula is straightforward:
If the school requires a 67% completion rate, this student is in good standing.
Why is 67% the Standard?
Most universities use 67% (or 2/3) as the threshold because it ensures that a student can complete their degree within the Maximum Timeframe allowance (usually 150% of the published program length). If you complete 67% of your classes, you are generally on track to graduate before running out of financial aid eligibility.
function calculateSAP() {
// Get input values
var attemptedInput = document.getElementById('creditsAttempted').value;
var earnedInput = document.getElementById('creditsEarned').value;
var targetInput = document.getElementById('targetRate').value;
// Parse values
var attempted = parseFloat(attemptedInput);
var earned = parseFloat(earnedInput);
var target = parseFloat(targetInput);
// Validation
if (isNaN(attempted) || isNaN(earned) || isNaN(target)) {
alert("Please enter valid numbers for all fields.");
return;
}
if (attempted attempted) {
alert("Earned credits cannot be greater than attempted credits.");
return;
}
// Calculate Rate
var rate = (earned / attempted) * 100;
// Round to 2 decimal places
var rateFormatted = rate.toFixed(2);
// Display Result
var resultArea = document.getElementById('result-area');
var rateDisplay = document.getElementById('rate-display');
var statusBox = document.getElementById('status-box');
var statusMessage = document.getElementById('status-message');
var recoveryBox = document.getElementById('recovery-box');
var targetDisplay = document.getElementById('target-display');
resultArea.style.display = 'block';
rateDisplay.innerHTML = rateFormatted + '%';
targetDisplay.innerHTML = target;
if (rate >= target) {
// Passing Logic
statusBox.className = "result-box success";
statusMessage.innerHTML = "Status: PASSING (Meets SAP Standards)";
recoveryBox.style.display = 'none';
} else {
// Failing Logic
statusBox.className = "result-box danger";
statusMessage.innerHTML = "Status: FAILING (Below SAP Standards)";
recoveryBox.style.display = 'block';
// Calculate credits needed to recover
// Formula derivation:
// (CurrentEarned + FutureEarned) / (CurrentAttempted + FutureAttempted) = Target/100
// var x be Future credits (assuming passed)
// (E + x) / (A + x) = T / 100
// 100(E + x) = T(A + x)
// 100E + 100x = TA + Tx
// 100x – Tx = TA – 100E
// x(100 – T) = TA – 100E
// x = (TA – 100E) / (100 – T)
var numerator = (target * attempted) – (100 * earned);
var denominator = 100 – target;
var needed = 0;
if (denominator > 0) {
needed = Math.ceil(numerator / denominator);
} else {
// Should not happen if target < 100
needed = "Impossible with current target";
}
// Safety check for negative numbers (though logic prevents entering this block if passing)
if (needed < 0) needed = 0;
document.getElementById('credits-needed').innerHTML = needed;
}
}