The Town Files

The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters

Ranked on The Town Files lifestyle rankings among 165 towns of 500–10,000 people in Minnesota, scoring every town on all of these at once. #1 is Caledonia, MN.

Map of the 15 towns123456789101112131415
Numbers match the ranking.
The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters1. Caledoniascore 902. Windomscore 873. Blue Earthscore 844. Jacksonscore 815. La Crescentscore 816. Pipestonescore 807. Sleepy Eyescore 798. Luvernescore 779. Two Harborsscore 7710. Arden Hillsscore 7511. Goodviewscore 7312. Chatfieldscore 7213. Eagle Lakescore 7114. Zumbrotascore 7115. Plainviewscore 71
  1. 15Plainview, Minnesota

    Retirement: 75th percentile · January average low (°F): 68th percentile · Home value ÷ income: 69th percentile

    Plainview is a city of 3,483 people in Wabasha County, Minnesota. Homes have a median value of $245,300 against household income of $82,926; January lows average 4°F.

    3,483 people · Wabasha County · median home $245,300 · income $82,926 · Jan low 4°F · 48 in snow

    Full Plainview, Minnesota profile: weather, storms, schools, jobs →

    Plainview: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement75th pctMild winters68th pctAffordability69th pct
    Percentile vs Minnesota towns on each part of this ranking.
  2. 14Zumbrota, Minnesota

    Retirement: 85th percentile · January average low (°F): 66th percentile · Home value ÷ income: 62nd percentile

    Zumbrota is a city of 3,726 people in Goodhue County, Minnesota. Homes have a median value of $249,300 against household income of $78,156; January lows average 4°F.

    3,726 people · Goodhue County · median home $249,300 · income $78,156 · Jan low 4°F · 44 in snow

    Full Zumbrota, Minnesota profile: weather, storms, schools, jobs →

    Zumbrota: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement85th pctMild winters66th pctAffordability62th pct
    Percentile vs Minnesota towns on each part of this ranking.
  3. 13Eagle Lake, Minnesota

    Retirement: 57th percentile · January average low (°F): 83rd percentile · Home value ÷ income: 74th percentile

    Eagle Lake is a city of 3,278 people in Blue Earth County, Minnesota. Homes have a median value of $276,500 against household income of $96,964; January lows average 6°F.

    3,278 people · Blue Earth County · median home $276,500 · income $96,964 · Jan low 6°F · 39 in snow

    Full Eagle Lake, Minnesota profile: weather, storms, schools, jobs →

    Eagle Lake: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement57th pctMild winters83th pctAffordability74th pct
    Percentile vs Minnesota towns on each part of this ranking.
  4. 12Chatfield, Minnesota

    Retirement: 65th percentile · January average low (°F): 66th percentile · Home value ÷ income: 84th percentile

    Chatfield is a city of 2,997 people in Fillmore County, Minnesota. Homes have a median value of $241,600 against household income of $96,078; January lows average 4°F.

    2,997 people · Fillmore County · median home $241,600 · income $96,078 · Jan low 4°F · 48 in snow

    Full Chatfield, Minnesota profile: weather, storms, schools, jobs →

    Chatfield: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement65th pctMild winters66th pctAffordability84th pct
    Percentile vs Minnesota towns on each part of this ranking.
  5. 11Goodview, Minnesota

    Retirement: 76th percentile · January average low (°F): 94th percentile · Home value ÷ income: 50th percentile

    Goodview is a city of 4,158 people in Winona County, Minnesota. Homes have a median value of $254,200 against household income of $74,712; January lows average 8°F.

    4,158 people · Winona County · median home $254,200 · income $74,712 · Jan low 8°F · 38 in snow

    Full Goodview, Minnesota profile: weather, storms, schools, jobs →

    Goodview: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement76th pctMild winters94th pctAffordability50th pct
    Percentile vs Minnesota towns on each part of this ranking.
  6. 10Arden Hills, Minnesota

    Retirement: 74th percentile · January average low (°F): 95th percentile · Home value ÷ income: 55th percentile

    Arden Hills is a city of 9,939 people in Ramsey County, Minnesota. Homes have a median value of $441,900 against household income of $134,118; January lows average 8°F.

    9,939 people · Ramsey County · median home $441,900 · income $134,118 · Jan low 8°F · 40 in snow

    Full Arden Hills, Minnesota profile: weather, storms, schools, jobs →

    Arden Hills: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement74th pctMild winters95th pctAffordability55th pct
    Percentile vs Minnesota towns on each part of this ranking.
  7. 9Two Harbors, Minnesota

    Retirement: 77th percentile · January average low (°F): 91st percentile · Home value ÷ income: 62nd percentile

    Two Harbors, Minnesota
    Photo: U.S. Army Corps of Engineers, photographer not specified or unknown (public domain, Wikimedia Commons)

    Two Harbors is a city of 3,633 people in Lake County, Minnesota. Homes have a median value of $206,800 against household income of $65,625; January lows average 7°F.

    3,633 people · Lake County · median home $206,800 · income $65,625 · Jan low 7°F · 61 in snow

    Full Two Harbors, Minnesota profile: weather, storms, schools, jobs →

    Two Harbors: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement77th pctMild winters91th pctAffordability62th pct
    Percentile vs Minnesota towns on each part of this ranking.
  8. 8Luverne, Minnesota

    Retirement: 81st percentile · January average low (°F): 87th percentile · Home value ÷ income: 62nd percentile

    Luverne is a city of 4,946 people in Rock County, Minnesota. Homes have a median value of $208,000 against household income of $64,366; January lows average 6°F.

    4,946 people · Rock County · median home $208,000 · income $64,366 · Jan low 6°F · 39 in snow

    Full Luverne, Minnesota profile: weather, storms, schools, jobs →

    Luverne: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement81th pctMild winters87th pctAffordability62th pct
    Percentile vs Minnesota towns on each part of this ranking.
  9. 7Sleepy Eye, Minnesota

    Retirement: 57th percentile · January average low (°F): 88th percentile · Home value ÷ income: 91st percentile

    Sleepy Eye is a city of 3,452 people in Brown County, Minnesota. Homes have a median value of $147,600 against household income of $66,911; January lows average 7°F.

    3,452 people · Brown County · median home $147,600 · income $66,911 · Jan low 7°F · 41 in snow

    Full Sleepy Eye, Minnesota profile: weather, storms, schools, jobs →

    Sleepy Eye: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement57th pctMild winters88th pctAffordability91th pct
    Percentile vs Minnesota towns on each part of this ranking.
  10. 6Pipestone, Minnesota

    Retirement: 72nd percentile · January average low (°F): 70th percentile · Home value ÷ income: 98th percentile

    Pipestone is a city of 4,215 people in Pipestone County, Minnesota. Homes have a median value of $114,100 against household income of $67,568; January lows average 5°F.

    4,215 people · Pipestone County · median home $114,100 · income $67,568 · Jan low 5°F · 40 in snow

    Full Pipestone, Minnesota profile: weather, storms, schools, jobs →

    Pipestone: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement72th pctMild winters70th pctAffordability98th pct
    Percentile vs Minnesota towns on each part of this ranking.
  11. 5La Crescent, Minnesota

    Retirement: 82nd percentile · January average low (°F): 100th percentile · Home value ÷ income: 62nd percentile

    La Crescent is a city of 5,276 people in Houston County, Minnesota. Homes have a median value of $272,400 against household income of $85,368; January lows average 12°F.

    5,276 people · Houston County · median home $272,400 · income $85,368 · Jan low 12°F · 38 in snow

    Full La Crescent, Minnesota profile: weather, storms, schools, jobs →

    La Crescent: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement82th pctMild winters100th pctAffordability62th pct
    Percentile vs Minnesota towns on each part of this ranking.
  12. 4Jackson, Minnesota

    Retirement: 77th percentile · January average low (°F): 70th percentile · Home value ÷ income: 97th percentile

    Jackson is a city of 3,323 people in Jackson County, Minnesota. Homes have a median value of $128,500 against household income of $70,223; January lows average 5°F.

    3,323 people · Jackson County · median home $128,500 · income $70,223 · Jan low 5°F · 45 in snow

    Full Jackson, Minnesota profile: weather, storms, schools, jobs →

    Jackson: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement77th pctMild winters70th pctAffordability97th pct
    Percentile vs Minnesota towns on each part of this ranking.
  13. 3Blue Earth, Minnesota

    Retirement: 79th percentile · January average low (°F): 81st percentile · Home value ÷ income: 91st percentile

    Blue Earth is a city of 3,174 people in Faribault County, Minnesota. Homes have a median value of $143,600 against household income of $66,771; January lows average 6°F.

    3,174 people · Faribault County · median home $143,600 · income $66,771 · Jan low 6°F · 47 in snow

    Full Blue Earth, Minnesota profile: weather, storms, schools, jobs →

    Blue Earth: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement79th pctMild winters81th pctAffordability91th pct
    Percentile vs Minnesota towns on each part of this ranking.
  14. 2Windom, Minnesota

    Retirement: 77th percentile · January average low (°F): 94th percentile · Home value ÷ income: 89th percentile

    Windom is a city of 4,798 people in Cottonwood County, Minnesota. Homes have a median value of $169,700 against household income of $74,899; January lows average 8°F.

    4,798 people · Cottonwood County · median home $169,700 · income $74,899 · Jan low 8°F · 44 in snow

    Full Windom, Minnesota profile: weather, storms, schools, jobs →

    Windom: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement77th pctMild winters94th pctAffordability89th pct
    Percentile vs Minnesota towns on each part of this ranking.
  15. 1Caledonia, Minnesota

    Retirement: 87th percentile · January average low (°F): 92nd percentile · Home value ÷ income: 92nd percentile

    Caledonia is a city of 2,847 people in Houston County, Minnesota. Homes have a median value of $157,900 against household income of $76,477; January lows average 8°F.

    2,847 people · Houston County · median home $157,900 · income $76,477 · Jan low 8°F · 45 in snow

    Full Caledonia, Minnesota profile: weather, storms, schools, jobs →

    Caledonia: The 15 Best Affordable Small Towns to Retire in Minnesota With Mild Winters scoresRetirement87th pctMild winters92th pctAffordability92th pct
    Percentile vs Minnesota towns on each part of this ranking.

Price vs ranking

Median home value vs ranking, Minnesota towns0255075100$98K$251K$403K$556K$709KMedian home valuePercentile
Orange squares are the 15 towns on this list; green dots are other towns on The Town Files in Minnesota.

More Minnesota rankings

Same ranking, other places

Methodology. We ranked 165 towns of 500–10,000 people in Minnesota (2020 Census population). Lifestyle measures are The Town Files lifestyle rankings, built from federal demographic, school, crime and housing data (2025), shown as percentiles. The combined score is the average of the percentiles shown for each town; a town must be above the middle on every one. Only towns better than 60% of their peers on this measure qualify, so lists can be shorter than 25. Sources: