Skip to content

Methodology

Solar panel savings & ROI — methodology

The exact formulas, assumptions, default values and limitations behind the rooftop solar savings, payback, ROI and LCOE calculator.

Last updated

This documents the Solar Panel Savings & ROI Calculator.

What this calculator does

It estimates the lifetime value of a rooftop solar system: how much electricity it produces, how much money that saves at your retail rate, when those savings repay the net up-front cost (payback), and the overall return (ROI) and levelised cost of energy (LCOE) over the system's life.

The formulas

Net cost and year-one production

net_cost = cost_per_watt * system_kw * 1000 * (1 - incentive_pct / 100)
prod_y1  = system_kw * peak_sun_hours_per_day * 365 * derate

Year-by-year savings — output falls with degradation while the value of each kWh rises with assumed price inflation. Savings are valued at the retail rate only up to your own consumption:

for t in 1..life_years:
  prod_t      = prod_y1 * (1 - degradation_pct / 100)^(t - 1)
  price_t     = electricity_price * (1 + price_inflation_pct / 100)^(t - 1)
  savings_t   = min(prod_t, annual_consumption_kwh) * price_t
  cumulative_t = cumulative_(t-1) + savings_t

lifetime_savings    = cumulative_(life_years)
lifetime_production = sum(prod_t)

Headline metrics

net_lifetime_value = lifetime_savings - net_cost
roi                = (lifetime_savings - net_cost) / net_cost
lcoe               = net_cost / lifetime_production
offset_ratio       = prod_y1 / annual_consumption_kwh

Payback is the first year in which cumulative savings reach the net cost, interpolated linearly within that year:

payback_years = (t - 1) + (net_cost - cumulative_(t-1)) / savings_t

We guard every division (a zero divisor returns "no result" rather than infinity). If cumulative savings never reach the net cost within the system life, payback is reported as not reached — not a misleading large number.

Default values

Every default below is editable in the calculator and shown with its source in the calculator's assumptions table. Electricity price is the most time-sensitive — replace it with your own rate. Electricity price inflation (2.5%/yr) is a planning assumption, not a sourced figure: there is no single authoritative future rate, so we expose it as an editable input rather than attribute it to a source.

Limitations — read these

  • Assumes net metering / full retail value. Production is credited at your retail rate only up to your own consumption. Excess export is not valued — real export rates range from full retail to a low wholesale rate to nothing — so heavy exporters should treat the result as a ceiling. - Constant degradation. We apply a flat annual degradation rate; real module decline is uneven and depends on technology and climate. - Price inflation is an assumption. Future electricity prices are unknown; we grow savings at a fixed rate you can change. Try a higher and lower rate to see the sensitivity. - Excludes financing and maintenance. Loan interest, inverter replacement, cleaning and insurance are not modelled — all of which affect real returns.
  • Ignores roof specifics and incentives drift. Orientation, tilt, shading and local weather change production materially, and incentive eligibility and rates (the 30% federal credit) can change over time.

How we keep it honest

The calculation logic lives in a small, pure function that is unit-tested against normal, edge and invalid inputs (for example, zero sun hours returns "no result" for LCOE rather than infinity, and a system that never repays its cost reports that plainly). If you spot an error, tell us and we'll fix it.

Sources

Every default in this calculator traces to one of these.

By EnergyTally Team · Editorial & analysis team

Published
Updated
Review
EnergyTally Team,