A transparent, primary-source method for scoring utility-scale solar permitting risk across all 3,143 U.S. counties — what we measure, how it's weighted, and how a 0–100 score becomes a letter grade.
Every county receives a risk score from 0 to 100, where lower is better for solar developers. It's a weighted blend of six signals — all drawn from our own primary-sourced database — and the weights below sum to 100%. In the app's Map controls, every one of these is a slider you can reweight to your own priorities.
The August 2026 review corrected two places where the model was penalizing counties for things that aren't evidence of siting difficulty. Both changes can only lower a risk score, never raise one.
The Saturation factor counts utility-scale solar activity in a county. It already ignored withdrawn and cancelled projects, but it still counted interconnection-queue rows carrying no project name and no capacity — filings that tell us a request exists at a point on the grid and nothing else. Those were 14% of everything counted, all from one queue, and they dominated the signal in several states: they made up 97–100% of the saturation input in Minnesota, Wisconsin, Mississippi, Iowa, Michigan, Arkansas and Louisiana. A row now needs a name or a capacity to count — either one alone is enough, so a named project with undisclosed capacity still counts, and so does an unnamed filing with real megawatts.
The State RPS factor treated "this state has no binding Renewable Portfolio Standard" as near-maximum risk. That was wrong: plenty of states without an RPS build utility-scale solar on utility procurement instead, and the absence of a state mandate is not a local siting obstacle. Measured across every scored county, this one factor was deciding the letter grade for 949 of them, concentrated in the South and Plains. A state with no binding standard now scores the same as one with a weak standard — neutral, not penalized. A binding standard still earns a genuine tailwind, so states like Illinois and Virginia keep that credit, and the State policy badge still reports the real posture. Only its effect on the score changed.
Still open: an RPS that has already been achieved (Texas met its 5,880 MW standard in 2009) or weakened since passage drives no new procurement, but is currently scored the same as any other non-binding posture. Grading on remaining unmet obligation requires attainment data we only partly hold.
Organized community opposition used to sit beside the grade as context only. It's now 30% of the score — the single largest weight — because verified local resistance is what most often stalls or defeats a utility-scale project. It's computed from our source-linked opposition dataset and weighted by how recent and active each signal is.
The composite is now 30% Opposition + 24% Compliance + 16% Trajectory + 12% Saturation + 10% State RPS + 8% Uncertainty. "Data uncertainty" — a measure of how complete our data is, not of real-world risk — dropped from 20% to a light 8% and is now surfaced mainly as a data-confidence label. State RPS posture, previously a context badge only, contributes a modest 10%. All six are tunable sliders in the app's Map controls.
Every sub-score comes from primary-sourced data. When a county lacks a signal (most commonly a confirmed-opposition record), that factor is dropped and the remaining weights are rescaled rather than filled with a zero — so an absence of evidence is never treated as evidence of calm.
Compliance still carries a permit-record adjustment from actual approvals and denials, and the composite is read from a single config file so weights can be re-tuned and history re-scored without touching code.
We compute each county's approval rate from recorded utility-scale permit decisions, adding a penalty below 30% or a small bonus above 80%. For counties with sparse history (0–2 decisions), the observed rate is blended with the state's base rate using Beta-Binomial smoothing — every county starts from its state average and moves toward its own record as decisions accumulate. Each output carries a confidence level: high (≥3 decisions), moderate (1–2), or preliminary (0, shown with a "Preliminary score" badge). It moves grades toward actual board behavior without ever treating a quiet county as if it had rejected solar.
Any county with an active utility-scale solar moratorium is scored at the worst-possible value (100, Grade F) regardless of its sub-scores. An active moratorium means the site is functionally closed — the underlying numbers don't override that.
Shown next to the grade but kept separate from the score, so a weak county in a strong-policy state still reads as weak. State policy (Favorable / Mixed / Hostile) reads the state's RPS framework. Site constraints (Light / Moderate / Heavy) flags conservation easements, prime farmland, federal-land overlays, and FEMA floodplain — and only appears when we have constraint data; no badge means unknown, not unconstrained.
How the factors combine into a score of 61.5 (Grade D) for Mecklenburg County, Virginia (FIPS 51117). Every number on this page is read from that county's live record when the page is built — if its score moves, this example moves with it.
All six factors are on record for this county, so nothing renormalises here — each contributes its full weight.
Renormalisation is not an edge case: 1,968 of 3,143 counties currently have no confirmed opposition signal on record and are scored on their remaining factors. A county is never penalised for a gap in our data, and never credited for one either.
Monitoring and discovery sources. Every published data point is verified against the primary government document before it ships.
Active moratoria are updated within 24 hours of filing. Ordinance changes are typically reflected within one week. Full scoring-model reviews run quarterly, and 8 quarters of score history are available on National and higher plans.
See how your target counties score — every grade is sourced to the underlying primary document.