Solar Design Studio — Model & Methodology
Methodology as of September 5, 2026. This document describes every model, data source, and default assumption behind the numbers the Design Studio shows you. We publish it because our core belief is that transparency is knowledge, and knowledge is power: you should never have to take an energy model's word for anything. Everything below is an informational estimate, not an engineering design or an installation quote.
1. Roof model & solar resource
When you enter an address, we request the building's 3-D roof model and solar irradiance data from the Google Solar API (buildingInsights and dataLayers endpoints). Google derives roof geometry from high-resolution aerial imagery and computes an annual flux map — the solar energy each point of the roof receives, in kWh per kW of installed capacity per year — that accounts for roof pitch, azimuth, and shading from trees, chimneys, and neighboring structures. Panel positions come from Google's per-panel layout, and when you size the system with the slider, panels are added in descending order of their individual shading-aware annual output.
Honesty note: these are theoretical-maximum placements from aerial imagery. They do not model fire-access setbacks, vents, or structural obstructions — a final engineered layout after a site survey may fit fewer panels (we repeat this caveat in every proposal we generate).
Shading
PVWatts has no shading input — it models an unobstructed array — so shading has to be re-expressed as a system loss. Google publishes an annual flux raster for the roof: annual DC yield in kWh per kW installed, one value every 10 centimetres, already accounting for trees, neighbouring buildings and the roof shading itself. We sample it under each panel and compare it with an unshaded plane at the same tilt and azimuth:
shade factor = flux under the panels / unshaded yield for that plane
The denominator is PVWatts run at zero losses for the same geometry and coordinates. On a genuinely open roof the two agree to within about 1%, which is how we know the units line up.
Because the reference comes from outside the building, uniform shading is visible. Until September 2026 the studio compared each plane with the sunniest point on the same roof, and that ratio failed twice over: a house shaded from every direction scored as unshaded, because the reference fell along with the planes; and a plane was penalised simply for facing a different way, though PVWatts already models orientation through its azimuth. On a real Denver roof the old method reported a flat plane as 8% shaded when measurement puts it at zero.
Two details worth stating. PVWatts' default loss stack of 14.08% contains a 3% shading allowance, so where a measured factor exists the base drops to the same stack without that term, 11.42% — otherwise shading is charged once by PVWatts and again by us. And the factor is clamped to a maximum of 1.0: the raster and PVWatts are independent models of the same quantity and disagree by a percent or two, which is model noise, not a bonus.
Where Google places no panels on a plane, or the raster is unavailable, the older sunshine-quantile estimate still applies and the studio marks that figure as approximate rather than measured. The panel list shows the measured percentage in green, with the underlying kWh/kW figures on hover.
2. Energy production simulation
Annual and monthly AC production is simulated with PVWatts® v8 from the National Laboratory of the Rockies (formerly NREL), using each roof segment's actual tilt and azimuth and PVWatts' standard ~14% system-loss assumption (soiling, wiring, inverter conversion, availability — see the PVWatts technical reference). The shading-aware DC estimate from the flux map is reconciled with the PVWatts simulation so both the heatmap and the financial model describe the same system. If PVWatts is unreachable, we fall back to the flux-derived DC estimate derated by a standard 0.85 DC→AC factor and label the result accordingly in the UI.
Pt = P1 × (1 − d)t−1
Year-t production from year-one production and the annual degradation rate d (default 0.5%/yr). Compounding, not linear.
Where the hourly shape comes from
PVWatts simulates every hour of a typical meteorological year — NSRDB PSM V3 TMY-2020 — and can return either the 8,760-hour series or twelve monthly totals. What the studio asks for depends on whether you have an account, and it changes the answer more than it sounds like it should.
| Free | With an account | |
|---|---|---|
| Requested from PVWatts | Monthly totals | The 8,760-hour series |
| Intra-day shape | Each month's energy spread over one sine-bell daylight curve | Real modelled weather, hour by hour |
| Day-to-day variation | None — every July day is identical | Cloudy days are cloudy; consecutive days differ |
| Annual energy | Identical. Both come from the same PVWatts simulation. | |
The totals agree, so why does it matter? Because a battery does not care about average sunshine — it cares about the distribution. A battery stores min(capacity, surplus), and min is a concave function, so by Jensen's inequality the average of the daily minimums is always less than the minimum of the average day. Modelling every day as average therefore overstates what a battery captures: it hides the bright days where surplus overflows the battery and is exported anyway, and the dull days where there is not enough to fill it.
Holding monthly energy exactly constant and adding only realistic day-to-day variation moves a typical battery's shifted energy by about 18%. That is not weather noise — it is a systematic bias, in a known direction, and it is the single largest accuracy difference between the free and account tiers. Everything else on this page is identical for both.
The hourly series is fetched server-side, verified against your Supabase session signature before the request is made, and never sent to your browser: it is 90 kB of data your browser has no use for, and only the model needs it.
3. Household load profiles
Hourly household consumption uses the NLR ResStock 2025.1 dataset (End-Use Load Profiles for the U.S. Building Stock, calibrated AMY-2018 simulations, distributed through the DOE Open Energy Data Initiative). For each of 49 states we reduce the state-level aggregate for single-family detached homes (the building class that hosts nearly all residential rooftop solar) to normalized month-by-hour load shapes, kept separately for weekdays and weekends, then scale the shape to your annual kWh. ResStock's published timeseries use Eastern Standard Time for every state; we shift each state to its local standard time before use so load, solar, and time-of-use rate windows line up. Alaska and Hawaii (absent from the state aggregates) fall back to a building-stock-weighted national average. The UI always cites which shape is in use (e.g., "NLR ResStock (CA single-family homes)").
Your actual meter data will differ from a state-typical shape. When your utility bill shows annual kWh, enter it directly — the studio warns you when a bill-derived estimate looks implausibly low, because an understated load makes batteries look worthless (there is no nighttime load to shift into) and an overstated one exaggerates savings.
4. Utility rates & tariffs
Rate prefills follow a hierarchy. Where we can identify your serving utility (one cached lookup against the NLR Utility Rates API), we use that utility's standard residential rate from our snapshot of the DOE/OpenEI Utility Rate Database (URDB) — the bulk download of utility-submitted tariffs, filtered to active residential rates. Because URDB's "default" flag is sparsely populated, we select each utility's representative rate by name scoring (preferring standard residential service, excluding EV/senior/low-income/closed riders). We also identify each utility's best opt-in time-of-use candidate — the active residential TOU rate with the largest defensible peak/off-peak spread — including its full 12-month × 24-hour weekday and weekend schedule grids. Where no utility match exists, we prefill the state residential average from the EIA's Electric Power Monthly, Table 5.6.A. Every prefiled rate shows its source and as-of date in the UI, and you can override any of them.
Where going solar moves you onto a different rate, your savings are valued on that rate instead. In California each of the three big utilities puts new residential solar customers on one time-of-use rate under its Solar Billing Plan — E-ELEC at PG&E, TOU-D-PRIME at SCE and EV-TOU-5 at SDG&E — so those addresses are valued hour by hour on that rate’s own filed schedule. Your current rate is still what turns your bill into kWh, and what you would keep paying without solar. A utility is added to this rule only once its rate for solar customers is confirmed from its own filings — see what this changes.
5. Whole-bill hourly valuation
Solar savings are not computed as generation × a flat rate. We simulate all 8,760 hours of a year: your load shape (§3) against your solar production shape, valued under your tariff's hourly rate grid (§4). Self-consumed energy is credited at the rate in effect that hour; exports are credited at your export-credit ratio × that hour's rate. This matters most under net-billing regimes like California's NEM 3.0 (CPUC D.22-12-056), where midday exports earn far less than retail — a flat model flatters solar-only systems and unfairly punishes batteries. Export-credit defaults per state are derived from the net-metering policy summaries in the DSIRE database (§9) — for example ~25% of retail for California net billing, 75% for Nevada — and are shown, sourced, and editable in the Advanced panel. Both the solar-only and solar-plus-battery cases run through the same hourly engine, so comparisons between them are apples-to-apples.
St = ( Eself × rretail + Eexport × rretail × c ) × (1 + e)t−1
A kWh is worth two different things depending on where it goes. Consumed on site it avoids the retail rate; exported it earns that rate times the export credit c. Both escalate at e (default 2.5%/yr). This split is why an oversized array pays less per panel under net billing.
6. Battery storage modeling
Battery choices are limited to a discrete catalog of real, UL 9540-listed residential systems shipping in 2026 (Enphase IQ Battery 5P, Tesla Powerwall 3 and expansion, FranklinWH aPower 2), priced at typical installed market prices before incentives (the residential market spans roughly $850–$1,700 per usable kWh installed; each catalog entry carries its own price note). We deliberately do not offer a continuous "battery size" slider — you can only buy hardware that exists.
A real model run: Denver, 8 kW array, one Powerwall 3, a June day. Solar overshoots the house from mid-morning, the surplus fills the battery by noon, and the battery carries the evening peak after sunset. This is the same hourly dispatch the Studio prices, not an illustration.
Battery bill value is computed by a deterministic daily-cycling dispatch simulation: charge from solar surplus, discharge into the highest-priced hours in which the home needs grid power, at 92% round-trip efficiency (typical for LFP AC-coupled systems) and 330 equivalent full cycles per year. Value is capped by physics — a battery cannot shift more than your overnight load actually absorbs. The "typical day" operation chart uses a companion chronological self-consumption simulation (state of charge carries across midnight, as shipped residential batteries behave in self-powered mode). Capacity fade is modeled at 2%/yr (consistent with LFP warranties guaranteeing ~70% at 10 years), with one replacement at year 16 costed at 60% of today's installed price.
Under full retail net metering the model will show a battery's bill value as slightly negative, and that is deliberate. An exported kWh already earns the retail rate there, so storing it to use later gains nothing and loses about 8% to round-trip efficiency. A battery is still worth buying in those states — for backup, which is what the studio says — but it should not be shown a saving it cannot earn.
Accuracy honesty: for flat-rate homes this heuristic lands within roughly ±10–15% of a full optimization; under time-of-use rates the spread can be ±30–60% for demand-charge-like situations. We surface both a current-rate and an opt-in TOU valuation when your utility files a TOU tariff, and we only advertise "TOU upside" when the modeled TOU value meaningfully exceeds the flat value. A full optimizer (NLR REopt) is integrated but dormant: this is an exploratory tool, and REopt's job latency and API quotas are not compatible with an interactive slider. If we ever produce quotable dispatch numbers, they will come from it.
7. Ownership financial model (cash / loan)
The cash and loan models compute year-by-year cash flows over your analysis horizon: hourly-valued bill savings (§5) escalated by your utility-inflation assumption and degraded by panel degradation (default 0.5%/yr — the median of roughly 2,000 measured degradation rates in Jordan & Kurtz, Photovoltaic Degradation Rates: An Analytical Review, NLR/Prog. Photovolt. 2013), minus maintenance at $34/kW/yr (NLR Annual Technology Baseline, residential PV fixed O&M, 2024 edition in 2022 dollars — editable, and the same figure the lease/PPA ledger charges a fund for the same roof), plus SREC income (§10) — prefilled where your state runs a program we carry, and credited either as a yearly stream or as an upfront lump sum depending on which kind of program it is — discounted at your chosen rate (default 5%) for NPV, with IRR, payback, and LCOE reported alongside. Loan mode adds amortized payments at your APR/term/down-payment, and an optional dealer fee: the charge a solar lender makes to the installer, which reaches you inside the loan price (Berkeley Lab finds 5–50% of the up-front price). It raises the price, deposit and principal on a loan and never on a cash purchase; leave it at 0 when the price you entered is already your loan quote.
NPV = ∑t=0..N CFt / (1 + r)t
IRR: the r that makes NPV = 0
Payback = (k − 1) + |Ck−1| / (Ck − Ck−1)
CF0 is the full price you pay, negative. Incentives arrive as an inflow in year one rather than being netted off the price, so the return is measured against the money actually at risk. C is cumulative cash flow and k the first year it turns positive, so payback is interpolated within that year rather than rounded to it.
Cost defaults are reference prices, not quotes. In California the installed-cost prefill is what homeowners actually paid: the 25th percentile of reported prices, meaning what the best-priced quarter of buyers paid, for your utility over the last twelve months of CA DG Stats interconnection records (currently June 2025 to May 2026: $3.10/W for PG&E, $3.00/W for SCE). We keep host-owned, solar-only systems on the Net Billing Tariff and leave out the new-home builder channel, since Title 24 solar priced into a new house by the builder's installer is not a price a homeowner can be quoted. SDG&E files a home's battery on a separate application and records the whole project's cost on each, so its solar-only records carry battery costs (a median $29,400 a project, against $12,900 at PG&E and SCE) and cannot be separated; San Diego homes are shown SCE's figure instead. Reported costs include dealer fees on loan-financed systems, so a cash buyer who shops around can pay less. The median of the same records is shown beside it as the typical price paid.
In New York the prefill is built the same way from NYSERDA's project records, which the state updates monthly: homeowner-owned residential systems completed in the last twelve months (currently September 2025 to August 2026), by utility. Con Edison runs well above the rest ($3.77/W against $2.99–3.25/W). NYSERDA's records do not say whether a project included a battery, so a New York figure can include one.
In seven more states (Arizona, Connecticut, Florida, New Mexico, Rhode Island, Texas and Wisconsin) it comes from Lawrence Berkeley National Laboratory's Tracking the Sun. Its newest release (July 2026) runs through 2025 installs, and we use only that year: each of these states has at least 100 priced, homeowner-owned, solar-only systems in 2025. States whose 2025 records are too thin, currently Colorado, Maryland, Minnesota and Oregon, use the model price below rather than an older year of paid prices.
We bring those figures forward. Tracking the Sun trails by a year or more, so each figure is adjusted by the change the two current records, California (PG&E and SCE) and New York, show from 2025 to their last twelve months, measured the same way at both ends and averaged across the two states. Right now that lowers the cheapest-quarter price 2% and the median 4%. The source line beside the input states the adjustment, and the factors are recomputed every time the prices are rebuilt. California and New York prices are already current and are not adjusted.
Everywhere else no usable record of paid prices exists. New Jersey and Illinois publish current installation records but without prices, Massachusetts' cost report stops in January 2025, and Connecticut's incentive-program data ended in 2022. There the prefill is the DOE Photovoltaics & Storage Cost Benchmark's Q1-2025 modeled market price for residential PV ($2.95/W national; its minimum sustainable price is $2.78; see PVSCB data), in 2024 dollars, adjusted per state by scaling its ~41% labor share with Bureau of Labor Statistics mean electrician wages (OES 47-2111). That wage adjustment is ours, not DOE's. The model price is not adjusted for price changes since 2024, for the reason in the note below, and the calculator labels it a model rather than a good price. For context it shows the U.S. median paid for 2025 installs from Tracking the Sun, lowered 4% the same way ($3.42/W).
How far to trust the model. In the nine states where we can check it against current paid prices, the cheapest quarter paid is within 10% of it in five: California, Connecticut, New York, Rhode Island and Wisconsin. Paid prices run 16% above it in Texas and 34% above it in New Mexico, and 11–15% below it in Florida and Arizona. Across the nine the typical gap is about 1%, so it is centred on what people pay today and we use it without a price-change adjustment. In any single state it can be well off, so treat it as a starting point and check it against real quotes.
| Where you live | Installed-price source | Data covers | Adjusted for price changes? |
|---|---|---|---|
| California | CA DG Stats paid prices, by utility (SDG&E homes use SCE's) | Last 12 months | No, already current |
| New York | NYSERDA paid prices, by utility | Last 12 months | No, already current |
| AZ, CT, FL, NM, RI, TX, WI | Tracking the Sun paid prices | 2025 installs | Yes: lowered 2% and 4% (median) |
| All other states | DOE modeled market price × state wages | Q1-2025 model, 2024 dollars | No; see “How far to trust the model” |
Every paid price is what homeowners reported, including dealer fees on financed systems, so a cash buyer who shops around can pay less. The figures and their sources appear next to the input.
Why is our price higher than EnergySage’s? EnergySage reports what installers quote shoppers on its marketplace: $2.52 a watt in California this month. We use what homeowners actually paid, from the state’s own records: $3.00–3.10 for the best-priced quarter of buyers. Quotes run lower because not every quote is signed, loan prices include dealer fees that quote figures typically leave out, and most California quotes include a battery whose built-in inverter is counted as battery cost. Berkeley Lab finds quote-based figures line up with roughly the cheapest fifth of real prices. A quote near $2.52 is a good one; most people pay more.
Federal credit status: the Section 25D residential clean-energy credit expired for expenditures after December 31, 2025. The studio's federal-credit default is therefore 0% for purchased systems; third-party-owned systems can still monetize the commercial Section 48E credit (§8). We would rather show you a smaller, correct number.
8. Third-party ownership (lease / PPA) — the dual-ledger model
The lease/PPA engine computes both sides of the transaction from identical inputs and lets you flip between them: the homeowner ledger (contract payments vs. hourly-valued bill offset) and the asset-owner ledger (the fund's actual economics). We built it this way because TPO customers are routinely told the corporate math "doesn't concern them." It does: the fund on your roof monetizes tax benefits you sign away.
Both ledgers also carry the renewable energy credits, on whichever side your contract assigns them — usually the fund's. In a state with an upfront program that is a large, front-loaded number for the asset owner and worth checking before you sign; see §10.
Who keeps the incentives
This is the part of a lease or PPA that is least obvious and most worth understanding: you do not own the system, so you do not claim what an owner claims. Three separate things move to the other side of the table.
- The federal credit. The household credit is not available to you on a third-party-owned system. The fund claims the commercial Section 48E credit instead, on an appraised fair market value rather than on cost. It is meant to reach you as a lower contract rate; it never reaches you as money.
- Renewable energy credits. Normally assigned to the fund. In a state with an upfront program this is large and front-loaded — the fund collects a fifteen-year lump sum inside the first three years while you pay for twenty-five.
- State and utility rebates. Most programs pay whoever owns the system, which on these contracts is the fund. This is a contract term rather than a law, so the studio lets you set it either way and defaults to the fund because that is the typical deal.
When the fund keeps a rebate we carry it at face value in its first year and leave its credit basis alone. That is deliberate: for a commercial owner these rebates are generally taxable income, and a taxable incentive does not reduce the basis the investment credit is computed on — the exclusion that makes a utility rebate tax-free applies to households, not to companies.
Until September 2026 the studio dropped these rebate dollars entirely on lease and PPA scenarios. Your side of the ledger was right — a household on a PPA genuinely receives none of it — but the fund's side was wrong too, so the money was counted by nobody. On a 6.4 kW system carrying a $1,920 utility rebate that understated the fund's return by more than three percentage points of IRR. It is the one number this page exists to expose, and the error ran in the direction that flattered the counterparty.
solve p such that NPVfund( p ) = 0
The lease or PPA price the fund would need to exactly break even, given its capital cost, the 48E credit, MACRS depreciation and its own discount rate. The gap between that break-even price and the price you were quoted is the margin in the deal, and it is the number the Asset owner tab shows.
- Consumer contract defaults: 2026 residential PPA rates typically run 15–21¢/kWh, pitched 10–30% below the local utility rate, with compounding annual escalators of 0–3.99% (2.9% is the market mode) — see Solar.com's PPA rate guide. Our defaults: 85% of your utility rate, 2.9% escalator, $55/mo battery add-on (or a +4¢/kWh hybrid uplift), all editable.
- Section 48E ITC: fund-owned residential systems claim the tech-neutral commercial credit (26 U.S.C. §48E): 30% base for systems under 1 MWac (exempt from prevailing-wage requirements), stackable with +10% domestic-content, +10% energy-community, and +10% low-income-community adders — the last is a capacity-capped allocation program, not an entitlement, and the UI labels it as such.
- FMV step-up: the fund's credit basis is an appraised fair market value, not the build cost — market-standard multipliers run ~1.1–1.35× (default 1.25×). Aggressive step-ups have drawn IRS challenge; see SEIA's cost-basis guidance and the Treasury's 1603 cost-basis evaluation memo.
- MACRS: 5-year accelerated depreciation (200% declining balance, half-year convention: 20 / 32 / 19.2 / 11.52 / 11.52 / 5.76%) per IRS Publication 946, on a basis reduced by half the ITC claimed (26 U.S.C. §50(c)), at the 21% federal corporate rate.
- Buy rate & margin spread: we solve for the minimum customer rate at which the fund's NPV is zero at its target discount (default 7%, the typical unlevered return for residential portfolios in appraisal DCF practice — see tax-equity structure overviews). Everything between that "buy rate" and your quoted rate is margin available for dealer fees and commissions — and we display it, because knowing the floor is negotiating leverage.
- Consumer protections modeled: lease production guarantees (default: 90% of modeled year-1 output, degrading at the contract's assumed 0.5%/yr) generate true-up credits at the utility rate when modeled output underruns; battery capacity guarantees (70% floor) prorate the battery fee. Prepaid contracts convert the payment stream to a single upfront sum discounted at the fund's rate. Buyout estimates for home resale are the value of remaining payments at the fund's discount rate — contracts often charge the greater of this or appraised value.
9. Incentive programs
The "Programs at this address" panel draws from SIA's snapshot of the DSIRE database (N.C. Clean Energy
Technology Center, CC-BY-SA 4.0), refreshed monthly and filtered to currently active programs
only — expired and unpublished programs are excluded rather than shown with fine print.
DSIRE program amounts are never auto-applied — you review each program's terms and enter what you qualify for. Two fields are an exception, and the studio labels them where they appear: State incentive and Utility incentive are prefilled from the Google Solar API's own financialAnalyses for the address, taking the largest figure across the bill scenarios Google models. That estimate is not matched to any named program and Google's incentive data is coarser and often further behind than DSIRE, so treat it as a starting figure to replace, not a number you have qualified for.
California battery buyers are pointed to SGIP, whose rebates vary by utility and equity eligibility.
Renewable energy credits are a different animal from a rebate and are handled
separately in §10.
Sorting the listings
Reading a DSIRE listing and working out whether it is money is genuinely hard, and it is not a homeowner's job. A typical address returns a mix in which most entries are not cash at all: personal and corporate subsidy exclusions, property tax assessments, programmes aimed at commercial systems or at the installer rather than you. The "See which of these apply" button reads the listings for your address and sorts them into four buckets:
- Cash — the listing states a dollar amount, or a per-watt rate we can apply to your system size. This is the only bucket that produces a number.
- Tax break — a credit, deduction, exemption or exclusion. These change what is taxed. They are real, and they are not money toward the system, so nothing from here goes in a rebate field.
- Ask them — a real cash programme whose listing does not state an amount, or states it as "varies" or "subject to available funding".
- Not for you — commercial-only, or aimed at the developer.
This never fills a field in for you, by design. Incentive dollars drive the payback and NPV this whole site exists to give you honestly, so a figure inferred rather than read would be the same behaviour as a salesperson padding a proposal. Every amount is shown with the line from the listing it came from, plus whatever eligibility test we cannot check on your behalf, and it only reaches the calculator when you press the button next to it. Amounts add to what is already in the field rather than replacing it, since two programmes can both be real.
Two rules sit above the reader and cannot be talked out of. DSIRE labels every programme with a type from a fixed vocabulary, so anything typed as a tax credit, deduction, exemption, assessment or depreciation is marked a tax break before the reader's answer is even looked at — a tax exemption can never be shown to you as cash. The same applies to loans, bonds, PACE and leasing programmes: money you repay is not an incentive, whatever the terms.
Three further checks run before any figure is offered: it must carry a supporting quote from the listing, it must name which field it belongs in, and it must be positive and smaller than the installed cost of your system. A figure failing any of them is downgraded to "Ask them" rather than shown — the programme is still real, we just will not put a number on it. Programme text is read from our own database rather than from your browser, so nothing on the page can change what the reader is asked. If the reader is ever unavailable — including when our own API credit runs out — the button removes itself rather than sitting there failing, and every other part of the calculator carries on unaffected.
LCOE = (Cnet + ∑t=1..N Ot / (1 + r)t) / ∑t=1..N Pt / (1 + r)t
Discounted lifetime costs over discounted lifetime energy, which is NLR's definition. Cnet is the cost after incentives, Ot is that year's maintenance, and battery replacement is added in the year it falls. Discounting the kWh as well as the dollars is what makes the result comparable to a utility rate. A capital-only version of this — which is what we published until September 2026 — understates cost per kWh and cannot be compared with any published LCOE.
10. SREC programs
A Solar Renewable Energy Credit is the "green" attribute of your generation, sold separately from the electricity itself. One SREC is one megawatt-hour — 1,000 kWh. Most states have no residential SREC market at all, and where that is the case the studio leaves the field at zero rather than inviting you to guess.
Two structurally different things share the name, and modeling them the same way gets one of them badly wrong:
| Annual market | Upfront contract | |
|---|---|---|
| Where | NJ, MA, MD, OH, PA, DC | Illinois |
| How it pays | You earn a certificate per MWh and sell it that year at whatever the market pays | A state agency fixes the price, an aggregator contracts your whole projected output as one lump sum |
| When the money arrives | As you generate it, year after year | Over the first few years, then nothing — even though the certificates keep being produced |
| Term we model | 10 years | The contract's own term |
The 10-year figure for market states is a forecast limit, not a program rule: SREC prices are set by supply and demand against a state's renewable portfolio standard, and nobody can honestly project one two decades out. A contracted program has no such problem, because its term is written into the contract.
Illinois Shines / Adjustable Block Program
Illinois is the upfront case, and it is the one state whose prices SIA currently carries. The Illinois Power Agency sets a price per certificate by system size: $60–75 per SREC under 10 kW, and $65–70 from 10 to 25 kW. Both bands centre on the same number, so the studio prefills a single $67.50/MWh rather than implying a precision the published bands do not support. Above 25 kW a different block price applies and the studio says so instead of extending the residential figure.
The contract is priced once, on 15 years of projected output including panel degradation, and paid out over the first few years. So the amount you receive in year two depends on production the model expects in year fourteen — which is why the whole sum has to be computed before the cash-flow loop runs rather than inside it.
SREC lump sum = (∑t=1..15 P1(1 − d)t−1) / 1000 × price × (1 − fee)
Fifteen years of degraded production converted to megawatt-hours, priced at the IPA rate, less any aggregator fee. P1 is year-one AC production, d the annual degradation rate.
The studio then spreads that sum 50% / 25% / 25% across the first three years and credits nothing thereafter. Two honesty notes about that schedule:
- The first payment is not immediate. Expect roughly 9–12 months after your system passes final utility inspection, while the state and your installer's aggregator process the block paperwork.
- The split is a convention, not a rule. Aggregator contracts commonly pay about half in the first year and the remainder over the next couple, but the exact schedule is a term of your contract. It lives as a single constant in our code so it can be corrected in one place.
Aggregators and brokers usually deduct an application or administrative fee from the gross state payout. We default that fee to zero because no published source gives a figure we could defend, which means the prefilled lump sum is a gross number and your net will be somewhat lower. The fee is an input you can set. Read your aggregator agreement for it — it is the single easiest thing to miss in an Illinois solar deal.
Who owns the certificates
Under a lease or PPA the SRECs usually belong to the fund, not to you, and the dual-ledger model (§8) reflects that on whichever side the contract assigns them. This matters far more in Illinois than in a market state: a fund collects the entire lump sum inside the first three years while you keep paying for twenty-five. On a typical 8.5 kW Illinois system that is worth about nine and a half thousand dollars to the fund, and it moves the modeled fund IRR by roughly ten percentage points. If a lease or PPA is on your table in Illinois, the "green credits they collect" line on the asset-owner ledger is the number to look at.
11. Building & electrical code context
The "Codes at this address" card shows each state's adopted editions of the NEC (NFPA 70), IRC, and IFC, compiled from the ICC code-adoption resources and NEC adoption trackers, refreshed periodically (the as-of date is shown). From the editions we derive plain-English requirements: rapid shutdown (NEC 690.12, 2017+), the NEC 705.12 "120% rule" back-feed check (we compute your specific limit from your main-panel rating and flag designs that exceed it, including AC-coupled battery output), roof fire-access pathways (IRC R324/IFC, including the stricter setbacks when panels exceed one-third of the roof), and energy-storage rules (NEC 706, UL 9540 listing, IRC R328 placement limits) when a battery is selected. This is educational context about statewide minimums — local amendments apply, and your installer confirms requirements with the authority having jurisdiction.
12. Neighborhood adoption data
Where shown, "solar homes near you" counts come from a cascade of public records: live permit data where available (e.g., Austin's open permit dataset), state interconnection aggregates (e.g., California DG Stats), and otherwise the zip-level baseline from LBL's Tracking the Sun. Dated sources are phrased honestly ("at least N as of YEAR"), and when no source reports a meaningful count we show nothing at all rather than a zero.
13. Data refresh cadence
| Data | Source | Refresh |
|---|---|---|
| Roof model & irradiance | Google Solar API | Live per request |
| Production simulation | NLR PVWatts v8 (NSRDB PSM V3 TMY-2020 weather) | Live per request — hourly for members, monthly otherwise |
| Load shapes | NLR ResStock state aggregates | Yearly (new release) |
| Utility tariffs | OpenEI URDB bulk snapshot | ~Quarterly |
| Export / buy-back rates | OpenEI URDB filed sell rates, plus state policy table | Monthly |
| State average rates | EIA Electric Power Monthly 5.6.A | ~Monthly |
| Incentive programs | DSIRE (NC CETC) | Monthly |
| SREC program prices | State agency block prices (Illinois Power Agency) + curated state table | Per program year, checked quarterly |
| Installed-cost defaults | Paid prices: CA DG Stats (California), NYSERDA (New York), LBL Tracking the Sun (ten states), with price-change adjustments; DOE PVSCB × BLS wages elsewhere | Checked automatically every month: new CA DG Stats and NYSERDA data are pulled in as they publish (about three months and a few weeks behind, respectively), a new Tracking the Sun release as soon as Berkeley Lab links it (yearly, most recently July 2026), and the price-change adjustments are recomputed each time. A new DOE benchmark edition (yearly) is flagged and applied by hand. |
| Code adoption | ICC / NEC trackers | ~Quarterly (NEC), yearly (IRC/IFC) |
| Battery catalog & TPO market rates | 2026 installer/market surveys | As market moves |
| Neighborhood adoption | LBL TTS / CA DG Stats / city permits | Yearly / quarterly / live |
14. Reading a quote you were given
What it is. On the Roof & Layout step you can paste a solar proposal — an email, a PDF's text, or a forum post — and we fill in the studio's inputs from it: system size, panel count, price, cost per watt, financing type, escalator, contract or loan term, PPA rate, APR and down payment, whether the deal is a pre-paid lease, any battery, the incentives your quote claims — federal tax credit, SREC rate, and state or utility rebates — and the current bill and annual usage it assumes for your home, since an installer's savings claim rests on those. Storage is matched to the closest model we price by usable capacity; if your quote lists a battery we don't carry, we say so and leave the choice to you rather than substituting a different one. Two things we never assume: a tax credit you were not offered, and a tax credit treated as a discount. The studio starts from a 0% federal credit, and only your own paperwork changes that.
Why it exists. The slowest part of checking a quote is re-typing it into a dozen fields, and the fields that matter most on a lease — the pre-paid amount and the escalator — are the ones people are least likely to transcribe correctly. Getting them right is what lets the asset-owner ledger (§8) show the tax credits and margin the company earns on your roof, which is the number a quote never states.
How it works, and what it will not do. The pasted text is sent to Anthropic's Claude Haiku, which returns structured fields against a fixed schema. It is told to return nothing rather than guess: any figure not clearly stated comes back empty. Two prices are read as a list price and a discounted one, and the amount you would actually pay is the one we use.
Nothing is applied automatically. We show you exactly what was read, including a plain-English note on anything the reader was unsure about, and no input changes until you press Use these numbers. This is deliberate: a misread price would produce a confident, wrong verdict, which is the failure this whole tool exists to prevent. You can always ignore it and type the figures yourself.
Your text is not stored. It is sent to be interpreted and then discarded — no copy is kept on our servers, and it is not attached to your account. A quote often carries your name, address and phone number; you are welcome to delete those lines before pasting, and nothing about the reading depends on them.
15. Comparing solar to other investments
When buying the system outright clears our "good fit" bar, we show its internal rate of return next to a few long-run benchmarks. The IRR is the one our own model produces for your address and inputs, from the same cash-flow series behind the payback figure, not a marketing number.
What the percentage is a return on. The full price you lay out, not the price after incentives. The series starts with the gross cost as money leaving your pocket; the federal credit and any rebates arrive as an inflow in year one, exactly as they do in reality, and each later year adds that year's bill savings and SREC income less maintenance. Quoting the return against the post-incentive cost instead would inflate it, because the credit would be silently removed from the money at risk while still being counted as a benefit.
The benchmarks are deliberately long-run averages rather than current yields, because a page that quotes this year's rate is wrong by next year: US stocks at about 10%/yr (S&P 500 total return, 1928–2024), 10-year Treasuries at about 4.6%/yr over the same span, US home prices at roughly 4.5%/yr nominal (Case-Shiller, and nearer 1%/yr once you subtract inflation), and cash savings at about 4%, which floats with rates.
Why we gross the solar figure up. Solar pays you by cancelling a bill instead of paying income, so there is generally no federal tax on it. Comparing an untaxed return with a taxed one understates solar, so we also show what a taxable holding would have to earn to match it, stated at a 22% bracket. Your bracket is your own; the assumption is on the page rather than buried.
What this comparison is not. These are historical averages for orientation, not forecasts, and nothing here is investment advice. Averages also hide the path: a 10% average included halving twice since 2000. Solar has its own risks, which we list beside the numbers rather than in a footnote. It is illiquid and tied to the house, it assumes utility rates keep rising and that today's export rules hold, and inverters typically need replacing around year 12–15.
We only show this block when owning the system scores well. A strong lease or PPA says nothing about solar as an investment for you, because the asset is someone else's, so a good PPA will highlight the installer button without ever printing this comparison.
16. Export and buy-back rates
What your utility pays for power you send back is often the difference between solar paying and not paying, so we try to use a filed number rather than a guess. Where a utility publishes an export rate in the OpenEI Utility Rate Database, we use it directly and say so on the field. That is currently about 4% of utilities, and it takes precedence over any statewide figure for the same reason your utility's own retail rate does: it is the tariff you are actually on.
Everywhere else we fall back to a state-level policy estimate, clearly labelled as an estimate. Most states still mandate full retail net metering for residential customers; the ones that do not are listed individually, with the reason.
Texas is a special case and worth calling out. There is no statewide net-metering mandate, and in the deregulated part of the state your export credit is not a property of your address at all — it is a term of the retail plan you signed. Two identical houses on one street can be paid very differently. Some standard plans credit exports at nothing; some solar buy-back plans pay close to retail. We default low and say so, because the honest answer is that you should check your own plan, and that switching plans is a real option worth money.
Both sources are refreshed monthly.
Value = ∑t Bt / (1 + r)t / ∑t Pt / (1 + r)t
What a kWh is worth, levelized the same way LCOE levelizes what it costs, so the two can honestly be set against each other. Bt is that year's benefit — the power it offsets plus any certificates — taken before maintenance, because maintenance already sits on the cost side of LCOE and charging for it twice would understate the result. Value above cost means the same thing as a positive net present value, and a test asserts those two verdicts never disagree.
Seeing the simulation for yourself
Everything on this page describes the method. The Simulation detail panel at the foot of the Financials step shows the method as it ran for your roof: the resource data and weather dataset, the system specification PVWatts was given, a per-roof-plane breakdown of output, the monthly table with specific yield, performance metrics, and the load-shape and tariff sources that sit outside PVWatts entirely.
It is collapsed by default and renders only when opened, so it costs nothing to anyone who does not want it. Open the studio, model a roof, and it is the last panel on the Financials step.
Two downloads sit at the bottom. Everyone gets the monthly series as CSV. Account holders — the only people for whom it exists — get the raw 8,760-hour simulation, laid out the way PVWatts lays out its own hourly export so the two can be compared line for line:
| Columns | What they are |
|---|---|
month, day, hour |
8,760 rows from Jan 1 00:00, local standard time |
beam_irradiance_w_m2, diffuse_irradiance_w_m2,
plane_of_array_irradiance_w_m2 |
The solar resource that hour, from NSRDB TMY weather |
ambient_temp_c, wind_speed_m_s,
cell_temp_c |
Conditions, and the module temperature they produce — which is why a hot still afternoon yields less than a cool breezy one |
dc_output_w, ac_output_w,
ac_output_kwh |
Array output before and after the inverter |
home_load_kwh, battery_charge_kwh,
battery_discharge_kwh,
battery_state_of_charge_pct,
grid_import_kwh, grid_export_kwh |
Only when the design carries a battery. Every charge and discharge decision, hour by hour, with what was left to buy or sell. The chart in the studio shows twelve averaged days; this is the 8,760 those averages came from |
A commented header block records the location, system specification, weather dataset and — where relevant — the battery and its dispatch mode, so a downloaded file still explains itself a year later. The point of handing over the raw numbers is that the arithmetic on this page can be checked rather than taken on trust.
17. How these numbers are checked
Describing a method is only half of transparency. The other half is saying how we know the code does what the description claims, because until September 2026 this site had no automated tests at all and every number was verified by having looked right when it was written. There is now a suite covering the purchase model, the SREC engine and the lease/PPA dual ledger, of three deliberate kinds:
- Identity checks — relationships that must hold whatever the inputs are. The cumulative chart must be the running sum of the yearly figures; net present value at a zero discount rate must equal plain lifetime savings; a renewable energy certificate must be collected by exactly one side of a lease. These catch a regression without needing any outside authority.
- Closed-form checks — the model against the textbook formula, recomputed independently in the test. Loan payments against the standard annuity formula, NPV against a hand-rolled discounting, LCOE against the discounted-cost-over-discounted-energy definition, the SREC lump sum against its own contract arithmetic. If the two disagree, one is wrong and the disagreement is settleable rather than a matter of opinion.
- Literature checks — defaults pinned to a citable source, with the source named in the test itself, so a default cannot be changed without the justification for it also changing.
Writing them found nine defects immediately, all now fixed and all listed here rather than quietly corrected: "What a unit is worth here" divided year-one savings by year-one output, so wherever a one-off payment lands in the first year it was amplified — an Illinois roof reported a kWh as worth 66¢ against a 20.5¢ retail rate, because a fifteen-year certificate contract is paid in the first three years. It is now levelized over the full horizon exactly as LCOE is, which is what makes the two comparable in the first place. The same mistake had a second home: the monthly saving on the summary cards was year-one savings divided by twelve, so the same certificate lump sum inflated the most persuasive number on the page by 3.5x. Both now use figures with one-off money taken out. Auditing the battery model for the same pattern found two more: the value of a stored kWh was computed hour by hour on the way out but at the annual average rate on the way in, which mattered because surplus arrives at midday when a time-of-use rate is cheapest — the battery was charged 1.6x too much for kWh it never gave up, halving its apparent worth on a Californian tariff; and its net value was clamped at zero while the kWh it shifted were not, so under full retail net metering the studio showed thousands of kWh moving for exactly nothing, when the truth is a small loss to round-trip efficiency; and shading was measured against the sunniest point on the same roof, so a uniformly shaded house scored as unshaded and a differently-oriented plane was charged for orientation PVWatts had already modelled (§1); state and utility rebates were dropped from both sides of the lease/PPA ledger, so the fund's return was understated (§8) — the tests had an "a certificate lands on exactly one side" check for SRECs and no equivalent for rebates, which is exactly how a rebate landing on neither side looked like working code; LCOE omitted maintenance, so cost per kWh was understated by around 12% on a typical system and was not comparable to a published LCOE; maintenance defaulted to zero for an owner while the lease ledger charged a fund $15/kW/yr for the identical roof, which flattered ownership in every side-by-side comparison; and the "annual savings" figure was quoted before maintenance while the cumulative chart subtracted it, so the same year appeared as two different numbers on one page.
This is worth stating plainly: a test suite proves the code matches the method described on this page. It cannot prove the method is right for your roof. The limitations below are the honest boundary of what any of this can tell you, and they have not changed because the tests exist.
18. Known limitations
- Panel layouts are theoretical maximums from aerial imagery; engineered layouts after site survey typically fit fewer panels.
- Load shapes are state-typical, not your meter. Direct annual-kWh entry improves battery math substantially; interval-meter import is not yet supported. Note this is the remaining half of the hourly picture: with an account the solar side is real hourly weather, but the load side is still a state archetype for both tiers.
- Tariff data is a snapshot; utilities file changes continuously. Verify the current rate on your bill.
- Battery valuation is a heuristic with the accuracy bands stated in §6, not an optimized dispatch guarantee.
- TPO corporate figures model a typical fund structure; an actual fund's leverage, tax appetite, and appraisals will differ. The buy rate is a modeling floor, not an offer.
- Incentive eligibility is determined by program administrators, not by SIA. The programme sorter (§9) reads published listings; it cannot check your income, your utility territory, or whether a capacity block still has funding left.
- The upfront SREC payout schedule (50/25/25 over three years, §10) is a common aggregator convention, not a published rule — your own contract governs. Aggregator fees default to zero because no source states a defensible figure, so a prefilled lump sum is gross and your net will be lower.
- SREC prices are carried for Illinois only. In the annual-market states the field starts at zero and you enter your own rate; a 10-year credit horizon is a forecast limit, and prices in those markets can move sharply in either direction.
- The utility-rate escalation default of 2.5%/yr is a planning assumption, not a forecast. US residential electricity prices have risen at roughly that pace over recent decades, but the figure is an input for a reason: over 25 years it moves the answer more than almost anything else on the page, so try it high and low before trusting a single result.
- Where your utility does not resolve against our tariff snapshot, the model falls back to valuing self-consumption against your whole annual usage rather than hour by hour. Under full retail net metering that makes no difference; under net billing it is optimistic, and the hourly valuation in §5 is the version to trust.
- Nothing here is engineering, tax, or investment advice. Estimates are informational only, and are not an installation quote.
Attribution & licenses
DSIRE data © N.C. Clean Energy Technology Center, used under CC-BY-SA 4.0. ResStock, PVWatts®, and REopt are products of the National Laboratory of the Rockies and the U.S. Department of Energy. Tracking the Sun is a product of Lawrence Berkeley National Laboratory. URDB is maintained by NLR for the DOE. Google Solar API imagery and derived data © Google. PVWatts® is a registered trademark. Their appearance here is attribution, not endorsement of SIA.