Spirit Lake is a city in Dickinson County, Iowa, United States. The population was 4,840 at the 2010 census. It is the county seat of Dickinson County. The town is located along the western shore of East Okoboji Lake, in the Iowa Great Lakes region. Public education in the city of Spirit Lake is provided by the Spirit Lake Community School District.