Boundary Atlas

Texas's 28th congressional district (TX-28)

Texas's 28th congressional district (TX-28) covers parts or all of 12 counties, including Atascosa County, Dimmit County, Duval County, Jim Hogg County, La Salle County and Live Oak County, and 81 ZIP codes (53 wholly inside it). Its 2020 population was 766,987. This is the map in force for the November 3, 2026 election.

766,987residents (2020 Census)
12counties
81ZIP codes
267voting precincts

Who represents TX-28

OfficeMemberContact
U.S. Representative (TX-28)Henry Cuellar (D)202-225-1640
U.S. SenatorJohn Cornyn (R)202-224-2934 · contact form
U.S. SenatorTed Cruz (R)202-224-5922 · contact form

Elected in 2024 under TX's previous congressional map; this district's lines changed for the 120th Congress (seated January 3, 2027).

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 TX-28
Atascosa County100%
Dimmit County100%
Duval County100%
Jim Hogg County100%
La Salle County100%
Live Oak County100%
McMullen County100%
Starr County100%
Webb County100%
Zapata County100%
Hidalgo County36%
Maverick County21%

ZIP codes

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

Towns

Asherton CCD, Benavides CCD, Big Wells CCD, Campbellton CCD, Carrizo Springs CCD, Charlotte CCD, Cotulla CCD, Encinal CCD, Freer CCD, George West CCD, Jourdanton CCD, La Grulla CCD, Laredo CCD, Laredo North-Webb CCD, Laredo South-El Cenizo CCD, North Jim Hogg CCD, Pleasanton CCD, Poteet CCD, Realitos-Concepcion CCD, Rio Grande City CCD, Roma-Los Saenz CCD, San Diego CCD, San Ygnacio CCD, South Jim Hogg CCD, Three Rivers CCD, Tilden CCD, Zapata CCD, Sullivan City CCD, Mission CCD, McAllen-Pharr CCD and Eagle Pass CCD.

Get this in your AI agent

Your agent can draw every precinct in TX-28, 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:4828", children_level="precinct", include_districts=True)