Affordability

Most affordable mid-sized US towns

Where the median home costs the fewest years of household income. Ranked from cheapest to most expensive — limited to towns with 5,000–50,000 residents so the comparison stays fair.

Ranked by Years-to-own ratio · drawn from ACS 5-yr 2019–2023 · 8,640 places considered.

Rank Place County · region Years-to-own ratio Population State rank
#1 Bruceton Mills
WV
Preston 0.96
in the top 1% nationally
8,390 #1 of 103
#2 Washington Park
IL
St. Clair 1.05
in the top 1% nationally
10,363 #1 of 332
#3 Atlas
PA
Northumberland 1.09
in the top 1% nationally
7,174 #1 of 533
#4 Clarksdale
MS
Bolivar 1.19
in the top 1% nationally
16,384 #1 of 139
#5 Helena-West Helena
AR
Phillips 1.22
in the top 1% nationally
7,080 #1 of 115
#6 Brownstown
PA
Cambria 1.29
in the top 1% nationally
9,654 #2 of 533
#7 Blackwell
OK
Kay 1.33
in the top 1% nationally
6,795 #1 of 120
#8 Shenandoah
PA
Schuylkill 1.35
in the top 1% nationally
5,988 #3 of 533
#9 Pine Lawn
MO
St. Louis city 1.35
in the top 1% nationally
21,479 #1 of 223
#10 Eldorado
IL
Gallatin 1.36
in the top 1% nationally
5,763 #2 of 332
#11 Kewanee
IL
Bureau 1.38
in the top 1% nationally
13,529 #3 of 332
#12 Sauget
IL
St. Clair 1.39
in the top 1% nationally
6,801 #4 of 332
#13 Pine Bluff
AR
Jefferson 1.40
in the top 1% nationally
13,981 #2 of 115
#14 Trevorton
PA
Northumberland 1.41
in the top 1% nationally
10,460 #4 of 533
#15 Fairview-Ferndale
PA
Northumberland 1.42
in the top 1% nationally
10,057 #5 of 533
#16 Vinco
PA
Cambria 1.44
in the top 1% nationally
6,984 #6 of 533
#17 Beardstown
IL
Cass 1.46
in the top 1% nationally
7,719 #5 of 332
#18 Kermit
TX
Winkler 1.48
in the top 1% nationally
6,160 #1 of 482
#19 Oakland
PA
Cambria 1.49
in the top 1% nationally
11,593 #7 of 533
#20 East St. Louis
IL
St. Clair 1.49
in the top 1% nationally
10,777 #6 of 332
#21 Parsons
KS
Labette 1.49
in the top 1% nationally
11,786 #1 of 80
#22 Cumberland
KY
Harlan 1.49
in the top 1% nationally
5,506 #1 of 192
#23 Jeanerette
LA
Iberia Parish 1.50
in the top 1% nationally
10,407 #1 of 165
#24 Peoria Heights
IL
Peoria 1.51
in the top 1% nationally
21,264 #7 of 332
#25 North Enid
OK
Garfield 1.52
in the top 1% nationally
25,313 #2 of 120
#26 Hoopeston
IL
Iroquois 1.52
in the top 1% nationally
5,635 #8 of 332
#27 Anadarko
OK
Caddo 1.53
in the top 1% nationally
7,760 #3 of 120
#28 Larned
KS
Pawnee 1.53
in the top 2% nationally
5,137 #2 of 80
#29 Monessen
PA
Westmoreland 1.53
in the top 2% nationally
6,825 #8 of 533
#30 Elim
PA
Cambria 1.56
in the top 2% nationally
19,722 #9 of 533
#31 New Alexandria
OH
Jefferson 1.56
in the top 2% nationally
5,448 #1 of 403
#32 Harristown
IL
Macon 1.57
in the top 2% nationally
15,272 #9 of 332
#33 Alverda
PA
Cambria 1.58
in the top 2% nationally
5,421 #10 of 533
#34 Buena Vista
MI
Saginaw 1.59
in the top 2% nationally
32,069 #1 of 328
#35 Monmouth
IL
Henderson 1.59
in the top 2% nationally
10,640 #10 of 332
#36 Duquesne
PA
Allegheny 1.60
in the top 2% nationally
5,186 #11 of 533
#37 Oneida
AR
Phillips 1.61
in the top 2% nationally
5,906 #3 of 115
#38 Mount Zion
IL
Macon 1.61
in the top 2% nationally
39,244 #11 of 332
#39 Edgewater
AL
Jefferson 1.61
in the top 2% nationally
5,409 #1 of 225
#40 Harrisburg
IL
Pope 1.62
in the top 2% nationally
11,465 #12 of 332
#41 Ogdensburg
NY
St. Lawrence
Thousand Islands
1.63
in the top 2% nationally
15,615 #1 of 475
#42 Gordon
PA
Columbia 1.63
in the top 2% nationally
8,033 #12 of 533
#43 Chester
IL
Randolph 1.64
in the top 2% nationally
8,233 #13 of 332
#44 Coosada
AL
Montgomery 1.64
in the top 2% nationally
12,782 #2 of 225
#45 Charleroi
PA
Washington 1.65
in the top 2% nationally
10,044 #13 of 533
#46 Hiller
PA
Fayette 1.65
in the top 2% nationally
9,007 #14 of 533
#47 Danville
IL
Vermilion 1.65
in the top 2% nationally
40,599 #14 of 332
#48 Dixon
OK
Hughes 1.65
in the top 2% nationally
5,558 #4 of 120
#49 Coffeyville
KS
Labette 1.66
in the top 2% nationally
10,944 #3 of 80
#50 Saginaw
MI
Saginaw 1.66
in the top 2% nationally
29,013 #2 of 328

Showing top 50 of 8,640 places ranked. See methodology →

Other ways to slice this

The same metric, filtered differently.