Estimate your savings by switching to a Power Purchase Agreement
Year 1 Savings:$0.00
Year 1 PPA Payment:$0.00
Total Lifetime Savings:$0.00
Average Annual Savings:$0.00
Understanding Your Power Purchase Agreement (PPA)
A Solar Power Purchase Agreement (PPA) is a financial arrangement in which a third-party developer designs, finances, installs, and maintains a solar energy system on a customer's property at little to no upfront cost. Instead of buying the panels, the customer agrees to purchase the energy generated by the system at a fixed per-kWh rate.
How This PPA Calculator Works
This calculator compares the cost of energy you would buy from your utility company against the cost of energy purchased through a PPA over the life of the contract. It accounts for two critical factors that often confuse homeowners:
The PPA Escalator: Many PPA contracts include an "escalator" clause, meaning your PPA price per kWh increases by a set percentage (usually 1% to 3%) every year.
Utility Rate Inflation: Historically, utility companies increase their rates annually. This calculator defaults to a 3.5% national average, but you can adjust this based on your local utility's history.
Example Calculation
Imagine a home that uses 10,000 kWh per year. If your utility charges $0.20/kWh, your annual bill is $2,000. If a PPA provider offers you a rate of $0.15/kWh with a 0% escalator:
Year 1 Savings: ($0.20 – $0.15) × 10,000 = $500.
Long Term: As the utility rate rises to $0.28 over 10 years while your PPA stays at $0.15, your annual savings grow significantly.
Key Benefits of a Solar PPA
PPAs are popular because they remove the barriers to entry for solar energy. Benefits include:
$0 Down: No significant upfront capital investment is required.
Maintenance Free: Because the PPA provider owns the system, they are responsible for all repairs and monitoring.
Immediate Savings: Most PPAs are structured to ensure the per-kWh rate is lower than your current utility rate from day one.
Predictability: You know exactly what you will pay for power for the next 20-25 years, protecting you against volatile energy market spikes.
function calculatePPASavings() {
var annualGen = parseFloat(document.getElementById('annualGeneration').value);
var utilRate = parseFloat(document.getElementById('utilityRate').value);
var ppaRateStart = parseFloat(document.getElementById('ppaRate').value);
var ppaEsc = parseFloat(document.getElementById('ppaEscalator').value) / 100;
var utilInf = parseFloat(document.getElementById('utilityInflation').value) / 100;
var years = parseInt(document.getElementById('termYears').value);
if (isNaN(annualGen) || isNaN(utilRate) || isNaN(ppaRateStart) || isNaN(years)) {
alert("Please enter valid numerical values.");
return;
}
var totalPpaCost = 0;
var totalUtilCost = 0;
var year1Savings = 0;
var year1Payment = 0;
var currentPpaRate = ppaRateStart;
var currentUtilRate = utilRate;
for (var i = 0; i < years; i++) {
var yearlyPpa = annualGen * currentPpaRate;
var yearlyUtil = annualGen * currentUtilRate;
if (i === 0) {
year1Savings = yearlyUtil – yearlyPpa;
year1Payment = yearlyPpa;
}
totalPpaCost += yearlyPpa;
totalUtilCost += yearlyUtil;
// Apply escalators for next year
currentPpaRate *= (1 + ppaEsc);
currentUtilRate *= (1 + utilInf);
}
var lifetimeSavings = totalUtilCost – totalPpaCost;
var avgAnnual = lifetimeSavings / years;
// Update UI
document.getElementById('year1Savings').innerText = "$" + year1Savings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('year1Payment').innerText = "$" + year1Payment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('lifetimeSavings').innerText = "$" + lifetimeSavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('avgAnnualSavings').innerText = "$" + avgAnnual.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('ppaResults').style.display = 'block';
// Smooth scroll to results
document.getElementById('ppaResults').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}