Boundary Atlas

Michigan's 9th congressional district (MI-09)

Michigan's 9th congressional district (MI-09) covers parts or all of 7 counties, including Huron County, Lapeer County, Sanilac County, St. Clair County, Tuscola County and Macomb County, and 116 ZIP codes (93 wholly inside it). Its 2020 population was 774,962. This is the map in force for the November 3, 2026 election.

774,962residents (2020 Census)
7counties
116ZIP codes
303voting precincts

Who represents MI-09

OfficeMemberContact
U.S. Representative (MI-09)Lisa C. McClain (R)202-225-2106
U.S. SenatorElissa Slotkin (D)202-224-4822
U.S. SenatorGary C. Peters (D)202-224-6221 · contact form

Officials serving now (members of Congress until January 3, 2027). Sources: Members of Congress: the @unitedstates project, congress-legislators (CC0).

Counties

CountyShare of the county's residents in MI-09
Huron County100%
Lapeer County100%
Sanilac County100%
St. Clair County100%
Tuscola County97%
Macomb County22%
Oakland County16%

ZIP codes

Percentages mark ZIPs only partly in MI-09: the share of that ZIP's residents inside it.

Towns

Addison township, Akron township, Algonac city, Almer township, Almont township, Arcadia township, Argyle township, Armada township, Attica township, Austin township, Bad Axe city, Berlin township, Bingham township, Bloomfield township, Brandon charter township, Bridgehampton township, Brockway township, Brookfield township, Brown City city, Brown City city, Bruce township, Buel township, Burlington township, Burnside township, Burtchville township, Caro city, Casco township, Caseville city, Caseville township, Chandler township, Chesterfield township, China township, Clay township, Clyde township, Colfax township, Columbia township, Columbus township, Cottrellville township, Croswell city and Custer township and others.

Get this in your AI agent

Your agent can draw every precinct in MI-09, or list them with population shares (related_geographies). Add https://boundarymcp.com/mcp to Claude, ChatGPT, Cursor or Codex (free, no key; how), then:

get_boundaries(id="us:congressional_district:2609", children_level="precinct", include_districts=True)