98.1%
of voters placed on the map
8
early-voting days tracked
285 of 286
spot-checked addresses within 75 feet of the right home

The situation

During early voting the county publishes who has voted each day. Turning that into something a campaign can act on means downloading files, filtering to the district, and placing each voter on a map, every day, fast.

What I built

  • Every night it downloads the day's files, keeps only voters in the district, removes duplicates, and places each address on the map.
  • Each address is placed using county property records first, then two public address-lookup services, with hand-placed pins for the few that are left.
  • Volunteers signed in and marked who they thought each early voter supported. Known supporters were marked automatically from public endorsement lists, and a separate list showed supporters who still hadn't voted. The public map shows locations only, never names.

The hard part was trust. Early versions passed every automated check while dots still landed on the wrong houses, because the checks only confirmed that coordinates existed. The fix was to compare against an independent source and look at the map. On a 286-address check, addresses within 75 feet went from 258 to 285 and outliers went from 28 to zero. Comparing against the county's final results later showed my count ran about 8% high, mostly from two ballot styles that turned out not to include this race. Checking against the official numbers is how I found it.

For your business

In a business, the same nightly map shows yesterday's orders, jobs, or customers, straight from the export you already get.

Why custom

There's no product for turning one county's early-voting files into a map of one district. It reads this county's report format every night, keeps only voters inside this district's boundary, and was checked against the actual homes on the map, because standard address lookups tend to drop a dot in the middle of a lot or on the wrong property.

Built with

Python · GitHub Actions · Leaflet + H3 hexbins · Chart.js · Google Sheets + Apps Script

Have a workflow like this?

Most projects scope in a 30-minute call. Tell me where the time goes.