Guest, Sign inJoin
McPherson-Holland HouseGlendale, #1 on this list · McPherson-Holland House · Photo: Jon Roanhaus · CC BY-SA 3.0
Missouri rankings · 2026

Best small towns in Missouri

Glendale ranks first of Missouri’s 155 graded small towns (2,500–9,999 residents), with an A+: jobs & income (A+) and health (A+) are its strongest grades; cost of living (C) is its lowest. 32 of the 155 (21%) grade A− or better nationally, against 25% of U.S. towns.

The overall grade, sorted: cost of living, safety, schools, health, jobs & income, walkability and hazard risk, from Census, FBI, state, CDC, EPA and FEMA data. How grades work

#1

Glendale

St. Louis County · 6,060 people
A+

Strongest: jobs & income A+, health A+·lowest: cost of living C

CCost–SafetyA+SchoolsA+HealthA+JobsA−WalkB−Hazards
#2

Green Park

St. Louis County · 2,670 people
A+

Strongest: jobs & income A, cost of living A−·lowest: hazard risk C+

A−Cost–SafetyB+SchoolsA−HealthAJobsB+WalkC+Hazards
#3

Odessa

Lafayette County · 5,721 people
A+

Strongest: safety A, jobs & income A·lowest: walkability C

A−CostASafetyB+SchoolsBHealthAJobsCWalkA−Hazards

Where they are: Three of the top 10 are in St. Louis County.

All 155 small towns

Overall score, highest first. The score (0–100) blends the seven livability grades and sets the order; the letter places that score among every U.S. town of 2,500+, and A+ is the top 5%, so neighbors on the list often share a letter. Each town links to its page, where the grade sheet shows every subject. The rank is the town’s place among all 247 Missouri towns.

155 towns ranked. Not here? See why a town may be missing.

#TownScoreGradeWhat drives it
1GlendaleSt. Louis County · 6,060 people77.0top 0.6%A+Strongest: jobs & income A+, health A+·lowest: cost of living C
2Green ParkSt. Louis County · 2,670 people76.8top 0.7%A+Strongest: jobs & income A, cost of living A−·lowest: hazard risk C+
3OdessaLafayette County · 5,721 people75.2top 1.3%A+Strongest: safety A, jobs & income A·lowest: walkability C
4CottlevilleSt. Charles County · 6,717 people71.6top 4.5%A+Strongest: safety A+, jobs & income A+·lowest: hazard risk D
6GreenwoodJackson County · 6,315 people70.9top 5.4%AStrongest: jobs & income A+, safety A·lowest: walkability C−
9SavannahAndrew County · 5,107 people70.4top 6.2%AStrongest: cost of living A, schools A−·lowest: walkability B−
10PalmyraMarion County · 3,649 people69.4top 7.7%AStrongest: cost of living A−, walkability A−·lowest: health B−
13OlivetteSt. Louis County · 8,937 people68.9top 8.6%AStrongest: schools A+, jobs & income A·lowest: cost of living D
15AshlandBoone County · 5,221 people68.3top 9.6%AStrongest: health A, jobs & income A·lowest: walkability C−
16Pleasant ValleyClay County · 2,747 people67.9top 10.3%AStrongest: jobs & income A, cost of living A−·lowest: health C+
17Crystal CityJefferson County · 4,694 people67.9top 10.3%AStrongest: cost of living A, schools A−·lowest: health C
18LadueSt. Louis County · 8,934 people67.9top 10.4%AStrongest: jobs & income A+, health A+·lowest: cost of living D
19OronogoJasper County · 3,204 people67.7top 10.7%AStrongest: schools A, safety A·lowest: hazard risk C−
20Sappingtonunincorporated, St. Louis County · 7,367 people67.3top 11.7%AStrongest: schools A, health A−·lowest: cost of living C
26St. PaulSt. Charles County · 3,849 people66.3top 13.7%AStrongest: jobs & income A+, schools A·lowest: hazard risk D
29Rock HillSt. Louis County · 4,668 people65.7top 15.2%A−Strongest: schools A+, jobs & income A·lowest: cost of living C−
30HigginsvilleLafayette County · 4,770 people65.7top 15.3%A−Strongest: cost of living A, hazard risk A−·lowest: schools C+
36CaliforniaMoniteau County · 4,523 people64.7top 17.4%A−Strongest: cost of living A, schools A−·lowest: health C
37CentraliaBoone County · 4,767 people64.6top 17.8%A−Strongest: cost of living A, schools A−·lowest: jobs & income C
38Clarkson ValleySt. Louis County · 2,540 people64.4top 18.2%A−Strongest: jobs & income A+, health A+·lowest: cost of living D
39High Ridgeunincorporated, Jefferson County · 3,714 people63.6top 20.1%A−Strongest: cost of living A, jobs & income A−·lowest: hazard risk C−
42ParkvillePlatte County · 9,093 people63.5top 20.4%A−Strongest: jobs & income A+, health A−·lowest: cost of living C−
44FentonSt. Louis County · 4,060 people63.4top 20.6%A−Strongest: schools A, health A−·lowest: cost of living C−
45BattlefieldGreene County · 6,361 people63.4top 20.7%A−Strongest: jobs & income A, health A−·lowest: walkability C−
47Pleasant HillCass County · 8,956 people63.0top 21.5%A−Strongest: schools A−, safety B+·lowest: walkability C+
48BrentwoodSt. Louis County · 8,079 people62.9top 21.8%A−Strongest: schools A+, health A+·lowest: safety D
49WillardGreene County · 6,904 people62.8top 21.9%A−Strongest: schools A−, jobs & income B+·lowest: walkability C
50FrontenacSt. Louis County · 3,790 people62.8top 22.0%A−Strongest: schools A+, health A+·lowest: cost of living C−
52Marceline TownshipLinn County · 2,589 people62.3top 23.1%A−Strongest: cost of living A+, schools A+·lowest: health C−
53LawsonRay County · 2,541 people62.3top 23.2%A−Strongest: schools A, cost of living A−·lowest: health C
55Weldon SpringSt. Charles County · 5,301 people61.8top 24.6%A−Strongest: schools A+, jobs & income A·lowest: cost of living D
56Knob NosterJohnson County · 2,997 people61.7top 24.8%A−Strongest: schools A−, cost of living A−·lowest: walkability C−
57Lake LotawanaJackson County · 2,756 people61.6top 25.2%B+Strongest: jobs & income A, schools A·lowest: cost of living D
59CantonLewis County · 2,763 people61.5top 25.5%B+Strongest: cost of living A+, safety A·lowest: jobs & income D
61HerculaneumJefferson County · 5,402 people61.5top 25.6%B+Strongest: jobs & income A, schools A·lowest: hazard risk C−
63Sunset HillsSt. Louis County · 9,075 people61.3top 26.2%B+Strongest: jobs & income A, health A·lowest: cost of living D
67CleverChristian County · 3,143 people60.9top 27.3%B+Strongest: jobs & income A−, schools B+·lowest: walkability C
68MaplewoodSt. Louis County · 8,033 people60.4top 28.3%B+Strongest: walkability A+, schools A·lowest: safety D−
72FayetteHoward County · 2,848 people59.6top 30.5%B+Strongest: cost of living A, walkability A·lowest: schools C
74Holts SummitCallaway County · 4,773 people59.4top 30.8%B+Strongest: jobs & income A−, cost of living A−·lowest: walkability D
77RogersvilleWebster County · 5,754 people58.3top 33.7%B+Strongest: safety B+, schools B+·lowest: health C+
78Des PeresSt. Louis County · 9,102 people58.1top 34.4%B+Strongest: jobs & income A+, health A+·lowest: safety D
80Wright CityWarren County · 5,854 people58.0top 34.7%B+Strongest: cost of living A−, schools A−·lowest: walkability C−
83Ste. GenevieveSte. Genevieve County · 5,065 people57.2top 36.7%BStrongest: cost of living A, schools A−·lowest: hazard risk C−
85Country ClubAndrew County · 2,512 people57.0top 37.4%BStrongest: schools A−, jobs & income B+·lowest: walkability C−
87BrookfieldLinn County · 4,083 people56.5top 38.6%BStrongest: cost of living A+, schools A−·lowest: health C−
88Terre du Lacunincorporated, St. Francois County · 2,516 people56.4top 38.8%BStrongest: cost of living A−, schools B+·lowest: walkability C−
90ShrewsburySt. Louis County · 6,231 people56.3top 39.1%BStrongest: walkability A, health A·lowest: safety D
91Barnhartunincorporated, Jefferson County · 5,785 people55.9top 40.4%BStrongest: jobs & income A, health B·lowest: hazard risk C−
92ChillicotheLivingston County · 9,114 people55.9top 40.5%BStrongest: cost of living A, schools A·lowest: health D
93Gray Summitunincorporated, Franklin County · 2,991 people55.8top 40.6%BStrongest: cost of living A−, jobs & income A−·lowest: hazard risk C−
95CubaCrawford County · 3,288 people55.7top 40.8%BStrongest: schools A−, cost of living A−·lowest: health D−
96Richmond HeightsSt. Louis County · 9,093 people55.6top 41.1%BStrongest: schools A+, health A+·lowest: safety D−
97Platte CityPlatte County · 4,911 people55.3top 41.8%BStrongest: schools A−, jobs & income B+·lowest: walkability C+
98Oak GroveJackson County · 9,370 people55.2top 42.0%BStrongest: hazard risk B+, schools B+·lowest: health C
99Murphyunincorporated, Jefferson County · 8,285 people55.1top 42.3%BStrongest: cost of living A, jobs & income B·lowest: hazard risk D
100Moscow MillsLincoln County · 4,388 people54.9top 43.1%BStrongest: safety A−, cost of living B+·lowest: walkability D
101Grand River TownshipDeKalb County · 3,258 people54.8top 43.3%BStrongest: cost of living B+, schools B+·lowest: health C−
102PeculiarCass County · 6,365 people54.7top 43.4%BStrongest: jobs & income A−, health B·lowest: walkability C
103Valley ParkSt. Louis County · 6,767 people54.7top 43.6%BStrongest: schools A, health A−·lowest: hazard risk D
104HillsboroJefferson County · 3,493 people54.5top 43.9%BStrongest: cost of living B+, schools B·lowest: hazard risk C
105Monroe CityMonroe County · 2,714 people54.1top 45.0%BStrongest: schools B+, cost of living B+·lowest: health C−
106Carl JunctionJasper County · 8,484 people54.0top 45.5%B−Strongest: jobs & income B+, schools B+·lowest: hazard risk C
107EldonMiller County · 4,785 people53.9top 45.6%B−Strongest: schools A−, hazard risk B+·lowest: health C−
108Mount VernonLawrence County · 4,835 people53.9top 45.6%B−Strongest: cost of living A−, walkability B+·lowest: health D
111BethanyHarrison County · 2,956 people52.2bottom 49.4%B−Strongest: walkability A−, cost of living A−·lowest: health C−
112TrentonGrundy County · 5,557 people52.0bottom 48.8%B−Strongest: walkability A, cost of living A·lowest: health D
113MarshfieldWebster County · 8,078 people51.9bottom 48.6%B−Strongest: cost of living A, walkability A−·lowest: safety C−
114Imperialunincorporated, Jefferson County · 5,488 people51.6bottom 47.9%B−Strongest: jobs & income B+, cost of living B·lowest: hazard risk C
115BucknerJackson County · 2,891 people51.5bottom 47.7%B−Strongest: cost of living A−, hazard risk B·lowest: safety C+
117Pike TownshipStoddard County · 3,577 people51.4bottom 47.2%B−Strongest: cost of living A+, schools A−·lowest: jobs & income D
118Bowling GreenPike County · 4,472 people51.4bottom 47.2%B−Strongest: cost of living A−, walkability A−·lowest: jobs & income D
120Castor TownshipStoddard County · 4,651 people51.1bottom 46.6%B−Strongest: cost of living A, schools A−·lowest: health D
121ForsythTaney County · 2,752 people50.3bottom 44.5%C+Strongest: schools A−, walkability B+·lowest: hazard risk C−
124OwensvilleGasconade County · 2,802 people49.8bottom 43.2%C+Strongest: cost of living A, safety B·lowest: health D
125StraffordGreene County · 2,789 people49.7bottom 42.9%C+Strongest: schools A−, cost of living A−·lowest: safety C−
126St. JamesPhelps County · 3,925 people49.6bottom 42.6%C+Strongest: hazard risk A−, walkability A−·lowest: jobs & income D
127WarrentonWarren County · 9,667 people49.6bottom 42.4%C+Strongest: cost of living A−, safety B+·lowest: health C−
128MaconMacon County · 5,532 people49.5bottom 42.2%C+Strongest: cost of living A, walkability B+·lowest: schools D
129Duck Creek TownshipStoddard County · 3,016 people49.1bottom 41.1%C+Strongest: cost of living A, schools A−·lowest: health D
130PevelyJefferson County · 6,239 people48.9bottom 40.6%C+Strongest: walkability B+, cost of living B·lowest: hazard risk C−
131PacificFranklin County · 7,824 people48.9bottom 40.6%C+Strongest: jobs & income A−, cost of living B·lowest: hazard risk D
134LickingTexas County · 2,958 people48.7bottom 40.1%C+Strongest: safety A−, cost of living B+·lowest: jobs & income D−
135CameronClinton County · 7,341 people48.7bottom 40.1%C+Strongest: cost of living A, schools B+·lowest: jobs & income C−
137LouisianaPike County · 3,208 people48.5bottom 39.3%C+Strongest: cost of living A, walkability A−·lowest: jobs & income D−
139AvaDouglas County · 3,231 people47.6bottom 36.7%C+Strongest: safety B+, schools B+·lowest: jobs & income D
141Montgomery CityMontgomery County · 2,782 people47.2bottom 35.9%C+Strongest: cost of living A−, hazard risk B+·lowest: jobs & income C−
143HollisterTaney County · 4,690 people46.9bottom 35.3%C+Strongest: cost of living B+, schools B·lowest: hazard risk D
144TiptonMoniteau County · 2,766 people46.2bottom 33.4%CStrongest: cost of living A+, walkability A−·lowest: jobs & income D
145Park HillsSt. Francois County · 8,753 people46.1bottom 33.2%CStrongest: cost of living A−, walkability B+·lowest: hazard risk C−
146DexterStoddard County · 7,851 people46.1bottom 33.2%CStrongest: cost of living A−, schools A−·lowest: health D
147Villa Ridgeunincorporated, Franklin County · 2,835 people45.9bottom 32.7%CStrongest: cost of living A−, schools B−·lowest: walkability D
149SullivanFranklin County · 6,942 people45.7bottom 32.2%CStrongest: cost of living A, walkability A−·lowest: safety D
150Scott CityScott County · 4,593 people45.7bottom 32.0%CStrongest: cost of living A−, jobs & income B−·lowest: hazard risk D
152North Kansas CityClay County · 5,613 people45.6bottom 32.0%CStrongest: walkability A−, schools A−·lowest: safety D−
153St. RobertPulaski County · 5,602 people45.6bottom 31.9%CStrongest: schools B+, hazard risk B·lowest: jobs & income C−
154BuffaloDallas County · 3,550 people45.2bottom 30.8%CStrongest: cost of living A+, safety B·lowest: jobs & income D
155Mountain GroveWright County · 4,754 people45.1bottom 30.6%CStrongest: walkability B+, schools B+·lowest: health D−
159CarrolltonCarroll County · 3,499 people44.8bottom 29.6%CStrongest: walkability A, cost of living A−·lowest: jobs & income D
160Whiteman AFBunincorporated, Johnson County · 3,517 people44.6bottom 29.3%CStrongest: hazard risk A, schools A−·lowest: cost of living D
161BoonvilleCooper County · 7,867 people44.5bottom 28.9%CStrongest: cost of living A−, hazard risk B·lowest: jobs & income C−
162LexingtonLafayette County · 4,568 people44.1bottom 28.1%CStrongest: cost of living A, hazard risk B+·lowest: jobs & income D
163RichmondRay County · 5,968 people43.9bottom 27.7%CStrongest: cost of living A, walkability A−·lowest: health D
164VersaillesMorgan County · 2,713 people43.8bottom 27.4%CStrongest: cost of living A, hazard risk A−·lowest: health D
166WaynesvillePulaski County · 5,558 people43.2bottom 25.9%CStrongest: schools B+, health B·lowest: jobs & income C−
167De SotoJefferson County · 6,527 people43.1bottom 25.8%CStrongest: cost of living A+, schools B+·lowest: health D−
169ChaffeeScott County · 3,017 people43.0bottom 25.4%CStrongest: cost of living A, safety B−·lowest: schools C−
170AuroraLawrence County · 7,686 people42.9bottom 25.2%CStrongest: cost of living A−, walkability B·lowest: health D−
171Osage BeachCamden County · 5,079 people42.7bottom 24.7%C−Strongest: walkability B+, schools B+·lowest: health C−
172VandaliaAudrain County · 3,029 people42.7bottom 24.6%C−Strongest: cost of living A, hazard risk B−·lowest: health C−
173Center TownshipVernon County · 9,550 people42.5bottom 24.2%C−Strongest: walkability A−, cost of living B·lowest: health D
175Mount Pleasant TownshipBates County · 5,093 people42.2bottom 23.7%C−Strongest: cost of living A−, hazard risk B+·lowest: jobs & income D−
177PortagevilleNew Madrid County · 2,702 people41.8bottom 23.0%C−Strongest: schools A, cost of living B−·lowest: health D−
180CamdentonCamden County · 4,050 people41.3bottom 21.8%C−Strongest: walkability A−, schools B+·lowest: health D
181Black JackSt. Louis County · 6,547 people41.1bottom 21.3%C−Strongest: walkability A−, jobs & income B+·lowest: schools D
182DellwoodSt. Louis County · 4,825 people41.1bottom 21.3%C−Strongest: walkability A, cost of living A−·lowest: health D
183CassvilleBarry County · 3,301 people41.0bottom 21.1%C−Strongest: cost of living A, walkability A−·lowest: safety D
184Sugar CreekJackson County · 3,209 people40.8bottom 20.7%C−Strongest: cost of living A, walkability B·lowest: health D
185NormandySt. Louis County · 4,380 people40.8bottom 20.7%C−Strongest: walkability A+, cost of living A+·lowest: schools D−
186SalemDent County · 4,674 people40.6bottom 20.2%C−Strongest: cost of living A, schools C+·lowest: health D
188FredericktownMadison County · 4,584 people40.4bottom 19.7%C−Strongest: walkability A−, cost of living A−·lowest: jobs & income D
189Mountain ViewHowell County · 2,661 people40.3bottom 19.6%C−Strongest: cost of living A−, schools B·lowest: jobs & income D−
190PotosiWashington County · 2,568 people40.1bottom 19.3%C−Strongest: schools A, cost of living B+·lowest: safety D−
192Sherrill TownshipTexas County · 5,574 people40.0bottom 19.0%C−Strongest: cost of living B+, schools B·lowest: jobs & income D−
193Bonne TerreSt. Francois County · 6,636 people39.9bottom 18.9%C−Strongest: cost of living A, walkability B+·lowest: health D
194NorthwoodsSt. Louis County · 3,579 people39.9bottom 18.8%C−Strongest: walkability A, cost of living B+·lowest: schools D−
197DeslogeSt. Francois County · 4,819 people39.3bottom 17.7%C−Strongest: cost of living A, walkability B+·lowest: health D
198WindsorHenry County · 2,869 people39.2bottom 17.6%C−Strongest: cost of living A, walkability B+·lowest: health D−
201Windsor TownshipHenry County · 3,454 people38.9bottom 16.8%C−Strongest: cost of living A, walkability B·lowest: health D
204East PrairieMississippi County · 2,841 people38.2bottom 15.4%C−Strongest: cost of living A, safety B·lowest: health D−
205ClintonHenry County · 9,504 people37.6bottom 14.6%DStrongest: walkability B+, cost of living B+·lowest: safety D
207Pine LawnSt. Louis County · 2,682 people37.3bottom 14.1%DStrongest: walkability A+, cost of living A−·lowest: health D−
208RiversidePlatte County · 4,581 people37.3bottom 14.1%DStrongest: schools A−, hazard risk B−·lowest: safety D−
209Byrnes MillJefferson County · 3,183 people37.2bottom 13.9%DStrongest: cost of living B−, schools B−·lowest: hazard risk D
210City TownshipBarton County · 4,337 people37.0bottom 13.5%DStrongest: cost of living B, schools B−·lowest: health D−
212PerryvillePerry County · 8,593 people36.8bottom 13.2%DStrongest: walkability B+, cost of living B−·lowest: jobs & income D
215LamarBarton County · 4,337 people35.2bottom 10.8%DStrongest: cost of living B, schools B−·lowest: health D−
217NevadaVernon County · 8,404 people34.9bottom 10.5%DStrongest: walkability A, cost of living B+·lowest: safety D
218ButlerBates County · 4,317 people34.9bottom 10.4%DStrongest: cost of living A−, hazard risk B+·lowest: health D−
221St. ClairFranklin County · 4,813 people34.1bottom 9.5%DStrongest: cost of living B+, hazard risk B·lowest: health D
226Union TownshipDunklin County · 3,242 people33.4bottom 8.7%DStrongest: cost of living A−, schools C·lowest: health D−
228Piney TownshipTexas County · 5,071 people32.8bottom 7.8%DStrongest: cost of living B+, hazard risk C+·lowest: health D
230El Dorado SpringsCedar County · 3,642 people32.4bottom 7.4%DStrongest: hazard risk B, walkability B·lowest: health D
232Cotton Hill TownshipDunklin County · 4,700 people32.2bottom 7.1%DStrongest: cost of living A, walkability B·lowest: health D−
234Burdine TownshipTexas County · 3,327 people31.6bottom 6.5%DStrongest: cost of living B+, walkability C·lowest: health D
235BerkeleySt. Louis County · 8,026 people31.6bottom 6.5%DStrongest: walkability A, cost of living B+·lowest: safety D−
237Woodson TerraceSt. Louis County · 3,902 people30.6bottom 5.5%DStrongest: walkability B, cost of living B·lowest: health D
238New MadridNew Madrid County · 2,586 people30.4bottom 5.3%DStrongest: cost of living B+, jobs & income C+·lowest: hazard risk D
239MaldenDunklin County · 3,493 people30.4bottom 5.3%DStrongest: cost of living A−, walkability B+·lowest: health D−
240Glasgow Villageunincorporated, St. Louis County · 5,504 people30.4bottom 5.3%DStrongest: walkability A, cost of living B·lowest: health D−
242Breckenridge HillsSt. Louis County · 4,350 people30.2bottom 5.0%DStrongest: walkability A, cost of living B+·lowest: schools D
243St. JohnSt. Louis County · 6,441 people29.7bottom 4.5%D−Strongest: walkability B+, cost of living B·lowest: health D
244PagedaleSt. Louis County · 2,511 people29.6bottom 4.4%D−Strongest: walkability A, cost of living A−·lowest: schools D−
246CharlestonMississippi County · 4,731 people26.0bottom 2.0%D−Strongest: cost of living A−, walkability B+·lowest: health D−
247CaruthersvillePemiscot County · 5,211 people14.4bottom 0.1%D−Strongest: walkability B+, cost of living C·lowest: health D−
Method

How this list is made

Each town’s overall grade blends seven livability grades: cost of living (weight 18), safety (18), schools (16), health (14), jobs & income (12), walkability (8) and hazard risk (4). A town needs 2,500+ residents and three of the first four. Letters are national, so an A here means the same as an A in any state; the list is the same towns in the same order, ranked within Missouri. Towns without their own FBI figures are graded on the rest and their page says why.

Data years: crime 2023–2025 (FBI), Census ACS 2020–2024, CDC PLACES 2025, state school tests. How grades work

Quick answers

Questions people ask

What is the best small town in Missouri?

Among 155 graded towns of 2,500 to 9,999 residents, Glendale (St. Louis County) ranks first, with an A+; jobs & income (A+) and health (A+) are its strongest grades; cost of living (C) is its lowest. Green Park and Odessa follow.

How are these towns ranked?

By the overall grade, which blends seven livability grades from public data. The letter is national; the rank is within Missouri. The full method is on How grades work.

Why isn’t my town on this list?

The list covers towns of 2,500 to 9,999 residents with an overall grade (155 in Missouri). 172 smaller places have subject grades only; Larger towns are on the best places to live list. Every town is on the Missouri page.

Go deeper

More Missouri lists

Every list ranks the same 2,500+ towns, so a town’s rank means the same thing on each.

All Missouri rankings →
Other states

Best small towns in other states