How A Civic Forecast Finding Is Calculated.
A Finding is a figure we compute from two or more datasets: a number neither publisher reports on its own. Four are worked here in full, and every one we publish is listed.
Every Finding holds to six rules
- Inputs are named on the card: The source chip reads “Civic Forecast” either way, so the body is the only place a reader can tell computed from relayed.
- Periods are aligned first: The newest month both series share, never the newest of each, which silently compares different months.
- A missing input withholds it: It never defaults. An absent rent would publish “rent takes 0% of a paycheck.”
- History is recomputed: Publishers restate, so the whole window is rebuilt each run rather than appending one point.
- Rates are compounded, not subtracted: Real change is (1 + pay) ÷ (1 + prices) − 1. Subtracting is the common shortcut and it drifts as rates rise: 8% against 12% is −3.6%, not −4.0%.
- A national figure is a ratio of sums: Never the mean of state rates, which weights Wyoming and California equally. On housing cost burden the two methods give 44.50% and 42.17%, a difference larger than most findings.
Four Findings, worked in full
Worked at the date shown. The number moves as its inputs are revised; the method does not. These four are shown end to end because the arithmetic is where the judgement lives. The complete list follows.
Rent as a share of a paycheck
≈28% (of a full-time month's gross pay · 2026-08-26)
Computed from HUD Fair Market Rents · BLS average hourly earnings
monthly rent ÷ (hourly wage × 2,080 ⁄ 12) × 100
A $37.62 hourly wage makes a $6,520.80 gross month, putting the national median two-bedroom just under HUD's own 30% affordability line.
Why gross pay, not take-home Payroll and income tax vary by household in ways this cannot know, and every published housing-wage figure uses gross for the same reason. The card says so rather than leaving a reader to assume.
Real wages after inflation
−0.2% (pay up 3.15%, prices up 3.36% · 2026-07)
Computed from BLS average hourly earnings · BLS Consumer Price Index
((1 + pay growth) ÷ (1 + price growth) − 1) × 100
Nominal pay rose and still bought slightly less.
Why a ratio, not a subtraction Growth compounds, so real pay is the ratio of the two growth factors. Subtracting the percentages is the common shortcut and it is wrong: it gives −0.21 here rather than −0.20. The gap is small at these rates and grows as they rise, reaching a full percentage point at 1970s inflation.
Job seekers per opening
104 (openings per 100 job seekers · 2026-06)
Computed from BLS Job Openings and Labor Turnover Survey · BLS unemployment (Current Population Survey)
round(openings ÷ people looking for work × 100)
7,359,000 openings against 7,094,000 people looking. Both series are published in thousands, so the units cancel.
Why per hundred, not a bare ratio Rounding a ratio to one decimal rounds away the entire signal: 1.04 and 0.96 are opposite labor markets and both render as “1.0”. Openings and unemployment also release on different schedules, so the figure uses the newest month both share.
Facilities in violation
Per state (a share, not a count)
Computed from EPA ECHO violations by state · EPA ECHO regulated facilities by state
facilities in significant violation ÷ regulated facilities
Vermont's 93 violations against California's ~1,200 reads as damning until you account for California having about twenty times as many regulated facilities.
Why a missing state is omitted A state appears only when both halves are present and the denominator is above zero. Filling a gap with the national rate would color that state with a statement about the country, and a rendered map cannot show the difference.
Every Finding we publish
The four above are worked end to end; these are all of them. The list is generated from the platform itself, so it cannot fall behind what the app is showing. Falling behind is exactly what happened when it was maintained by hand.
47 Findings publish today: 33 measures, 14 of which are also mapped state by state.
Housing and rent (13 Findings)
- Rent as a share of graduate pay (also a state map)
- Homes started per 100,000 people
- Affordable homes per 1,000 renters (also a state map)
- Rent as a share of family income (also a state map)
- Rent as a share of household income (also a state map)
- Rent as a share of full-time pay (also a state map)
- Mid-market rent above the voucher cap (also a state map)
Prices, rates and debt (8 Findings)
- New-car loan markup over policy rate
- Student debt vs a year of earnings (also a state map)
- Producer vs consumer price change
- Real 10-year Treasury yield
- Share of after-tax income spent
- Long-term rate above the policy rate
- Monthly trade gap per resident
Democracy and influence (13 Findings)
- Share of the Archives viewable online
- Bills introduced per day in session
- Share of close House roll calls
- Days in session per law enacted
- DOGE savings claim vs federal outlays
- Network donors per 100,000 residents (also a state map)
- Share of bills that became law
- Pro-Israel outside $ per 1,000 voters (also a state map)
- Ballots cast per 100 residents (also a state map)
- House roll calls per day in session
Conflict and demonstrations (2 Findings)
- Conflict deaths per 100,000 worldwide
- Demonstrations per 100,000 residents
Work and pay (5 Findings)
- Benefit costs vs wage growth
- State & local workers per 1,000 (also a state map)
- Real pay, change over the year
- Job openings per 100 job seekers
Health and poverty (4 Findings)
- Child poverty above overall rate (also a state map)
- Overdose deaths per 100,000 residents (also a state map)
Environment (2 Findings)
- Share of EPA facilities in violation (also a state map)