Original dataset methodology · updated August 27, 2026

Real Solar Prices Methodology

How Home Solar Atlas turns reviewed homeowner proposals into privacy-protected solar price statistics without presenting a small voluntary sample as a complete market index.

1. What the dataset contains

Real Solar Prices is built from voluntarily submitted residential solar proposals. A submission can include state, ZIP code, system size, solar-only cash-equivalent price, battery price, financing type, financing terms, quoted annual production, equipment details, installer company and proposal date.

Name, email and street address are not required for quote contribution. Every homeowner submission enters the database as pending and does not affect public statistics until reviewed.

2. Solar-only price normalization

The core comparison metric is solar-only dollars per watt of DC system capacity:

Solar $/W = solar-only cash-equivalent price ÷ (DC system size in kW × 1,000)

Battery, roofing, main-panel replacement and other separately itemized non-solar work should not be included in the solar-only numerator. This makes systems of different sizes easier to compare and reduces distortion from unrelated project scope.

3. Why median is the primary statistic

Home Solar Atlas uses the median $/W as the headline statistic for its own homeowner sample. The median is the middle observation after prices are ordered and is less sensitive than an arithmetic average to one unusually expensive or unusually cheap proposal.

We also calculate the 25th and 75th percentiles. The interval between them is displayed as the middle 50% of observed quotes. Average $/W remains visible as a secondary descriptive statistic.

4. Minimum publication thresholds

A state does not receive public Home Solar Atlas price statistics or individual quote examples until at least 3 approved quotes are available for that state.

System-size groups, financing groups and quarterly trend rows require at least 5 approved quotes in the specific segment.

Installer-level price rows also require at least 5 approved quotes associated with the same normalized installer name. These observations describe submitted prices only; they are not installer ratings, quality scores or endorsements.

Three-digit ZIP area rows require at least 7 approved quotes in the same ZIP3 area. Full five-digit ZIP codes are never returned by the public local-price endpoint. A hidden segment is not interpreted as zero activity; it means the minimum public sample has not been reached.

5. Sample maturity

Sample maturity is a simple record-count label used to discourage overconfidence in a small voluntary dataset:

  • Emerging: 3-4 approved records.
  • Early: 5-9 approved records.
  • Developing: 10-24 approved records.
  • Moderate: 25-49 approved records.
  • Strong: 50 or more approved records.

These labels describe sample size only. They are not statistical confidence intervals and do not prove that the sample represents every installer, roof type, financing structure or homeowner in the market.

6. System-size and financing segments

When the five-record threshold is reached, system-size statistics are grouped into four practical residential buckets: under 6 kW, 6-9.9 kW, 10-14.9 kW and 15+ kW. Financing slices use the submitted cash, loan, lease, PPA or other classification.

The $/W statistic still uses the submitted solar-only cash-equivalent price. Financing classification is therefore context about the proposal rather than a replacement for cash-equivalent normalization.

7. Local installer and ZIP3 intelligence

Local price intelligence is published inside state price pages only after its stricter threshold is reached. Installer groups are formed from normalized installer names, while ZIP3 groups use only the first three digits of the stored ZIP code.

Each published local row shows count, median $/W, the 25th-75th percentile range and median system size. ZIP3 rows can also report the count of named installers represented in that area without revealing individual homeowner ZIP codes.

We do not create indexable installer or ZIP3 landing pages merely because a possible segment exists. Separate search pages should be opened only when the underlying sample is sufficiently useful to support non-thin, differentiated content.

8. Time series

Quarterly rows use the proposal date when supplied. If a proposal date is missing, the submission date is used. A quarter remains hidden until at least five approved records fall in that period.

Older quotes can be useful for historical context but should not automatically be treated as current market pricing. Public pages display sample coverage dates so users can see how old the underlying observations are.

9. Human moderation and quality checks

Every homeowner quote starts as pending. The private moderation console shows the submitted fields and automated review flags before an administrator approves or rejects the record.

Quality flags can highlight unusually high or low $/W versus the current external benchmark, atypical residential system size, aggressive or unusually low production per installed kW, inconsistent battery values, incomplete financing details, missing equipment details and questionable proposal dates. A flag does not automatically mean a quote is invalid; it tells the moderator what deserves verification.

Exact duplicate fingerprints submitted within 30 days are not inserted again, reducing the risk that accidental repeat submissions overweight a market sample. ZIP and selected state are also cross-checked when the ZIP lookup service is available.

10. Privacy protections

ZIP code is stored for quality control and geographic validation but is not returned in the public quote API. Public example records show the proposal month rather than the exact day. Solar cash price is rounded to the nearest $100, system size to one decimal place and quoted production to the nearest 100 kWh/year.

Public examples do not display homeowner contact information or street address. Local ZIP intelligence exposes only a three-digit ZIP prefix after the seven-record threshold is reached. State, segment and local thresholds provide additional protection against publishing isolated submissions.

11. External marketplace benchmarks

Home Solar Atlas homeowner statistics and external marketplace benchmarks are intentionally kept separate. A state page can show an external comparison figure even before the Home Solar Atlas sample reaches publication threshold, but the page labels that number as an external benchmark rather than original Home Solar Atlas data.

The Quote Analyzer can compare a proposal with both sources once a state has a publishable Home Solar Atlas sample: the external marketplace benchmark and the median of approved anonymized homeowner quotes.

12. Important limitations

  • The dataset is voluntary and can have selection bias.
  • A large record count does not guarantee balanced coverage across installers, ZIP areas, roof types or financing structures.
  • Installer names are user-submitted and can contain naming variations despite normalization.
  • Installer-level statistics describe observed proposal pricing only and are not reviews or ratings.
  • Installer-provided production forecasts can use different shading, degradation and weather assumptions.
  • Cash-equivalent fields depend partly on the submitter correctly separating battery and non-solar scope.
  • Market prices change over time, so historical observations should not be interpreted as a current quote guarantee.
  • Home Solar Atlas statistics are descriptive data, not an appraisal, installer rating or promise that a particular proposal is fair.

13. Corrections and methodology changes

We document material methodology changes rather than silently changing the meaning of a published metric. Records can be moved back to pending or rejected if later review identifies a quality problem. Review timestamps are retained in the internal dataset.