Solar Production Estimate: Check a Quote With PVWatts
A 7.2 kW array on a south-facing roof in Denver, tilted 20 degrees, makes 11,473 kWh in a typical year. That number came out of the PVWatts calculator on 30 August 2026 with every input left at its documented default, and this post takes it apart multiplication by multiplication until you can get within a few percent of it on paper.
The point is not the Denver figure. It is that a proposal's annual production claim rests on five inputs and about three multipliers, and once you know which ones, you can run the same model on your own address and see whether the salesperson's number came from the model or from the margin of a notepad. Production is the first term in every payback formula; the four numbers on your electric bill price it, but they cannot rescue it if it is wrong.
One naming note before the sources. The lab that built PVWatts was the National Renewable Energy Laboratory until 1 December 2025, when the Department of Energy renamed it the National Laboratory of the Rockies. The calculator now lives at pvwatts.nlr.gov; the older pvwatts.nrel.gov address is kept as an alias of the same server, so links in existing proposals still work. The technical manual still carries its original report number, NREL/TP-6A20-62641 (Dobos, September 2014). Older proposals cite it under the old name; it is the same document.
The chain PVWatts actually computes
Strip the model to its spine and it is this:
sunlight on the panels → DC at rated efficiency → minus system losses
→ minus heat → through the inverter → AC kWh at the meter
Everything below is one link of that chain, with the manual's number for each. The manual is written for Version 5 (2014); the calculator today runs API version 8.5 and the web page reports itself as version 8.7.4, with what the API documentation describes as updated module, inverter, and thermal models. The defaults below were checked against both the manual and the live page. Where V8 handles a step more finely than the hand version, the worked example shows how far apart they land.
Link one: the sunlight, and where it comes from
PVWatts does not use your last year's weather. It uses a Typical Meteorological Year file, an hourly synthetic year assembled so that each month is representative of the long-term record. The current dataset is the 2020 TMY from the National Solar Radiation Database, and the API response for the Denver run named its source exactly: NSRDB PSM V3 GOES tmy-2020 3.2.0, a satellite-derived grid cell 1,405 metres from the coordinates entered. That is the first thing to check on a proposal: which weather file, and how far from the house.
The output you need from this link is solrad_annual, the average daily irradiance on the plane of the array, in kWh per square metre per day. For the Denver roof at 20 degrees facing due south it was 5.655. The monthly values ran from 3.71 in December to 7.24 in June. This is not sunshine on flat ground; it already accounts for tilt and orientation, which is why it changes the moment you rotate the array.
A hand estimate starts by treating that irradiance as "peak-sun hours," the hours per day at the 1,000 W/m² test condition the panels were rated under. Then:
7.2 kW × 5.655 h/day × 365 days = 14,861 kWh (DC, before any loss)
That is the number the array would produce if every module ran at its nameplate rating whenever the sun matched test conditions. Nothing does. The rest of the chain is subtraction.
Link two: the 14.08% that everybody quotes and nobody adds up correctly
The manual's Table 6 lists ten loss mechanisms with default values. They are reproduced here because the calculator's loss page carried the identical ten on 30 August 2026, so both the 2014 document and the live tool agree (the page's pop-up help text for shading says 1%, but the field itself is preset to 3%, and it is the field that enters the calculation):
| Loss mechanism | Default |
|---|---|
| Soiling | 2% |
| Shading | 3% |
| Snow | 0% |
| Mismatch | 2% |
| Wiring | 2% |
| Connections | 0.5% |
| Light-induced degradation | 1.5% |
| Nameplate rating | 1% |
| Age | 0% |
| Availability | 3% |
Add those and you get 15.0%. The manual says, in so many words, that "the total loss is not the sum of the individual losses." Equation 9 multiplies the survivals instead:
L_total = 100 × [1 − (0.98 × 0.97 × 1.00 × 0.98 × 0.98 × 0.995 × 0.985 × 0.99 × 1.00 × 0.97)]
= 100 × [1 − 0.8592]
= 14.08%
Sum them instead of multiplying and a quote that simply used the defaults looks as if it had quietly improved on them by nearly a point. It had not. The difference between adding and multiplying is small here, but it is the same mistake a proposal makes when it stacks a degradation rate on top of a rate escalator by addition, and there the gap compounds for 25 years.
Two of the ten deserve a second look on your own roof. Shading at 3% is what the manual calls the average measured on systems described as "unshaded," and it says a roof with nearby trees or structures should raise it using shading software or a site survey. Age at 0% means the estimate is for a new array; the manual's own figure for long-term decline is about 0.5% a year, and the performance warranty's degradation curve caps what any multi-year projection may assume. PVWatts gives you year one. The proposal's 25-year savings table had to do something with years two through twenty-five, and it is worth asking what.
Apply the multiplier:
14,861 kWh × 0.8592 = 12,769 kWh (DC, after system losses)
Link three: heat, which the hand method can only approximate
Panels are rated at a cell temperature of 25 °C. They rarely run there. The manual's Table 3 gives the "standard" module a temperature coefficient of −0.47% per °C, and its thermal section explains that a roof-mounted array, with air flow restricted under the modules, is modelled at an installed nominal operating cell temperature of roughly 49 °C against 45 °C for an open rack. At 49 °C the instantaneous penalty is 24 degrees × 0.47%, about 11%. Averaged across a year of cool mornings, winter days, and full-sun afternoons weighted by how much energy each hour makes, the model lands well below that.
This is the link you cannot do precisely by hand, because PVWatts computes it hour by hour from ambient temperature and wind speed. What you can do is bound it. In the Denver run, the API's monthly DC output summed to 12,027 kWh, against the 12,769 from link two. The gap is 5.8%. Open rack instead of roof mount moved DC to 12,060, a difference of a third of a percent at this location, which says most of the 5.8% is the climate rather than the mounting. For a first-pass check, a 5 to 7% thermal haircut on a roof-mounted standard module is the right order; premium modules at −0.35%/°C lose less, thin film at −0.20%/°C less again.
12,769 kWh × (1 − 0.058) = 12,028 kWh (DC, after temperature)
That one is circular, since 5.8% came from the model. The honest hand version uses 6%: 12,769 × 0.94 = 12,003 kWh, within a quarter of a percent.
Link four: the inverter, and the ratio the proposal forgot to mention
The manual states plainly that inverter efficiency "is not included in the system loss" and is its own input with a default nominal value of 96%. Its efficiency curve was fitted to California Energy Commission data on inverters made after 2010; at part load the curve dips, so the annual average comes out a little under the nominal figure. Denver: 11,473 AC ÷ 12,027 DC = 95.4%.
The second inverter input is the DC-to-AC ratio, the array's DC nameplate divided by the inverter's AC rating. The 2014 manual's default was 1.1; the current API documents 1.2. A 7.2 kW DC array at 1.2 implies a 6 kW inverter, and whenever the array could push more than 6 kW the output is clipped to the nameplate. On the Denver roof at 20 degrees that almost never happens: rerunning with a ratio of 1.0 gave 11,453 kWh, twenty kWh below the 1.2 case, because the larger inverter's part-load efficiency cost slightly more than the clipping it avoided. On a steeper, sunnier, or cooler roof the clipping term grows. If a proposal pairs a 9 kW array with a 6 kW inverter, that is a ratio of 1.5, and PVWatts will show how much summer midday production is being thrown away.
12,003 kWh × 0.954 = 11,451 kWh (AC, hand method)
PVWatts V8 result: 11,473 kWh (AC)
Within 0.2%, and with a 6% thermal guess instead of the model's 5.8% doing most of the work. Two other ways to say the same number: 11,473 ÷ 7.2 = 1,593 kWh per kW of DC per year, and a capacity factor of 11,473 ÷ (7.2 × 8,760) = 18.2%, which is the figure the API returns as capacity_factor.
What moves it: the two inputs on the proposal that matter most
Every input above except the sunlight was a default. The sunlight depends on where the panels point, and that is where quotes diverge for the same house.
| Change from the base case | Annual AC kWh | Difference |
|---|---|---|
| Base: tilt 20°, azimuth 180° (south) | 11,473 | — |
| Azimuth 270° (west), same tilt | 9,425 | −17.9% |
| Tilt 40°, south | 11,913 | +3.8% |
The west-facing run is the one to remember. Same panels, same losses, same inverter: 2,048 kWh a year gone, and the December figure fell from 691 to 412 kWh. A proposal that models a west roof at a south-roof yield is not off by a rounding error. Tilt matters less in the 20-to-40 degree band at this latitude; the steeper roof gains in winter (889 versus 720 kWh in January) and gives some back in summer (1,020 versus 1,148 in June).
There is a third mover that does not show up in a table: the loss percentage itself. Because the losses enter as a single multiplier, every point removed from 14.08% adds roughly 1.16% to annual output (1 ÷ 0.8592). A proposal at 8% losses is claiming about 7% more energy than the default before any other input changes, and it should be able to say which of the ten mechanisms it reduced and why. Shading at 0% on a roof with a chimney is a claim, not a measurement.
Running it on the proposal in your hand
Open pvwatts.nlr.gov, enter the address, and change nothing on the System Info page except what the proposal states: DC size in kW, module type, array type (roof mount for most houses), tilt, azimuth. The proposal must state these; they are among the twelve items a proposal cannot omit, and if tilt or azimuth are missing, the production figure could not have been modelled from them. Note the roof's actual azimuth in degrees clockwise from north: 180 is south, 270 is west. "Southwest" is 225 and it is not free.
Then read three things off the result. The annual AC kWh, to compare with the proposal directly. The kWh-per-kW ratio, which is the figure that travels between quotes of different sizes for the same roof. And the range PVWatts prints beside the annual number, which the page describes as based on 30 years of weather at the location and intended to show the variation you might see between years; a guarantee written at the top of that band is a guarantee that expects to be paid out.
If the proposal's number is inside a few percent of yours, its production is honest and you can move on to the price of each kWh. If it is 10% or more above, the gap has a name, and the installer should be able to say it in one sentence: a lower loss figure, a premium module, a different weather file, a different azimuth. What you should not accept is an explanation that names none of those, because PVWatts has no other inputs to hide it in.
Frequently asked questions
What is the 14.08% system loss in PVWatts made of?
Ten separate defaults: soiling 2%, shading 3%, snow 0%, mismatch 2%, wiring 2%, connections 0.5%, light-induced degradation 1.5%, nameplate rating 1%, age 0%, availability 3%. They are multiplied, not added — 1 minus the product of (1 minus each loss) — which is why the total is 14.08% rather than the 15% you get by summing them. The list and the equation are in the PVWatts Version 5 Manual (NREL/TP-6A20-62641, Table 6 and Eqn. 9) and the same ten defaults were still on the calculator's loss page when it was read on 30 August 2026.
Does PVWatts include the inverter in the 14.08%?
No. The manual is explicit that inverter efficiency is not included in the system loss and is a separate input, defaulting to 96% at rated power. The inverter's size relative to the array is a third input, the DC-to-AC ratio, which the current API documents with a default of 1.2. So a proposal that says 'PVWatts, 14% losses' has told you about one multiplier out of at least three.
Is the PVWatts figure what my roof will make in its first year?
It is a typical-year estimate, not a forecast. The weather input is a Typical Meteorological Year file assembled from decades of satellite-derived data (the current dataset is NSRDB PSM V3 TMY from 2020), so a single real year can land above or below it. The calculator shows a range built from 30 years of weather to indicate that spread. Also note the age loss defaults to 0%, so the estimate describes a new array; any multi-year savings projection has to apply degradation on top.
My proposal's kWh is higher than PVWatts gives for the same roof. Is that automatically wrong?
Not automatically, but the difference has to come from a named input. Higher-efficiency modules with a lower temperature coefficient, a documented lower loss percentage, a different tilt or azimuth, or a different weather source can each move the number. Ask which. If the installer cannot state the five inputs — location, DC size, tilt, azimuth, losses — the figure was not produced by a model you can reproduce, and that is the problem, not the size of the gap.