districtry / illinois

How this deployment grew

districtry Illinois began as a Chicago-only explorer and grew outward one county at a time — 91 of the state's 102 counties as of 26 August 2026. The counties that are missing are missing for reasons this project measured and wrote down, not for want of looking, and every one of them is on the record in the app's own data-gaps panel. This page is the deployment's record: what it ships, what it re-reads on a schedule, and the corrections its own machinery has caught.

The numbers below are measured from the app's own shipped data files every time anything changes — they cannot drift from what the map actually serves. The changelog entries are dated snapshots: each was true on its own date, and none is edited after the fact.

39
map layers
11 political · 7 public safety · 9 schools · 12 geography
67
scheduled refresh & audit jobs
each lands as a reviewed change, never silently
624
villages, towns and cities with their own officials named
each read from the county clerk's own published directory, refreshed weekly
581
municipalities whose mayor or village president is named
where a municipality publishes a board without naming who leads it, the card says so rather than guess
101
county clerks' offices, re-read weekly
name, address, phone and e-mail, from the State Board of Elections' own directory of election authorities
118
Illinois House seats with their member, party and both offices
the whole chamber, re-read from the General Assembly's own roster every Monday
59
Illinois Senate seats with their member, party and both offices
refreshed in the same Monday run as the House; a member who leaves is a change a person reviews, never one that ships on its own
100
recorded data gaps
what the publishers withhold, on the record in the app

The changelog

Checked on a schedule

Every scheduled job lands its changes as a reviewed pull request — data about real officeholders never ships without a person looking at the diff.

What it refreshesJobWhen
IL Senate + House rosters (ilga.gov scrape)update-ilga-roster.ymlMon 13:00 UTC
U.S. House roster (unitedstates/congress-legislators)update-congress-roster.ymlMon 13:00 UTC
CPD district info (Cloudflare-challenged scrape via Playwright)update-cpd-roster.ymlTue 13:00 UTC
CCPSA district council rostersupdate-ccpsa-roster.ymlWed 13:00 UTC
Will County Board roster (willcountyboard.com scrape)update-will-county-board-roster.ymlThu 13:00 UTC
Kendall County Board roster (kendallcountyil.gov scrape, Playwright fallback for the Akamai front)update-kendall-county-board-roster.ymlThu 14:00 UTC
McHenry County Board roster (mchenrycountyil.gov scrape, Playwright fallback)update-mchenry-county-board-roster.ymlThu 15:00 UTC
Kane County Board roster (the county's SharePoint list API)update-kane-county-board-roster.ymlThu 16:00 UTC
Lake County Board leadership tags (directory scrape, Internet Archive fallback)update-lake-county-board-roles.ymlThu 17:00 UTC
Board of Review commissioner roster (cookcountyboardofreview.com scrape)update-ccbr-roster.ymlFri 13:00 UTC
Illinois county clerk roster (ISBE election-authority directory scrape)update-county-clerk-roster.ymlSat 13:00 UTC
DuPage County Board roster (dupagecounty.gov directory scrape)update-dupage-county-board-roster.ymlSun 13:00 UTC
Winnebago County Board contact (wincoil.gov board page; base64 e-mails, name-matched to the county GIS)update-winnebago-county-board-roster.ymlWed 15:00 UTC
Sangamon County Board roster (29 per-district member pages on sangamonil.gov)update-sangamon-county-board-roster.ymlTue 15:00 UTC
Livingston County Board roster (livingstoncountyil.gov directory scrape)update-livingston-county-board-roster.ymlTue 14:00 UTC
Municipal governing bodies (Cook Clerk DOEO API, Will Clerk directory, DMMC directory, Kane/McHenry/Kendall/Ogle/Carroll clerk yearbooks, Stephenson county villages page, Lake county GIS contact, LaSalle clerk PDF, Winnebago WinGIS officeholder layers, Freeport city site)update-municipal-officials.ymlWed 14:00 UTC
DeKalb County Board roster (dekalbcounty.org members page; Sucuri-fronted, the scraper retries past the captcha stub)update-dekalb-county-board-roster.ymlFri 14:00 UTC
Ogle County Board roster (oglecountyil.gov staff directory)update-ogle-county-board-roster.ymlSat 14:00 UTC
Stephenson County Board roster (stephensoncountyil.gov board page)update-stephenson-county-board-roster.ymlSun 14:00 UTC
Carroll County Board roster (carrollcountyil.gov board directory)update-carroll-county-board-roster.ymlMon 14:00 UTC
Lee County Board roster (leecountyil.com Member Contact List PDF)update-lee-county-board-roster.ymlTue 16:00 UTC
Rock Island County Board roster (rockislandcountyil.gov board page)update-rock-island-county-board-roster.ymlWed 16:00 UTC
source freshness + redistricting watch (opens/updates one tracking issue)validate-sources.yml1st of month 14:00 UTC
LaSalle County Board roster (county directory scrape)update-lasalle-county-board-roster.ymlSun 15:00 UTC
Henry County precinct polling places (Clerk's own directory)update-henry-precinct-polling.ymlFri 18:00 UTC
Woodford County Board roster (woodford-county.org directory scrape)update-woodford-county-board-roster.ymlMon 16:00 UTC
Logan County Board roster (logancountyil.gov board-page scrape)update-logan-county-board-roster.ymlMon 17:00 UTC
Boone County Board roster (boonecountyil.gov board-page scrape)update-boone-county-board-roster.ymlTue 17:00 UTC
Grundy County Board roster (grundycountyil.gov board-page scrape)update-grundy-county-board-roster.ymlWed 17:00 UTC
Jefferson County Board roster (jeffersoncounty.illinois.gov board-table scrape)update-jefferson-county-board-roster.ymlThu 19:00 UTC
Macon County Board roster (maconcounty.illinois.gov board-members scrape)update-macon-county-board-roster.ymlFri 17:00 UTC
Menard County commissioners roster (menardcountyil.gov board-table scrape)update-menard-commissioners-roster.ymlThu 20:00 UTC
Montgomery County Board roster (montgomerycountyil.gov board-page scrape)update-montgomery-county-board-roster.ymlWed 18:00 UTC
Henry County Board roster (henrycty.com district-keyed directory scrape)update-henry-county-board-roster.ymlThu 18:00 UTC
Peoria County Board roster (GIS roster spine + per-member page contact scrape)update-peoria-county-board-roster.ymlFri 15:00 UTC
Tazewell County Board roster (tazewell-il.gov member-page scrape)update-tazewell-county-board-roster.ymlFri 16:00 UTC
Iroquois County Board roster (county board-page table scrape)update-iroquois-county-board-roster.ymlSat 15:00 UTC
At-large county boards (Monroe, Randolph) rendered on the County cardupdate-county-commissioners-roster.ymlSat 16:00 UTC
De Witt County Board roster + district-composition drift checkupdate-dewitt-county-board-roster.ymlSun 15:00 UTC
Washington County Board roster + township-composition drift checkupdate-washington-county-board-roster.ymlSun 16:00 UTC
Cass County Board roster + seat-count tripwire on the derived boundaryupdate-cass-county-board-roster.ymlSun 17:00 UTC
Marshall County Board roster + township-composition drift checkupdate-marshall-county-board-roster.ymlMon 18:00 UTC
McDonough County Board roster + derived-boundary drift check (mcg.mcdonough.il.us, HTTP-only)update-mcdonough-county-board-roster.ymlMon 19:00 UTC
Fulton County Board roster (fultoncountyil.gov Members page — a district-grouped grid joined by name to hidden per-member popups for the e-mails)update-fulton-county-board-roster.ymlTue 20:00 UTC
Stark County Board roster (starkco.illinois.gov) + drift check on the five boundaries built from the Clerk's archived Google My Maps exportupdate-stark-county-board-roster.ymlTue 19:00 UTC
Mason County Board roster SOURCE watch (scan — transcribed by hand, never scraped)watch-mason-roster-source.ymlTue 18:00 UTC
Shelby County Board roster (shelbycounty-il.gov coboard.aspx scrape, cross-checked against contacts.aspx) + drift check on the composition the derived boundary is dissolved fromupdate-shelby-county-board-roster.ymlWed 19:00 UTC
White County Board roster + precinct polling (whitecounty-il.gov board + elections pages; district join from the certified-canvass table, any unplaceable name fails) + watch on the Elections page's adopted-map linkupdate-white-county-board-roster.ymlSat 17:00 UTC
Jo Daviess County Board roster (jodaviesscountyil.gov board page + 16 member directory pages, paced; seats counted named+vacant = 17, districts 1..17 asserted against the purchased boundary's constant, home addresses never parsed)update-jodaviess-county-board-roster.ymlSat 18:00 UTC
Coles County Board roster (colesco.illinois.gov board page + committees page cross-check; the fetch supplies the intermediate certificate the county's server omits, pinned by hash. Exists because the county's own board-district GIS layer carries a 2022 member column that gets six of twelve names wrong — the app takes geometry from the service and people from here)update-coles-county-board-roster.ymlSun 18:00 UTC
Clark County Board roster (the Clerk's own certified canvasses at il-clark.accessliberty.com — the county's only board document is a scan, so the roster is the election returns; the run also re-checks each district's tabulated precinct list against the shipped dissolve, which is the re-precincting/redistricting tripwire)update-clark-county-board-roster.ymlMon 20:00 UTC
Crawford County Board roster (the county's own board page) + the redistricting tripwire: the same run re-reads the district composition from the Clerk's results feed at il-crawford.pollresults.net and fails if it stops matching the shipped dissolveupdate-crawford-county-board-roster.ymlTue 21:00 UTC
Mercer County Board roster (the county's own board table — party, term, home town, chairman) + the redistricting tripwire: the same run re-reads the district composition from the Clerk's results feed at il-mercer.pollresults.net and fails if it stops matching the shipped dissolveupdate-mercer-county-board-roster.ymlWed 20:00 UTC
Edgar County Board roster (edgarcountyillinois.COM board page — the .gov does not carry it) + the redistricting tripwire: the same run re-reads the district composition from the Clerk's results feed at il-edgar.pollresults.net and fails if it stops matching the shipped dissolveupdate-edgar-county-board-roster.ymlThu 21:00 UTC
Franklin County Board roster (the county's own members page, read as a GRID by cell coordinate — a flattened text read pairs every role with the wrong member, and its Address column is every member's home) + the redistricting tripwire: the same run re-checks the county's live precinct count and each numbered board contest's precinct count against the shipped dissolve, and fails if either movesupdate-franklin-county-board-roster.ymlFri 19:00 UTC
Clinton County Board roster (the county's own board page — 15 members with phone, e-mail and term year, Chairman and Vice Chairman badged by name match) + the redistricting tripwire: the same run re-checks the county's live precinct count and each numbered board contest's precinct count against the shipped dissolveupdate-clinton-county-board-roster.ymlSat 19:00 UTC
Adams County Board roster (certified canvasses on platinumelectionresults.com; also the backfill tripwire for the unread November 2022 canvass)update-adams-county-board-roster.ymlSat 20:00 UTC
Knox County Board roster (roll call of the county's own board minutes on its Revize CMS; its member page is a 403)update-knox-county-board-roster.ymlSun 20:00 UTC
Warren County Board roster (the county's own board page — 15 members with committees, term year, phone and e-mail, Chairman of the Board badged; home addresses seen and dropped) + the strongest drift check in the fleet: the same run re-reads the precinct-map legend the shipped boundary was dissolved fromupdate-warren-county-board-roster.ymlSun 19:00 UTC
Daily watchdog over every roster refresh: reports the ones that are FAILING or have gone longer than their own cadence without a successful run, on one standing issue. Exists because a builder that refuses the write opens no PR and files nothing — the shipped roster silently freezes at its last good runroster-health.ymldaily 23:00 UTC
Hancock County Board roster (county board page scrape)update-hancock-county-board-roster.ymlFri 20:00 UTC
Richland County Board roster (the county's own board page) + the redistricting tripwire: the same run re-reads the board-district and voting-precinct layers from the county's own GIS at richlandil.wthgis.com and fails if either stops matching the shipped dissolveupdate-richland-county-board-roster.ymlMon 21:00 UTC
Jackson County Board roster (the county's own board page, grouped by district heading, plus each member's staff-directory entry for the e-mail); the builder fails if the page's grouping and the directory disagree about a member's districtupdate-jackson-county-board-roster.ymlTue 22:00 UTC
Douglas County Board roster, assembled from the county's annual Yearbook (people and e-mail) and its certified election summary reports (district numbers), joined on surname; the builder fails if the two county documents stop naming the same seven peopleupdate-douglas-county-board-roster.ymlWed 21:00 UTC
Vermilion County Board roster (27 members across 9 districts) from the county's own members page, fetched with the intermediate certificate its server omits supplied by AIA and pinned by hashupdate-vermilion-county-board-roster.ymlThu 22:00 UTC
Wayne County Board roster (14 members across 7 districts) from the county's own board page + the redistricting tripwire: the same run re-reads the per-district precinct list from that page and fails if it stops matching the shipped dissolve (District 7 checked as the known page/canvass subset, since the page never names Fairfield 1 or Fairfield 2)update-wayne-county-board-roster.ymlFri 21:00 UTC
Clay County Board roster (14 members across 14 lettered districts, 14/14 with a phone) from the county's own members page + the redistricting tripwire: the same run re-reads the county-board page's Districts section letter by letter and fails if it stops matching the shipped composition (the village-limits line splitting Clay City between districts A and B came from the Clerk's e-mail, and no page re-read can trip a line the page never draws)update-clay-county-board-roster.ymlSat 21:00 UTC

Back to the map Sources & data layers Common questions Privacy Why this exists