MIvoter: Fixing unknown term length or vote-for data

Charles Roth
Last update: 1/19/2026

I. Introduction

The primary goal of MIvoter.org is to encourage more people to vote for Democratically-endorsed candidates (especially in "non-partisan" elections).

Secondarily, we provide contact & other information about all of each voter's elected officials -- from top to bottom, Governor to (metaphorical) dog-catcher.  There is no central database of all elected officials in Michigan.  So -- we're building it!

(You can read more about why this is important, at the Election data volunteer guide.

II. Purpose

This document addresses one particular problem.  We 'scrape' election data from the various county websites, and combine it all to deduce the list of current elected officials.

But sometimes we don't get (or can't deduce) two key pieces of data:

We've already gathered data on over 19,000 races and candidates, across 6 general (November) elections (2020-2025).  Of those, we have about 700 cases that are missing either the term length ("termlen") or "vote for" numbers.  Many of those cases are duplicates (e.g. all of the city council), so the number of actual, distinct, cases is probably closer to 200.

That's where we need your help.  Most of these cases will need an actual human being to go find those numbers.  It's easier than it sounds; the next sections describe how.

III. The Zero-Report spreadsheet

We are using a shared Google sheet, the zero-report spreadsheet, to track these cases.  This is also where we enter the corrected data.  So, if you want to help, contact either Charles Roth or Ed Saunders, and we will give you edit access to this sheet.

In the meantime, here's what it looks like:

 

Once you're there, you'll see the following columns for each case (each row):
  1. Volunteer.  Your name.  If you want to "claim" a couple of cases (so that we don't have multiple people working on the same rows!), pur your name here.
  2. done?.  Enter the date when you've fixed the data for this row.
  3. org.  The kind of "organization" for the elected office:
  4. district.  Our internal code # for the "organization" (i.e. which city, county, etc.)
  5. name.  The actual name for the district (as known by human beings)
  6. county.  Useful for looking up election reports
  7. office.  The actual office.  These are standard codes (don't change them), the abbreviations will mostly be obvious, with a few exceptions:
  8. subdist.  Sub-district, such as a city ward, or a county commissioner district.  (When there are multiple sub-districts that are missing the same data, they'll usually get the same corrected result.)
  9. voteFor.  If this is zero, we want to find the correct #, and enter it here.
  10. termlen.  If this is zero, we want to find the correct #, and enter it here.
  11. elections.  This is a list of the election dates where we were missing either the voteFor or the termlen numbers.  Sometimes this is a clue -- if you see (say) 2021, 2023, and 2025, then maybe the term length is 2 years -- or maybe it's 4 years, but with offset years (some in 2021 and 2025, others in 2023 and 2027).

IV. Finding the elected office, and the missing data

  1. "Local Candidate" reports.  Some county clerks produce a "local candidates" report that is a gold-mine of information, particularly about termlen and vote-for.  A google query like:
       office of the berrien county clerk michigan 2024 november general election local candidate listing
    
    produced a PDF report with all of the desired information.
  2. Finding the office.  Otherwise, try googling for the jurisdiction's official website.  (E.g. search for "belleville city michigan official website".)  Look for pages about "government" or "departments" to find the specific office(s).

    That's helpful for present-day data.  Often you'll find the term length (or "holds office until" date) right there, or with a little digging.

    In some cases, you may need to do a little more detective work, by comparing today's elected officials, with those of past years.  Fortunately, for that, we have the "Internet Archive"!

    For example, the search for "belleville city" leads me to bellevilleonthelake.com.  Now, I can go to archive.org, enter the city's URL in the "Wayback Machine" search box... and get a list of the dates of the historical "snapshots" that were taken of the city's website.  Then from there, I can find the list of elected officials as of that date.

    Rinse and repeat across several years, and you can often find (or deduce) the term length, and in some cases, even the effective "vote for" numbers.  (E.g. if you know 2 people are listed as elected to city council in 2022, then you know "vote for" for that office in that year was 2.)

  3. Finding the election data.  We've already "scraped" the published election data for each county, so at first glance, there would seem to be no reason to go look at it (again).

    But the way the county websites are laid out are (a) inconsistent, and (b) not always logical.  So you may still find useful clues about the elections, by digging around those websites.  (Also, some election results pages have, in turn, links to precinct level details, and sometimes those sub-pages may have additional information that we could not scrape.)

    Start at the master SoS election results for each county page.  Then drill down from there.

  4. Other Resources

  5. AI.  Sometimes finding data is as easy as just asking Google "what is the term length of the mayor in the city of XYZ, Michigan?" and looking at the "AI Overview".

    But AI agents are notoriously over-confident.  Don't (blindly) trust the results.  Check the other suggested links for confirmation!

    That being said, sometimes this is the fastest approach -- at least, for term length data.  "Vote for" is much trickier.