The James River rises in Wells County in central North Dakota in the state's "Lakes and Gardens Region."
After brief journey north, the river turns to the east flowing through Manfred and New Rockford. It takes a turn to the southeast emptying into a small body of water south of Juanita Lake near Grace City as it enters the Coteaus and Prairies Region. The river then exits the south end of the lake flowing toward Arrowwood Lake and eventually Jim Lake.
Continuing south, the river flows through Jamestown and Ypsianti before picking up Beaver Creek just south of Montpelier. Other towns and cities along its route include Adrian, Dickey, Grand Rapids and Lamoure. The river picks up Cottonwood Creek after it exits Lake Lamoure about 5 miles south of town before continuing by Oakes and exiting the state south of Ludden.
The 710 mile long river crosses through South Dakota to empty into the Missouri River at Yankton.