The river begins near the west line of Marion County as two tributaries, the North Cottonwood River and the South Cottonwood River. They both start within 2 miles of each other, and within a few miles northwest of Lehigh.[5]
The North Cottonwood starts near the west line of Marion County,[5] crosses into McPherson County and roughly parallels the county line northward for 5 miles, then crosses back into Marion County.[6] It flows through Durham then into the Marion Reservoir.[5]
The South Cottonwood also starts near the west line of Marion County, flows southward about 1 mile west of Lehigh, then flows eastward about 2 miles south of Hillsboro, then northeast towards the lower side of the Marion Reservoir.[5]
The North and South Cottonwood join about 1 mile southeast of the Marion Reservoir to become the North Fork Cottonwood River, before flowing through the city of Marion.[5] The river flows southeast to Florence, then eastward towards Chase County.[7] In Chase County, it flows northeast through Cedar Point then near Clements and Elmdale. It then flows eastward through Strong City, Cottonwood Falls.[7]
The South Fork Cottonwood River starts south of Matfield Green, then flows northward along the east side of Matfield Green and Bazaar. It merges with the North Fork Cottonwood River about 3 miles east of Cottonwood Falls[7] then flows eastward near Saffordville and across into Lyon County near Plymouth, Kansas, then along the south edge of Emporia. It flows into the Neosho River about 5 miles east of Emporia.[8]