The Neosho's headwaters are in Morris County, Kansas, and it flows southeast through Kansas. In Ottawa County, Oklahoma, the river turns south-southwest for the remainder of its course through Oklahoma. It meets the Arkansas River near the city of Muskogee, about a mile downstream of the confluence of the Arkansas River and the Verdigris River.
In Oklahoma the Neosho ends at its confluence with Spring River at Grand Lake. From that point on it has been the Grand River since the early 1800s.
The Neosho has been dammed at several points along its course, in most cases by the U.S. Army Corps of Engineers. In Kansas, a dam upstream of Council Grove forms Council Grove Lake, and a dam near New Strawn forms John Redmond Reservoir. In Oklahoma, a dam at Langley forms the Neosho's largest reservoir, the Grand Lake o' the Cherokees. A dam near Locust Grove forms Lake Hudson (also known as Markham Ferry Reservoir), and a dam upstream of Fort Gibson forms Fort Gibson Lake.
In Kansas, the Neosho is joined by the Cottonwood River in Lyon County. In Oklahoma, it is joined by the Spring River in Ottawa County and the Elk River in Delaware County.