Ohio Campaign Data Infrastructure

District Data
Intake Checklist

Five data categories required to fully analyze any Ohio House district. Check items as you collect them. Notes auto-save in your browser.

0 / 20 complete
Already in your database (applies to every district): TIGER/Line State House District shapefile — all 99 Ohio districts. Ohio SOS voter file columns are standardized statewide — same 136-column format for all 88 counties. Scoring model applies universally once voter file is loaded.
01 Ohio SOS Voter File One file per county. Standardized statewide format.
Identify which counties the district coversFirst step
Cross-reference the TIGER district shapefile against county boundaries. Districts can span multiple counties. Some townships split across district lines.
Download voter file for each county from Ohio SOS
Format: .txt (pipe or comma delimited). Same 136-column schema for all counties. File named by county FIPS. Request ACTIVE + INACTIVE + CONFIRMATION statuses.

Already in database: CLERMONT BROWN
Load voter file into 2026OhioVoters.db
Append to existing voters table. Run scoring model on new records. Add county to index. Verify row count matches SOS file.
02 County Auditor Parcel Data Assessed value, sale date, sale price, zoning. One per county.
Find bulk download or API for each county auditorClermont ✓Brown partial
Preferred format: CSV or Excel export from county CAMA system. Most Ohio counties use Tyler Technologies or Aumentum — exports are similar. If no bulk download: call auditor's office and request public records extract.

Clermont: maps.clermontcountyohio.gov  |  Brown: received via auditor export
Verify parcel data includes: address, assessed value, sale date, sale price, land use code
Minimum required fields. If sale data is missing, it may be in a separate transfer file. Land use code distinguishes residential dwellings from vacant land — critical for unregistered household count accuracy.
Check address format consistency against voter file
Critical step. Brown County had 7.4% match rate due to inconsistent address formats (missing street types). Target 50%+ match rate. If below 30%, request standardized export or use OGRIP API as supplement.

Use the OGRIP fetcher tool to pull standardized addresses if county data is poor.
Load parcel data into database and build unregistered households table
Append to parcels table. Run voter-parcel match. Residential parcels with no matched voter → unregistered_households table. Verify counts — residential parcel count should not far exceed voter count.
03 Address Points Shapefile Required for geocoding. One per county from county GIS office.
Download address points shapefile from county GIS officeClermont ✓Brown ✓
Usually a .shp or zipped shapefile set. Clermont: ClermontAddresses.zip from county GIS. Brown: Addresses_ft.zip from engineer's GIS site. Check coordinate system — may need reprojection to EPSG:4269.
Verify X/Y or geometry fields contain valid lat/lon coordinates
Clermont had pre-computed X (lon) and Y (lat) fields in the DBF — use those directly. Brown required reprojection from Ohio State Plane Feet (EPSG:3735) to WGS84 (EPSG:4269) via geopandas. Check CRS in .prj file.
Run geocoding against parcel addresses — target 30%+ match rate
Uses exact match + street interpolation (house number between known points). Below 30% means address formats between parcel file and address points file are too different — escalate to OGRIP or call county auditor.
04 Precinct Boundary Shapefile Official boundaries for spatial join. County BOE or GIS office.
Download precinct shapefile from county GIS or BOEClermont ✓Brown ✓
Clermont: VotingPrecincts.shp from county GIS. Brown: VOTING-PRECINCT.zip from engineer GIS. Other counties: check county BOE site or GIS downloads page. Field name for precinct name varies — check DBF fields after loading.
Run point-in-polygon spatial join — assign precinct to each geocoded address
Reproject precinct shapefile to EPSG:4269 before joining. Match rate limited by geocoding rate. Records without coordinates get INFERRED - VERIFY flag. Use assign_precincts.py script (already built).
Verify precinct names in shapefile match precinct names in voter file
Mismatch is common — shapefile may say BATAVIA TWP A while voter file says BATAVIA TOWNSHIP A. Build a crosswalk if needed. Villages are separate precincts in voter file — confirm they appear in shapefile too.
05 Verification & Quality Control Check counts before building any deliverable.
Confirm total voter count matches Ohio SOS published totals
Ohio SOS publishes county voter registration totals monthly. Cross-check your database count against their published number. Discrepancy over 1% warrants investigation.
Confirm unregistered household count is plausible
Residential parcel count should not far exceed registered voter addresses. Rule of thumb: unregistered count should be less than total registered count. If unregistered > registered, address matching is failing — investigate before using for canvassing.
Spot-check 10 addresses manually — confirm precinct and district assignment
Pick 10 known addresses across the district. Confirm their precinct and district in both the database and the county BOE website. This catches CRS mismatches and boundary errors that summary stats miss.
Flag all INFERRED - VERIFY records and note percentage in deliverable
Never deliver a report without disclosing what percentage of precinct/district assignments were confirmed by spatial join vs. inferred. Candidate teams need to know which addresses to treat as verified vs. estimated.
06 Deliverable Generation District-specific reports. One file per district, not one giant file.
Generate district summary report (precinct breakdown, score summary, turnout)
One Excel or CSV file per district. Includes: total voters by precinct, Soft R + Independent scores, dropout count, new mover count, unregistered count. Named HD[NN]_Deliverable.xlsx.
Generate target voter list (Soft R High/Med, Independent High/Med, Dropoff, New Movers)
Separate CSV per district for field operations. Sorted by precinct then address for walk list efficiency. Named HD[NN]_TargetVoters.csv. Confirm with candidate before distribution.
Generate welcome wagon list (residential sales 2022+, no registered voter)
Sorted by sale date descending — newest arrivals first. Include sale price and assessed value. Named HD[NN]_WelcomeWagon.csv. This list refreshes monthly as new sales are recorded.
HD ??0 of 20 items complete