Methodology · Model v3.0

How every U.S. county is graded

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.

Updated July 2026 · Reviewed quarterly · When the model changes, every historical score is recalculated so trends stay comparable.
0–100 scoreLower is better — a weighted blend of six signals from our own database.
A–F gradeDecision-useful bands, from 0–30 (A) to 67+ (F).
Primary-sourcedEvery published figure verified against the government document.
Quarterly review8 quarters of score history on National & higher plans.

The composite score

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.

30% Opposition
24% Compliance
16% Trajectory
12% Saturation
10% RPS
8% Uncertainty
30%
Community Opposition
Organized local resistance — groups, petitions, and active campaigns — from our source-linked opposition dataset, weighted by how recent and active each signal is. The single heaviest factor: opposition is what most often stalls or kills a project.
24%
Compliance Stringency
Setbacks, acreage caps, SUP requirements, and bans — plus a permit-record adjustment from actual approvals and denials.
16%
Regulatory Trajectory
The direction of change over the past 12 months — tightening, stable, or loosening.
12%
Market Saturation
Installed MW, land coverage, and developer density relative to county size.
10%
State RPS
The state's renewable-portfolio posture for solar — binding target, solar carve-out, community-solar program. Weaker policy support reads as higher risk.
8%
Data Uncertainty
Our confidence in the data for this county. A deliberately light weight, kept only as a tunable lever — it never dominates a grade.
Missing a signal? We renormalize — we never fake a zero. Opposition data is geo-confirmed and source-linked, so it exists for the counties where we've verified it (about a sixth of all counties carry a confirmed signal today). Where a county has no confirmed opposition — or any other missing factor — that factor is dropped and the remaining weights are rescaled, so a gap neither helps nor hurts the score. Each county also carries a data-confidence label reflecting how many signals were present.

Grade scale

Lower number = lower permitting risk. A score of 0 is the best possible outcome (Grade A); above 66 is Grade F. This is the opposite of academic grading — the lower the score, the more permitting-friendly the county.
A
0–30 · Low
B
31–42 · Moderate
C
43–52 · Elevated
D
53–66 · High
F
67+ · Very High
Cutoffs held at 30/42/52/66 in v3.0. The v2.4 recalibration (May 2026) tightened them from the original 35/47/58/72 because the distribution was compressed — roughly 65% of counties sat in the B band. v3.0 keeps these cutoffs: after promoting opposition to the heaviest factor, the letter grades now spread cleanly across the curve on their own, so the bands stay put and remain consistent everywhere on the site.

What changed in v3.0

The July 2026 model review refocused the score on the signals in our own database — with community opposition as the heaviest factor.

Opposition is now a first-class, heaviest factor

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.

Rebalanced weights, uncertainty demoted

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.

Missing signals renormalize — never faked

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.

Hybrid weight formula (carried forward from v2.4)

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.

Permit-record adjustment (Bayesian smoothing)

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.

Moratorium hard cap

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.

Two context badges

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.

Worked example — Mecklenburg County, VA

How the factors combine into a score of 77.4 (Grade F) for Mecklenburg County, Virginia (FIPS 51117) — well into the "Very High Risk" band, above the F threshold of 67. It's also a clean illustration of renormalization: Mecklenburg has no confirmed opposition signal on record, so the heaviest factor doesn't vote and the remaining weights rescale.

Community Opposition · 30% · No confirmed signal
We have no geo-confirmed, source-linked opposition record for this county. Rather than score it as "no opposition" (a faked zero), the factor is dropped and its 30% is redistributed across the five signals below. Data confidence: moderate.
Compliance Stringency · 24% · Very high
The Board of Supervisors voted unanimously on Apr 14, 2025 to remove utility-scale solar as a permitted use in all zoning districts — SitePath classifies this as a functional ban. Setbacks range 50–300+ ft. Sources: board minutes, Apr 14 2025; Article 20 of the county zoning ordinance.
Regulatory Trajectory · 16% · Worsening
A unanimous April 2025 board vote reversed prior permissiveness. The 12-month direction is strongly negative with no signals of reversal — near the maximum for this factor.
Market Saturation · 12% · Very high
Three large projects (Seven Bridges 80 MW, Antlers Road 90 MW, Finneywood 97 MW) are permitted and proceeding. High installed MW relative to land area pushes saturation above average, capping viability beyond the grandfathered pipeline.
State RPS · 10% · Favorable
Virginia's Clean Economy Act sets a binding 100%-by-2050 target, so state policy support is strong — this is the one factor pulling the score down. It's a modest 10% weight, so it can't rescue a county whose local record is a functional ban.
Data Uncertainty · 8% · Low (well-documented)
Board minutes, ordinance text, and EIA project records are all verified, so the uncertainty penalty is minimal — the score reflects actual conditions, not estimates.
With opposition absent, the five present factors are weighted by their rescaled shares and combine to 77.4. The moratorium hard cap doesn't apply here — the board removed the use by right but didn't formally designate a moratorium — so the composite is used as-is → Grade F (threshold >66). Open the full county record →

Data sources

Monitoring and discovery sources. Every published data point is verified against the primary government document before it ships.

MAREC ActionMid-Atlantic solar policy tracking
GreeneHurlockerMidyear solar permitting reports
Cardinal NewsVirginia / Appalachia energy reporting
Columbia Law · Sabin CenterClimate & regulatory tracking
NC Clean Energy Technology CenterNorth Carolina solar policy
Flatwater Free PressNebraska energy reporting
Beatrice Daily SunNebraska local government coverage
Indiana Solar StatusIndiana solar project tracking
Ohio Capital JournalOhio energy policy reporting
Primary documents anchor every score. Direct county-government URLs — ordinance text, board minutes, zoning amendments — sit beneath each grade, and all source links appear in each county's data panel.

Update cadence

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.

Explore the data

See how your target counties score — every grade is sourced to the underlying primary document.

We use essential cookies for authentication and optional analytics. Privacy Policy