The highway's entry point is four and a half miles (7.2 km) east of Iowa's northwestern corner.
It continues east for seven and a half miles (12 km) until it reaches an interchange with Iowa 60 north of Sibley, that highway's final exit before entering Minnesota.
In northwestern Spirit Lake, Iowa 9 is joined by US 71 from the south and they travel east through the downtown area.
The highways turn sharply to the northeast in order to cross a narrow portion of East Okoboji Lake.
Four miles (6.4 km) east of town, US 71 turns to the north and Iowa 9 continues towards Superior.
Travelling through Buffalo Center in Winnebago County, the route takes a short southerly dip to pass northeast of Thompson, continues east, and then south overlapping U.S. Route 69 to the northern edge of Forest City where it again turns east.
In Worth County, it travels past the northern edges of Fertile and Hanlontown, where it soon crosses Interstate 35.
In Mitchell County, it makes a straight run to and through Osage, where it begins a concurrence with U.S. Route 218.
In Howard County, the highway makes a transition into the Driftless Area of Iowa, with progressively more rugged terrain evident as one travels east.
In Winneshiek County, it runs southeasterly, straightening out to go through Decorah in the valley of the Upper Iowa River.