Guest, Sign inJoin
Missouri rankings · Climate

Towns with the coolest summers in Missouri

Union Township has the coolest summers of Missouri’s 236 towns of 2,500+: July afternoons average a high of 85° (NOAA 1991–2020 normals). The typical town here averages 88°; none of the 236 stay under 80°.

The average July high. NOAA U.S. Climate Normals, 1991–2020, from NOAA’s 5 km grid at each town’s center; one town for each grid cell. A described list: no letters. How grades work

#T2

Kirksville

Adair County · 17,863 people
86°

July high·January low 16°·22 days of 90°+ a year

All 236 towns

July high, lowest first. Towns with the same figure share a rank (T = tied; 232 towns here).

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

#TownJuly highDays ≥90°January low
1Union TownshipPutnam County · 2,086 people85°2015°average low
T2KirksvilleAdair County · 17,863 people86°2216°average low
T2Polk TownshipNodaway County · 13,673 people86°3115°average low
4Monroe CityMonroe County · 2,714 people86°3018°average low
5Bowling GreenPike County · 4,472 people86°2920°average low
T6BethanyHarrison County · 2,956 people86°2416°average low
T6MaconMacon County · 5,532 people86°3618°average low
8Marceline TownshipLinn County · 2,589 people87°2819°average low
T9MoberlyRandolph County · 13,719 people87°2719°average low
T9SavannahAndrew County · 5,107 people87°3318°average low
T11HannibalMarion County · 16,804 people87°2419°average low
T11PalmyraMarion County · 3,649 people87°3119°average low
T13Bethany TownshipHarrison County · 3,363 people87°2416°average low
T13CantonLewis County · 2,763 people87°2218°average low
T13CentraliaBoone County · 4,767 people87°3820°average low
T13LouisianaPike County · 3,208 people87°3420°average low
T13VandaliaAudrain County · 3,029 people87°2720°average low
T18LathropClinton County · 2,253 people87°3518°average low
T18LawsonRay County · 2,541 people87°3719°average low
T18Mountain GroveWright County · 4,754 people87°2723°average low
T21Brookfield TownshipLinn County · 4,711 people87°2818°average low
T21Country ClubAndrew County · 2,512 people87°3318°average low
T23CameronClinton County · 7,341 people87°3518°average low
T23Grand River TownshipDeKalb County · 3,258 people87°3518°average low
T23MexicoAudrain County · 11,558 people87°3820°average low
T26Burdine TownshipTexas County · 3,327 people87°2723°average low
T26St. JosephBuchanan County · 71,001 people87°3918°average low
T26StraffordGreene County · 2,789 people87°3323°average low
T29Excelsior SpringsClay County · 10,819 people87°3719°average low
T29MarshfieldWebster County · 8,078 people87°3322°average low
T29Park HillsSt. Francois County · 8,753 people87°3222°average low
T29RogersvilleWebster County · 5,754 people87°2223°average low
T29Trenton TownshipGrundy County · 5,964 people87°4117°average low
T29WarrentonWarren County · 9,667 people87°3121°average low
T35Montgomery CityMontgomery County · 2,782 people88°3120°average low
T35Pleasant HillCass County · 8,956 people88°3720°average low
T37AshlandBoone County · 5,221 people88°3521°average low
T37Carrollton TownshipCarroll County · 3,846 people88°3819°average low
T37ChillicotheLivingston County · 9,114 people88°3618°average low
T37FarmingtonSt. Francois County · 19,226 people88°3222°average low
T37IndependenceJackson County · 121,675 people88°3120°average low
T37TiptonMoniteau County · 2,766 people88°3021°average low
T37TrentonGrundy County · 5,557 people88°4117°average low
T44BeltonCass County · 26,193 people88°3721°average low
T44Blue SpringsJackson County · 61,632 people88°3120°average low
T44FultonCallaway County · 12,853 people88°2920°average low
T44GladstoneClay County · 27,497 people88°4720°average low
T44Grain ValleyJackson County · 16,908 people88°3120°average low
T44GreenwoodJackson County · 6,315 people88°3720°average low
T44Sherrill TownshipTexas County · 5,574 people88°3423°average low
T44Wright CityWarren County · 5,854 people88°3121°average low
T52CarrolltonCarroll County · 3,499 people88°3820°average low
T52EllisvilleSt. Louis County · 10,315 people88°4423°average low
T52FayetteHoward County · 2,848 people88°3020°average low
T52LebanonLaclede County · 15,663 people88°3823°average low
T52ParkvillePlatte County · 9,093 people88°3620°average low
T52RaymoreCass County · 26,633 people88°3720°average low
T52RaytownJackson County · 29,154 people88°3121°average low
T52SalemDent County · 4,674 people88°3922°average low
T52VersaillesMorgan County · 2,713 people88°3022°average low
T61CaliforniaMoniteau County · 4,523 people88°3021°average low
T61EldonMiller County · 4,785 people88°3923°average low
T61FredericktownMadison County · 4,584 people88°3522°average low
T61GrandviewJackson County · 26,653 people88°3820°average low
T61KearneyClay County · 11,296 people88°3719°average low
T61Lee's SummitJackson County · 107,514 people88°3820°average low
T61LexingtonLafayette County · 4,568 people88°3720°average low
T61MarshallSaline County · 13,766 people88°3420°average low
T61OdessaLafayette County · 5,721 people88°3320°average low
T61PotosiWashington County · 2,568 people88°2321°average low
T61RichmondRay County · 5,968 people88°3420°average low
T61SmithvilleClay County · 11,160 people88°3020°average low
T73AvaDouglas County · 3,231 people88°2824°average low
T73BerkeleySt. Louis County · 8,026 people88°4723°average low
T73Chillicothe TownshipLivingston County · 9,205 people88°3618°average low
T73ColumbiaBoone County · 130,851 people88°4121°average low
T73FergusonSt. Louis County · 17,953 people88°4723°average low
T73NormandySt. Louis County · 4,380 people88°4723°average low
T73OlivetteSt. Louis County · 8,937 people88°4723°average low
T73OverlandSt. Louis County · 15,474 people88°4723°average low
T73OwensvilleGasconade County · 2,802 people88°3121°average low
T73SedaliaPettis County · 22,621 people88°3121°average low
T73St. AnnSt. Louis County · 12,617 people88°4723°average low
T73TroyLincoln County · 15,201 people88°3121°average low
T73WildwoodSt. Louis County · 34,955 people88°4422°average low
T86Black JackSt. Louis County · 6,547 people88°4723°average low
T86BucknerJackson County · 2,891 people88°3120°average low
T86ChesterfieldSt. Louis County · 49,309 people88°4123°average low
T86DellwoodSt. Louis County · 4,825 people88°4723°average low
T86FlorissantSt. Louis County · 51,124 people88°4723°average low
T86High Ridgeunincorporated, Jefferson County · 3,714 people88°4423°average low
T86Holts SummitCallaway County · 4,773 people88°3722°average low
T86LibertyClay County · 31,319 people88°3120°average low
T86Mountain ViewHowell County · 2,661 people88°2823°average low
T86Old Jamestownunincorporated, St. Louis County · 20,651 people88°4723°average low
T86PeculiarCass County · 6,365 people88°3721°average low
T86Pleasant ValleyClay County · 2,747 people88°4720°average low
T86SullivanFranklin County · 6,942 people88°3121°average low
T99BallwinSt. Louis County · 30,901 people88°4123°average low
T99BoonvilleCooper County · 7,867 people88°3921°average low
T99CleverChristian County · 3,143 people88°3624°average low
T99CrestwoodSt. Louis County · 12,207 people88°4723°average low
T99Creve CoeurSt. Louis County · 18,480 people88°4123°average low
T99CubaCrawford County · 3,288 people88°3621°average low
T99Des PeresSt. Louis County · 9,102 people88°4123°average low
T99GlendaleSt. Louis County · 6,060 people88°4723°average low
T99HigginsvilleLafayette County · 4,770 people88°2720°average low
T99LadueSt. Louis County · 8,934 people88°4723°average low
T99Lake St. LouisSt. Charles County · 19,129 people88°3622°average low
T99NorthwoodsSt. Louis County · 3,579 people88°4723°average low
T99O'FallonSt. Charles County · 96,101 people88°3622°average low
T99Oak GroveJackson County · 9,370 people88°3320°average low
T99PerryvillePerry County · 8,593 people88°3924°average low
T99Piney TownshipTexas County · 5,071 people88°2923°average low
T99RiversidePlatte County · 4,581 people88°4720°average low
T99RollaPhelps County · 20,588 people88°4323°average low
T99Sugar CreekJackson County · 3,209 people88°3120°average low
T99Town and CountrySt. Louis County · 11,619 people88°4123°average low
T99WentzvilleSt. Charles County · 49,495 people88°3622°average low
T120Bellefontaine NeighborsSt. Louis County · 10,368 people88°4723°average low
T120Bonne TerreSt. Francois County · 6,636 people88°3222°average low
T120HarrisonvilleCass County · 10,040 people88°3721°average low
T120NixaChristian County · 26,597 people88°4623°average low
T120Spanish Lakeunincorporated, St. Louis County · 17,873 people88°4723°average low
T120St. CharlesSt. Charles County · 72,561 people88°3422°average low
T120St. JamesPhelps County · 3,925 people88°4322°average low
T120St. PaulSt. Charles County · 3,849 people88°3622°average low
T120Sunset HillsSt. Louis County · 9,075 people88°4123°average low
T120Terre du Lacunincorporated, St. Francois County · 2,516 people88°2322°average low
T120WindsorHenry County · 2,869 people88°2922°average low
T131Byrnes MillJefferson County · 3,183 people88°4423°average low
T131CassvilleBarry County · 3,301 people88°2625°average low
T131Dardenne PrairieSt. Charles County · 15,032 people88°3622°average low
T131JenningsSt. Louis County · 13,093 people88°4723°average low
T131Knob NosterJohnson County · 2,997 people88°4021°average low
T131MarionvilleLawrence County · 2,108 people88°3624°average low
T131Moline AcresSt. Louis County · 2,093 people88°4723°average low
T131Moscow MillsLincoln County · 4,388 people88°3121°average low
T131Murphyunincorporated, Jefferson County · 8,285 people88°4123°average low
T131Platte CityPlatte County · 4,911 people88°3620°average low
T131RepublicGreene County · 22,404 people88°4023°average low
T131SpringfieldGreene County · 169,847 people88°4023°average low
T131St. ClairFranklin County · 4,813 people88°5022°average low
T131St. LouisSt. Louis city · 278,144 people88°4724°average low
T131University CitySt. Louis County · 34,657 people88°4723°average low
T131Villa Ridgeunincorporated, Franklin County · 2,835 people88°5022°average low
T131Whiteman AFBunincorporated, Johnson County · 3,517 people88°2521°average low
T148AuroraLawrence County · 7,686 people88°3624°average low
T148BridgetonSt. Louis County · 11,277 people88°4723°average low
T148Clarkson ValleySt. Louis County · 2,540 people88°4423°average low
T148Concordunincorporated, St. Louis County · 18,368 people88°3924°average low
T148CottlevilleSt. Charles County · 6,717 people88°3622°average low
T148Gray Summitunincorporated, Franklin County · 2,991 people88°4022°average low
T148HazelwoodSt. Louis County · 24,849 people88°4723°average low
T148HillsboroJefferson County · 3,493 people88°3823°average low
T148Jefferson CityCole County · 42,489 people88°3722°average low
T148OzarkChristian County · 23,544 people88°4623°average low
T148St. PetersSt. Charles County · 61,479 people88°3922°average low
T148Weldon SpringSt. Charles County · 5,301 people88°3622°average low
T148Windsor TownshipHenry County · 3,454 people88°2522°average low
T161Afftonunincorporated, St. Louis County · 19,052 people89°4724°average low
T161BuffaloDallas County · 3,550 people89°3422°average low
T161DeslogeSt. Francois County · 4,819 people89°3222°average low
T161Fort Leonard Woodunincorporated, Pulaski County · 15,432 people89°3523°average low
T161KirkwoodSt. Louis County · 29,331 people89°4123°average low
T161ManchesterSt. Louis County · 18,069 people89°4123°average low
T161MaplewoodSt. Louis County · 8,033 people89°4724°average low
T161MonettBarry County · 10,248 people89°3424°average low
T161New HavenFranklin County · 2,397 people89°3121°average low
T161Webster GrovesSt. Louis County · 23,450 people89°4723°average low
T171BattlefieldGreene County · 6,361 people89°4023°average low
T171CamdentonCamden County · 4,050 people89°3523°average low
T171Kansas CityJackson County · 521,220 people89°3620°average low
T171Maryland HeightsSt. Louis County · 27,559 people89°4123°average low
T171Mehlvilleunincorporated, St. Louis County · 29,805 people89°3924°average low
T171Ste. GenevieveSte. Genevieve County · 5,065 people89°5824°average low
T171Valley ParkSt. Louis County · 6,767 people89°4123°average low
T178FentonSt. Louis County · 4,060 people89°4123°average low
T178St. RobertPulaski County · 5,602 people89°3823°average low
T178WarrensburgJohnson County · 20,283 people89°4021°average low
T178WaynesvillePulaski County · 5,558 people89°3823°average low
T182ArnoldJefferson County · 20,994 people89°3823°average low
T182Barnhartunincorporated, Jefferson County · 5,785 people89°3823°average low
T182De SotoJefferson County · 6,527 people89°3823°average low
T182EurekaSt. Louis County · 13,422 people89°4422°average low
T182Mount VernonLawrence County · 4,835 people89°4624°average low
T182Oakvilleunincorporated, St. Louis County · 35,333 people89°3924°average low
T182PacificFranklin County · 7,824 people89°4422°average low
T182UnionFranklin County · 13,445 people89°5022°average low
T190BolivarPolk County · 11,994 people89°4123°average low
T190JacksonCape Girardeau County · 16,033 people89°5725°average low
T190Lemayunincorporated, St. Louis County · 16,228 people89°3924°average low
T190West PlainsHowell County · 12,780 people89°4424°average low
T190WillardGreene County · 6,904 people89°4023°average low
T195FestusJefferson County · 14,066 people89°3823°average low
T195WashingtonFranklin County · 15,906 people89°4021°average low
T197Cape GirardeauCape Girardeau County · 40,977 people89°4726°average low
T197Mount Pleasant TownshipBates County · 5,093 people89°4722°average low
T197PevelyJefferson County · 6,239 people89°3823°average low
T200CharlestonMississippi County · 4,731 people89°4227°average low
T200El Dorado SpringsCedar County · 3,642 people89°4223°average low
T200Osage BeachCamden County · 5,079 people89°3523°average low
T200Scott CityScott County · 4,593 people89°4726°average low
T204Castor TownshipStoddard County · 4,651 people89°4427°average low
T204ChaffeeScott County · 3,017 people89°4726°average low
T204ClintonHenry County · 9,504 people89°4222°average low
T204East PrairieMississippi County · 2,841 people89°5628°average low
T208Center TownshipVernon County · 9,550 people90°4224°average low
T208NeoshoNewton County · 14,078 people90°4125°average low
T208NevadaVernon County · 8,404 people90°4224°average low
T208New MadridNew Madrid County · 2,586 people90°5628°average low
T208Pike TownshipStoddard County · 3,577 people90°4426°average low
T213GranbyNewton County · 2,113 people90°4124°average low
T213PiedmontWayne County · 1,862 people90°5024°average low
T213SikestonScott County · 15,983 people90°5628°average low
T216DexterStoddard County · 7,851 people90°5927°average low
T216LamarBarton County · 4,337 people90°4224°average low
T216PortagevilleNew Madrid County · 2,702 people90°4529°average low
T219BransonTaney County · 12,921 people90°5325°average low
T219HollisterTaney County · 4,690 people90°4925°average low
T221CarthageJasper County · 15,895 people90°5125°average low
T221Duck Creek TownshipStoddard County · 3,016 people90°5226°average low
T221Liberty TownshipStoddard County · 14,741 people90°5927°average low
T221Poplar BluffButler County · 16,295 people90°5826°average low
T225CaruthersvillePemiscot County · 5,211 people90°5430°average low
T225Webb CityJasper County · 13,459 people90°5325°average low
T227Cotton Hill TownshipDunklin County · 4,700 people90°5928°average low
T227ForsythTaney County · 2,752 people90°5325°average low
T227JoplinJasper County · 53,930 people90°5325°average low
T227MaldenDunklin County · 3,493 people90°5928°average low
T227Union TownshipDunklin County · 3,242 people90°5928°average low
T232Independence TownshipDunklin County · 11,792 people90°6529°average low
T232KennettDunklin County · 10,118 people90°6529°average low
T232OronogoJasper County · 3,204 people90°5325°average low
T235AndersonMcDonald County · 2,073 people90°3025°average low
T235Carl JunctionJasper County · 8,484 people90°5325°average low
Quick answers

Questions people ask

Which Missouri town has the coolest summers?

Union Township (Putnam County): July afternoons average a high of 85°. Kirksville (86°) and Polk Township (86°) follow.

How are these towns ranked?

By the average July high (the warmest month’s afternoons), lowest first, on NOAA’s 1991–2020 normals, read from its 5 km grid at each town’s center. Towns with the same figure share a rank (T); the figure and the state rank are the ones on each town’s Climate page. How grades work.

Why isn’t my town on this list?

The list covers towns of 2,500+ residents, one for each of NOAA’s 5 km grid cells (236 in Missouri): where towns share a cell, one of them stands for it, since the grid gives them the same figures. Every town’s own figures are on its Climate page. 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

Coolest summers in other states