It rises in the high Cascades in eastern Linn county, northwest of Three Fingered Jack in the Willamette National Forest. It flows north through the mountains past Marion Forks, receiving the drainage from the western slope of Mt. Jefferson. Near Mt. Jefferson it turns sharply west, descending through a canyon past Idanha, Detroit, and Gates. It emerges through the foothills into the Willamette Valley near Stayton, then flows briefly southwest through the valley where it joins the South Santiam River from the northeast to form the Santiam approximately 15 mi (24 km) southwest of Stayton. The confluence is approximately 10 mi (16 km) east of the confluence of the Santiam and the Willamette River.
In the 19th century the canyon of the North Santiam River provided a formidable obstacle to settlers. The construction of a railroad in 1887 opened up the canyon to settlement and logging of the surrounding mountains.