Guest, Sign inJoin
Two Harbors Minnesota aerial viewTwo Harbors, #1 on this list · Photo: U.S. Army Corps of Engineers, photographer not specified or unknown · Public domain
Minnesota rankings · Climate

Towns with the coolest summers in Minnesota

Two Harbors has the coolest summers of Minnesota’s 270 towns of 2,500+: July afternoons average a high of 75° (NOAA 1991–2020 normals). The typical town here averages 82°; 35 of the 270 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

#1

Two Harbors

Lake County · 3,443 people
75°

July high·January low 4°·1 days of 90°+ a year

#2

Duluth

St. Louis County · 88,330 people
76°

July high·January low 5°·3 days of 90°+ a year

#3

Proctor

St. Louis County · 3,054 people
77°

July high·January low 3°·2 days of 90°+ a year

All 270 towns

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

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

#TownJuly highDays ≥90°January low
1Two HarborsLake County · 3,443 people75°14°average low
2DuluthSt. Louis County · 88,330 people76°35°average low
3ProctorSt. Louis County · 3,054 people77°23°average low
T4HermantownSt. Louis County · 10,110 people77°22°average low
T4Rice LakeSt. Louis County · 4,169 people77°20°average low
6ChisholmSt. Louis County · 4,625 people78°2−2°average low
T7Grand Lake TownshipSt. Louis County · 2,705 people78°2−2°average low
T7HibbingSt. Louis County · 15,823 people78°2−2°average low
T7International FallsKoochiching County · 5,481 people78°2−5°average low
T10CloquetCarlton County · 12,399 people78°60°average low
T10ElySt. Louis County · 3,231 people78°2−5°average low
T10Thomson TownshipCarlton County · 5,624 people78°61°average low
T10VirginiaSt. Louis County · 8,187 people78°2−3°average low
T14EvelethSt. Louis County · 3,381 people78°2−3°average low
T14Mountain IronSt. Louis County · 2,835 people78°2−3°average low
16White TownshipSt. Louis County · 3,088 people78°1−4°average low
17Northern TownshipBeltrami County · 3,701 people78°4−3°average low
T18BemidjiBeltrami County · 15,770 people79°4−3°average low
T18Bemidji TownshipBeltrami County · 4,031 people79°4−2°average low
T18CohassetItasca County · 2,728 people79°2−2°average low
T18Grand RapidsItasca County · 11,181 people79°6−2°average low
T18Harris TownshipItasca County · 3,364 people79°6−1°average low
23RoseauRoseau County · 2,685 people79°2−5°average low
24Park RapidsHubbard County · 4,447 people79°5−2°average low
T25Detroit LakesBecker County · 10,019 people79°7−2°average low
T25Moose LakeCarlton County · 2,948 people79°51°average low
27PerhamOtter Tail County · 3,746 people79°3−1°average low
28Thief River FallsPennington County · 8,799 people79°6−4°average low
29WadenaWadena County · 4,341 people80°30°average low
30CrosslakeCrow Wing County · 2,412 people80°40°average low
T31AlexandriaDouglas County · 15,045 people80°61°average low
T31Alexandria TownshipDouglas County · 3,114 people80°61°average low
T31Breezy PointCrow Wing County · 2,771 people80°40°average low
T31La Grand TownshipDouglas County · 4,309 people80°61°average low
T31Long PrairieTodd County · 3,830 people80°51°average low
36Pelican RapidsOtter Tail County · 2,608 people80°5−1°average low
37BrainerdCrow Wing County · 14,428 people80°51°average low
T38BaxterCrow Wing County · 9,217 people80°51°average low
T38Sylvan TownshipCass County · 3,030 people80°21°average low
40MoraKanabec County · 3,763 people80°53°average low
T41Dodge CenterDodge County · 2,951 people81°86°average low
T41Fergus FallsOtter Tail County · 14,246 people81°80°average low
T41KassonDodge County · 7,350 people81°86°average low
T41Sauk CentreStearns County · 4,663 people81°91°average low
T45AlbanyStearns County · 2,873 people81°92°average low
T45CrookstonPolk County · 7,375 people81°7−2°average low
T45MilacaMille Lacs County · 3,041 people81°53°average low
T45StewartvilleOlmsted County · 6,850 people81°56°average low
49ByronOlmsted County · 6,740 people81°86°average low
T50FoleyBenton County · 2,650 people81°93°average low
T50PrincetonMille Lacs County · 5,480 people81°74°average low
T52Blue Hill TownshipSherburne County · 2,625 people81°74°average low
T52CaledoniaHouston County · 2,768 people81°58°average low
T52Collegeville TownshipStearns County · 3,262 people81°93°average low
T52East Grand ForksPolk County · 8,906 people81°7−2°average low
T52GlenwoodPope County · 2,631 people81°91°average low
T52Livonia TownshipSherburne County · 6,436 people81°114°average low
T52MelroseStearns County · 3,888 people81°92°average low
T52Pine CityPine County · 3,820 people81°43°average low
T52Pokegama TownshipPine County · 2,884 people81°43°average low
T61Brockway TownshipStearns County · 3,016 people81°63°average low
T61St. CharlesWinona County · 4,090 people81°96°average low
T63Albert LeaFreeborn County · 18,217 people81°86°average low
T63AustinMower County · 26,689 people81°66°average low
T63Bradford TownshipIsanti County · 3,549 people81°54°average low
T63Little FallsMorrison County · 9,277 people81°142°average low
T63Marion TownshipOlmsted County · 4,111 people81°56°average low
T63Orrock TownshipSherburne County · 3,698 people81°74°average low
T63OwatonnaSteele County · 26,633 people81°96°average low
T63Wakefield TownshipStearns County · 2,829 people81°93°average low
T63ZimmermanSherburne County · 6,904 people81°74°average low
T72BarnesvilleClay County · 2,767 people81°50°average low
T72CambridgeIsanti County · 11,090 people81°54°average low
T72Cambridge TownshipIsanti County · 2,592 people81°54°average low
T72PaynesvilleStearns County · 2,591 people81°103°average low
T72Pine IslandGoodhue County · 3,911 people81°76°average low
T72Rush CityChisago County · 3,300 people81°94°average low
T72Sauk RapidsBenton County · 13,768 people81°93°average low
T79Big LakeSherburne County · 12,929 people81°114°average low
T79ChatfieldFillmore County · 3,018 people81°86°average low
T79Cold SpringStearns County · 4,329 people81°93°average low
T79MonticelloWright County · 15,670 people81°64°average low
T79Palmer TownshipSherburne County · 2,633 people81°93°average low
T79PlainviewWabasha County · 3,482 people81°126°average low
T79St. JosephStearns County · 6,846 people81°93°average low
T79WasecaWaseca County · 9,035 people81°106°average low
T79ZumbrotaGoodhue County · 4,072 people81°76°average low
T88AnnandaleWright County · 3,801 people82°34°average low
T88BeckerSherburne County · 5,425 people82°74°average low
T88Becker TownshipSherburne County · 5,698 people82°74°average low
T88BuffaloWright County · 16,878 people82°64°average low
T88Corinna TownshipWright County · 2,596 people82°34°average low
T88IsantiIsanti County · 7,714 people82°54°average low
T88LonsdaleRice County · 5,117 people82°96°average low
T88Monticello TownshipWright County · 3,374 people82°64°average low
T88New London TownshipKandiyohi County · 2,965 people82°103°average low
T88RochesterOlmsted County · 124,292 people82°56°average low
T88SartellStearns County · 19,918 people82°93°average low
T88Silver Creek TownshipWright County · 2,620 people82°64°average low
T88St. CloudStearns County · 72,647 people82°93°average low
T88St. FrancisAnoka County · 8,635 people82°44°average low
T88Waite ParkStearns County · 8,450 people82°93°average low
T88Watab TownshipBenton County · 3,478 people82°63°average low
T104Cascade TownshipOlmsted County · 2,810 people82°86°average low
T104Elk RiverSherburne County · 27,896 people82°114°average low
T104Elko New MarketScott County · 5,300 people82°77°average low
T104LitchfieldMeeker County · 6,528 people82°74°average low
T104MontgomeryLe Sueur County · 3,539 people82°66°average low
T104MorrisStevens County · 5,150 people82°72°average low
T104OakdaleWashington County · 30,588 people82°87°average low
T104OtsegoWright County · 24,525 people82°115°average low
T104St. AugustaStearns County · 3,799 people82°93°average low
T113AlbertvilleWright County · 8,544 people82°115°average low
T113Chisago Lake TownshipChisago County · 4,958 people82°114°average low
T113LakevilleDakota County · 79,270 people82°77°average low
T113New Market TownshipScott County · 3,574 people82°77°average low
T113NowthenAnoka County · 4,630 people82°114°average low
T113Oak GroveAnoka County · 9,476 people82°45°average low
T113RockfordWright County · 4,827 people82°85°average low
T120CokatoWright County · 2,793 people82°94°average low
T120CorcoranHennepin County · 9,269 people82°95°average low
T120GreenfieldHennepin County · 2,962 people82°85°average low
T120HanoverWright County · 4,392 people82°65°average low
T120Le CenterLe Sueur County · 2,524 people82°106°average low
T120May TownshipWashington County · 2,638 people82°46°average low
T120MontroseWright County · 3,986 people82°85°average low
T120Rockford TownshipWright County · 3,474 people82°85°average low
T120RogersHennepin County · 15,606 people82°115°average low
T120ScandiaWashington County · 3,979 people82°146°average low
T120WoodburyWashington County · 81,558 people82°87°average low
T131Apple ValleyDakota County · 55,248 people82°87°average low
T131DelanoWright County · 7,788 people82°85°average low
T131DilworthClay County · 4,823 people82°100°average low
T131East BethelAnoka County · 12,605 people82°45°average low
T131FaribaultRice County · 25,040 people82°96°average low
T131Franklin TownshipWright County · 2,939 people82°85°average low
T131GrantWashington County · 3,954 people82°46°average low
T131HugoWashington County · 17,167 people82°126°average low
T131HutchinsonMcLeod County · 14,655 people82°105°average low
T131Lake ElmoWashington County · 14,376 people82°47°average low
T131Linwood TownshipAnoka County · 5,403 people82°145°average low
T131MahtomediWashington County · 8,189 people82°126°average low
T131MaplewoodRamsey County · 40,717 people82°127°average low
T131MedinaHennepin County · 7,460 people82°96°average low
T131North BranchChisago County · 12,398 people82°104°average low
T131OronoHennepin County · 8,301 people82°96°average low
T131PipestonePipestone County · 4,100 people82°116°average low
T131PlymouthHennepin County · 78,942 people82°96°average low
T131RosevilleRamsey County · 35,663 people82°107°average low
T131ShoreviewRamsey County · 26,906 people82°127°average low
T131St. MichaelWright County · 22,498 people82°65°average low
T131StacyChisago County · 4,367 people82°144°average low
T131Vadnais HeightsRamsey County · 13,052 people82°127°average low
T131WabashaWabasha County · 2,599 people82°77°average low
T131WatertownCarver County · 4,789 people82°85°average low
T131White Bear LakeRamsey County · 23,392 people82°126°average low
T131White Bear TownshipRamsey County · 10,399 people82°126°average low
T158AndoverAnoka County · 33,874 people82°105°average low
T158DaytonHennepin County · 11,402 people82°115°average low
T158Forest LakeWashington County · 20,952 people82°145°average low
T158Ham LakeAnoka County · 17,104 people82°105°average low
T158IndependenceHennepin County · 3,763 people82°85°average low
T158LindstromChisago County · 5,039 people82°145°average low
T158MinnetristaHennepin County · 9,458 people82°85°average low
T158MoorheadClay County · 46,533 people82°100°average low
T158NorthfieldRice County · 21,992 people82°96°average low
T158RamseyAnoka County · 29,624 people82°115°average low
T158St. AnthonyHennepin County · 9,989 people82°107°average low
T158West St. PaulDakota County · 21,950 people82°127°average low
T158WindomCottonwood County · 4,817 people82°136°average low
T158WyomingChisago County · 8,121 people82°145°average low
T172AftonWashington County · 2,960 people82°87°average low
T172BurnsvilleDakota County · 65,244 people82°127°average low
T172Cedar Lake TownshipScott County · 3,080 people82°67°average low
T172CentervilleAnoka County · 3,978 people82°126°average low
T172Chisago CityChisago County · 5,955 people82°145°average low
T172Circle PinesAnoka County · 4,967 people82°126°average low
T172ColumbusAnoka County · 4,356 people82°145°average low
T172Credit River5,644 people82°77°average low
T172DeephavenHennepin County · 3,794 people82°76°average low
T172Eagle LakeBlue Earth County · 3,357 people82°106°average low
T172Empire3,063 people82°87°average low
T172ExcelsiorHennepin County · 2,316 people82°76°average low
T172FarmingtonDakota County · 25,425 people82°77°average low
T172JacksonJackson County · 3,305 people82°86°average low
T172Lino LakesAnoka County · 23,220 people82°126°average low
T172Little CanadaRamsey County · 10,567 people82°127°average low
T172Maple GroveHennepin County · 73,893 people82°96°average low
T172MinnetonkaHennepin County · 53,969 people82°97°average low
T172Mounds ViewRamsey County · 12,786 people82°126°average low
T172New BrightonRamsey County · 22,159 people82°126°average low
T172North OaksRamsey County · 5,283 people82°126°average low
T172Norwood Young AmericaCarver County · 3,777 people82°116°average low
T172Oak Park HeightsWashington County · 4,625 people82°186°average low
T172RosemountDakota County · 31,881 people82°87°average low
T172Spring Lake TownshipScott County · 3,498 people82°67°average low
T172VictoriaCarver County · 12,447 people82°116°average low
T172WaconiaCarver County · 14,113 people82°116°average low
T172WayzataHennepin County · 4,344 people82°96°average low
T172West Lakeland TownshipWashington County · 3,931 people82°187°average low
T172WillmarKandiyohi County · 22,001 people82°84°average low
T202AnokaAnoka County · 18,169 people82°105°average low
T202BlaineAnoka County · 76,603 people82°126°average low
T202Cannon FallsGoodhue County · 4,209 people82°106°average low
T202ChamplinHennepin County · 23,125 people82°105°average low
T202Columbia HeightsAnoka County · 22,482 people82°186°average low
T202Coon RapidsAnoka County · 64,193 people82°106°average low
T202Cottage GroveWashington County · 43,604 people82°87°average low
T202EaganDakota County · 67,109 people82°127°average low
T202Falcon HeightsRamsey County · 5,071 people82°107°average low
T202Golden ValleyHennepin County · 21,325 people82°96°average low
T202Inver Grove HeightsDakota County · 36,873 people82°87°average low
T202LexingtonAnoka County · 3,081 people82°126°average low
T202MayerCarver County · 2,563 people82°85°average low
T202MoundHennepin County · 9,064 people82°76°average low
T202New PragueScott County · 8,238 people82°66°average low
T202Spring Lake ParkAnoka County · 7,127 people82°126°average low
T218ChanhassenCarver County · 25,748 people82°76°average low
T218ChaskaCarver County · 30,513 people82°116°average low
T218GlencoeMcLeod County · 5,632 people82°65°average low
T218HopkinsHennepin County · 19,523 people82°97°average low
T218MankatoBlue Earth County · 46,529 people82°106°average low
T218New HopeHennepin County · 20,807 people82°96°average low
T218OsseoHennepin County · 2,534 people82°96°average low
T218Prior LakeScott County · 28,140 people82°147°average low
T218ShorewoodHennepin County · 7,620 people82°76°average low
T218St. Louis ParkHennepin County · 50,027 people82°97°average low
T218StillwaterWashington County · 19,354 people82°46°average low
T229BensonSwift County · 3,444 people82°123°average low
T229Brooklyn CenterHennepin County · 31,846 people82°126°average low
T229Brooklyn ParkHennepin County · 83,543 people82°126°average low
T229CrystalHennepin County · 22,239 people82°96°average low
T229FridleyAnoka County · 30,829 people82°186°average low
T229JordanScott County · 6,988 people82°66°average low
T229Lake CrystalBlue Earth County · 2,470 people82°106°average low
T229MinneapolisHennepin County · 430,324 people82°127°average low
T229Red WingGoodhue County · 16,805 people82°106°average low
T229RobbinsdaleHennepin County · 14,030 people82°96°average low
T229Sleepy EyeBrown County · 3,461 people82°76°average low
T229St. Paul ParkWashington County · 5,396 people82°87°average low
T241Blue EarthFaribault County · 3,165 people82°107°average low
T241CarverCarver County · 7,198 people82°116°average low
T241Eden PrairieHennepin County · 63,075 people82°147°average low
T241EdinaHennepin County · 54,356 people82°127°average low
T241FairmontMartin County · 10,099 people82°117°average low
T241GoodviewWinona County · 4,122 people82°128°average low
T241HastingsDakota County · 22,563 people82°87°average low
T241St. PaulRamsey County · 306,684 people82°107°average low
T241St. PeterNicollet County · 12,275 people82°106°average low
T250BayportWashington County · 3,721 people83°186°average low
T250Belle PlaineScott County · 7,632 people83°66°average low
T250Mendota HeightsDakota County · 11,475 people83°127°average low
T250RichfieldHennepin County · 36,593 people83°127°average low
T250St. JamesWatonwan County · 4,863 people83°126°average low
T250WorthingtonNobles County · 13,979 people83°106°average low
T256BloomingtonHennepin County · 89,034 people83°127°average low
T256ShakopeeScott County · 49,366 people83°147°average low
T258New UlmBrown County · 13,863 people83°76°average low
T258SavageScott County · 32,970 people83°147°average low
T260Le SueurLe Sueur County · 4,210 people83°106°average low
T260North MankatoNicollet County · 14,165 people83°106°average low
T260South St. PaulDakota County · 20,532 people83°127°average low
T263La CrescentHouston County · 5,261 people83°189°average low
T263Lake CityWabasha County · 5,306 people83°126°average low
265LuverneRock County · 4,984 people83°186°average low
T266MontevideoChippewa County · 5,335 people83°114°average low
T266WinonaWinona County · 26,530 people83°128°average low
268Redwood FallsRedwood County · 5,040 people83°166°average low
269Granite FallsYellow Medicine County · 2,691 people83°205°average low
270MarshallLyon County · 14,171 people84°186°average low
Quick answers

Questions people ask

Which Minnesota town has the coolest summers?

Two Harbors (Lake County): July afternoons average a high of 75°. Duluth (76°) and Proctor (77°) 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 (270 in Minnesota): 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 Minnesota page.

Go deeper

More Minnesota lists

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

All Minnesota rankings →
Other states

Coolest summers in other states